diff --git a/.docs/DEVELOPMENT.md b/.docs/DEVELOPMENT.md new file mode 100644 index 0000000000000000000000000000000000000000..30aa4270e1d1711c65facc9d9b6d88dcdf7973b5 --- /dev/null +++ b/.docs/DEVELOPMENT.md @@ -0,0 +1,81 @@ +# Development Guide + +## Dependencies + +Local development depends on the following packages: + +* [Apache Maven](https://maven.apache.org/) 3+ +* [Java JDK](https://openjdk.org/) 17 (LTS) +* [Docker Engine](https://docs.docker.com/engine/install/) 24+ + +Optional but recommended: + +* [GNU Make](https://www.gnu.org/software/make/) 4+ + +## Getting Started + +The Java-based services share some classes from the `metadata-service`. You need to install them locally as Maven +library via: + +```shell +mvn -f ./dbrepo-metadata-service/pom.xml clean install -DskipTests +``` + +## Testing + +We practice test-driven development and require contributors to test their code with at least 90% code coverage. + +## Code Versioning + +### CI/CD + +We get compute resources in-kind from [dataLAB](https://www.it.tuwien.ac.at/en/services/network-and-servers/datalab) +to run our pipeline: + +<p align="center"> +<img src="../.gitlab/gitlab-runner.png" alt="Gitlab runner configuration in the cluster" width="732" height="262" /><br/> +<i><strong>Figure 1.</strong> Gitlab runner configuration in the cluster.</i> +</p> + +Minikube cluster with 6vCPU and 28GB RAM. The CI pipeline is configured as follows in the `config.toml`: + +```toml +concurrent = 10 +[[runners]] + executor = "kubernetes" + environment = [ + "FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY=false" + ] + [runners.kubernetes] + namespace = "{{.Release.Namespace}}" + privileged = true + allowed_services = ["docker:24-dind"] + [[runners.kubernetes.services]] + name = "docker:24-dind" + command = [ "--registry-mirror=http://docker-io-mirror:80", "--insecure-registry=docker-io-mirror:80", "--registry-mirror=http://gcr-io-mirror:80", "--insecure-registry=gcr-io-mirror:80", "--registry-mirror=http://ghcr-io-mirror:80", "--insecure-registry=ghcr-io-mirror:80", "--registry-mirror=http://k8s-io-mirror:80", "--insecure-registry=k8s-io-mirror:80" ] + alias = "docker" + [[runners.kubernetes.volumes.empty_dir]] + name = "rundind" + mount_path = "/var/run/dind" + medium = "Memory" + [[runners.kubernetes.volumes.empty_dir]] + name = "tmp" + mount_path = "/tmp" + medium = "Memory" +``` + +For each job in the CI/CD pipeline, a pod with three containers is started: + +1. `build` the main build container, you can *freely* specify any image with `image: xyz` as base +2. `helper` the default helper container. +3. `svc-0` the Docker-in-Docker sidecar (rootless executed as user `rootless`/`1000`) exposing the Docker socket to the + `build` container under ` + +*Note.* Only Docker-in-Docker (dind) is allowed as service in the pipeline currently. For each job, a +dind-sidecar container `svc-0` is started that exposes the Docker socket at `/var/run/dind/docker.sock` in the `build` +container you can freely configure how you want. We are aware this is not optimal as it exposes *root* privileges in the +cluster. + +The full CI/CD pipeline Helm chart is documented in +the [`fda-deployment`](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-deployment/-/tree/master/charts/dbrepo-devops) +repository. \ No newline at end of file diff --git a/.docs/api-analyse.yaml b/.docs/api-analyse.yaml index 1aa3c5d60f4ae4758f49dc37b676cd85ab660219..881130d530dd5587715ee701b6fbce6c5ef9919f 100644 --- a/.docs/api-analyse.yaml +++ b/.docs/api-analyse.yaml @@ -1 +1 @@ -{"definitions":{},"externalDocs":{"description":"Sourcecode Documentation","url":"https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services"},"info":{"contact":{"email":"andreas.rauber@tuwien.ac.at","name":"Prof. Andreas Rauber"},"description":"Service that analyses data structures","license":{"name":"Apache 2.0","url":"https://www.apache.org/licenses/LICENSE-2.0"},"title":"Database Repository Analyse Service API","version":"1.3.0"},"openapi":"3.0.0","paths":{"/api/analyse/determinedt":{"post":{"consumes":["application/json"],"description":"This is a simple API which returns the datatypes of a (path) csv file","parameters":[{"description":"to-do description","in":"body","name":"body","required":true,"schema":{"properties":{"enum":{"example":true,"type":"boolean"},"enum_tol":{"example":0.1},"filepath":{"example":"/data/testdt08.csv","type":"string"},"separator":{"example":",","type":"string"}},"type":"object"}}],"produces":["application/json"],"responses":{"200":{"description":"OK"},"405":{"description":"Invalid input"}},"summary":"Determine datatypes"}},"/api/analyse/determinepk":{"post":{"consumes":["application/json"],"description":"This is a simple API which returns the primary keys + ranking of a (path) csv file","parameters":[{"description":"to-do description","in":"body","name":"body","required":true,"schema":{"properties":{"filepath":{"example":"/data/testdt08.csv","type":"string"},"seperator":{"example":",","type":"string"}},"type":"object"}}],"produces":["application/json"],"responses":{"200":{"description":"OK"},"405":{"description":"Invalid input"}},"summary":"Determine primary keys"}},"/health":{"get":{"consumes":["application/json"],"description":"This is a simple API which checks if the application is healthy","parameters":[{"description":"to-do description","in":"body","name":"body","required":true,"schema":{"properties":{"status":{"example":"UP","type":"string"}},"type":"object"}}],"produces":["application/json"],"responses":{"200":{"description":"OK"}},"summary":"Check if application is running"}}},"servers":[{"description":"Generated server url","url":"http://localhost:5000"},{"description":"Sandbox","url":"https://dbrepo2.tuwien.ac.at"}]} +{"definitions":{},"externalDocs":{"description":"Sourcecode Documentation","url":"https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services"},"info":{"contact":{"email":"andreas.rauber@tuwien.ac.at","name":"Prof. Andreas Rauber"},"description":"Service that analyses data structures","license":{"name":"Apache 2.0","url":"https://www.apache.org/licenses/LICENSE-2.0"},"title":"Database Repository Analyse Service API","version":"1.3.0"},"openapi":"3.0.0","paths":{"/api/analyse/determinedt":{"post":{"consumes":["application/json"],"description":"This is a simple API which returns the datatypes of a (path) csv file","parameters":[{"description":"to-do description","in":"body","name":"body","required":true,"schema":{"properties":{"enum":{"example":true,"type":"boolean"},"enum_tol":{"example":0.1},"filename":{"example":"sample.csv","type":"string"},"separator":{"example":",","type":"string"}},"type":"object"}}],"produces":["application/json"],"responses":{"200":{"description":"OK"},"405":{"description":"Invalid input"}},"summary":"Determine datatypes"}},"/api/analyse/determinepk":{"post":{"consumes":["application/json"],"description":"This is a simple API which returns the primary keys + ranking of a (path) csv file","parameters":[{"description":"to-do description","in":"body","name":"body","required":true,"schema":{"properties":{"filepath":{"example":"/data/testdt08.csv","type":"string"},"seperator":{"example":",","type":"string"}},"type":"object"}}],"produces":["application/json"],"responses":{"200":{"description":"OK"},"405":{"description":"Invalid input"}},"summary":"Determine primary keys"}},"/health":{"get":{"consumes":["application/json"],"description":"This is a simple API which checks if the application is healthy","parameters":[{"description":"to-do description","in":"body","name":"body","required":true,"schema":{"properties":{"status":{"example":"UP","type":"string"}},"type":"object"}}],"produces":["application/json"],"responses":{"200":{"description":"OK"}},"summary":"Check if application is running"}}},"servers":[{"description":"Generated server url","url":"http://localhost:5000"},{"description":"Sandbox","url":"https://dbrepo2.tuwien.ac.at"}]} diff --git a/.docs/api-metadata.yaml b/.docs/api-metadata.yaml index b92b07c6709e5f92c26bd9917c6553da034c2988..41d0bbee22d7cfa46a03646a1c77bf0f281d044e 100644 --- a/.docs/api-metadata.yaml +++ b/.docs/api-metadata.yaml @@ -38,38 +38,38 @@ paths: type: integer format: int64 responses: - "404": - description: "Table, database or user could not be found" + "400": + description: Table history query is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "503": - description: Connection to the database failed + "200": + description: Find table history successfully content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Find table history is not permitted + type: array + items: + $ref: '#/components/schemas/TableHistoryDto' + "404": + description: "Table, database or user could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Table history query is malformed + "405": + description: Find table history is not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: Find table history successfully + "503": + description: Connection to the database failed content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/TableHistoryDto' + $ref: '#/components/schemas/ApiErrorDto' "504": description: Query store failed to query table history content: @@ -97,38 +97,38 @@ paths: type: integer format: int64 responses: - "404": - description: "Table, database or user could not be found" + "400": + description: Table history query is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "503": - description: Connection to the database failed + "200": + description: Find table history successfully content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Find table history is not permitted + type: array + items: + $ref: '#/components/schemas/TableHistoryDto' + "404": + description: "Table, database or user could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Table history query is malformed + "405": + description: Find table history is not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: Find table history successfully + "503": + description: Connection to the database failed content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/TableHistoryDto' + $ref: '#/components/schemas/ApiErrorDto' "504": description: Query store failed to query table history content: @@ -196,36 +196,6 @@ paths: $ref: '#/components/schemas/QueryResultDto' security: - bearerAuth: [] - put: - tags: - - table-data-endpoint - summary: Update data - operationId: update_6 - parameters: - - name: databaseId - in: path - required: true - schema: - type: integer - format: int64 - - name: tableId - in: path - required: true - schema: - type: integer - format: int64 - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/TableCsvUpdateDto' - required: true - responses: - "200": - description: OK - deprecated: true - security: - - bearerAuth: [] post: tags: - table-data-endpoint @@ -259,7 +229,7 @@ paths: tags: - table-data-endpoint summary: Delete data - operationId: delete_7 + operationId: delete_6 parameters: - name: databaseId in: path @@ -362,14 +332,14 @@ paths: application/json: schema: $ref: '#/components/schemas/UserDto' - "404": - description: User was not found + "405": + description: Find user is not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Find user is not permitted + "404": + description: User was not found content: application/json: schema: @@ -395,14 +365,14 @@ paths: $ref: '#/components/schemas/UserUpdateDto' required: true responses: - "405": - description: Modify user is not permitted + "404": + description: User attribute was not found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: User attribute was not found + "405": + description: Modify user is not permitted content: application/json: schema: @@ -435,24 +405,24 @@ paths: $ref: '#/components/schemas/UserThemeSetDto' required: true responses: - "405": - description: Modify user is not permitted + "202": + description: Modified user theme content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/UserDto' "404": description: User or user attribute was not found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "202": - description: Modified user theme + "405": + description: Modify user is not permitted content: application/json: schema: - $ref: '#/components/schemas/UserDto' + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] /api/user/{id}/password: @@ -481,14 +451,14 @@ paths: application/json: schema: $ref: '#/components/schemas/UserDto' - "405": - description: Modify user is not permitted + "404": + description: User was not found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: User was not found + "405": + description: Modify user is not permitted content: application/json: schema: @@ -509,18 +479,18 @@ paths: type: integer format: int64 responses: - "404": - description: Could not find ontology - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "200": description: Find one ontology content: application/json: schema: $ref: '#/components/schemas/OntologyDto' + "404": + description: Could not find ontology + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' put: tags: - ontology-endpoint @@ -540,18 +510,18 @@ paths: $ref: '#/components/schemas/OntologyModifyDto' required: true responses: - "404": - description: Could not find ontology - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "202": description: Updated ontology successfully content: application/json: schema: $ref: '#/components/schemas/OntologyDto' + "404": + description: Could not find ontology + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] delete: @@ -579,87 +549,6 @@ paths: $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] - /api/pid/{id}: - put: - tags: - - persistence-endpoint - summary: Update some identifier - operationId: update_1 - parameters: - - name: id - in: path - required: true - schema: - type: integer - format: int64 - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/IdentifierSaveDto' - required: true - responses: - "406": - description: Updating identifier not allowed - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Updating identifier not permitted - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' - "202": - description: Updated identifier - content: - application/json: - schema: - $ref: '#/components/schemas/IdentifierDto' - "404": - description: Identifier or user could not be found - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Identifier data is not valid to the form - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' - security: - - bearerAuth: [] - delete: - tags: - - persistence-endpoint - summary: Delete some identifier - operationId: delete_1 - parameters: - - name: id - in: path - required: true - schema: - type: integer - format: int64 - responses: - "405": - description: Deleting identifier not permitted - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' - "202": - description: Deleted identifier - "404": - description: Identifier could not be found - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' - security: - - bearerAuth: [] /api/maintenance/message/{id}: get: tags: @@ -684,7 +573,7 @@ paths: tags: - maintenance-endpoint summary: Update maintenance message - operationId: update_2 + operationId: update_1 parameters: - name: id in: path @@ -724,16 +613,16 @@ paths: type: integer format: int64 responses: - "202": - description: Deleted message - content: - application/json: {} "404": description: Could not find message content: application/json: schema: $ref: '#/components/schemas/BannerMessageNotFoundException' + "202": + description: Deleted message + content: + application/json: {} /api/image/{id}: get: tags: @@ -748,23 +637,23 @@ paths: type: integer format: int64 responses: - "404": - description: Image could not be found - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "200": description: Found image content: application/json: schema: $ref: '#/components/schemas/ImageDto' + "404": + description: Image could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' put: tags: - image-endpoint summary: Update some image - operationId: update_3 + operationId: update_2 parameters: - name: id in: path @@ -779,18 +668,18 @@ paths: $ref: '#/components/schemas/ImageChangeDto' required: true responses: - "404": - description: Image could not be found - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "202": description: Updated image successfully content: application/json: schema: $ref: '#/components/schemas/ImageDto' + "404": + description: Image could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] delete: @@ -836,24 +725,24 @@ paths: $ref: '#/components/schemas/DatabaseModifyVisibilityDto' required: true responses: - "405": - description: Visibility modification is not permitted + "404": + description: Database or user could not be found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "202": - description: Visibility modified successfully + "405": + description: Visibility modification is not permitted content: application/json: schema: - $ref: '#/components/schemas/DatabaseDto' - "404": - description: Database or user could not be found + $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Visibility modified successfully content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/DatabaseDto' security: - bearerAuth: [] /api/database/{id}/transfer: @@ -876,6 +765,12 @@ paths: $ref: '#/components/schemas/DatabaseTransferDto' required: true responses: + "404": + description: Database or user could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' "405": description: Transfer of ownership is not permitted content: @@ -888,12 +783,6 @@ paths: application/json: schema: $ref: '#/components/schemas/DatabaseDto' - "404": - description: Database or user could not be found - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] /api/database/{id}/table/{tableId}/column/{columnId}: @@ -901,7 +790,7 @@ paths: tags: - table-column-endpoint summary: Update a table column semantic mapping - operationId: update_4 + operationId: update_3 parameters: - name: id in: path @@ -933,38 +822,38 @@ paths: $ref: '#/components/schemas/ColumnSemanticsUpdateDto' required: true responses: - "405": - description: Update column semantics not permitted + "202": + description: Updated column semantics successfully content: application/json: schema: $ref: '#/components/schemas/ColumnDto' - "404": - description: "Table, database, semantic concept, unit of measurement or\ - \ container could not be found" + "403": + description: Access to the database is forbidden content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "403": - description: Access to the database is forbidden + "400": + description: Update semantic concept query is malformed or update unit of + measurement query is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "202": - description: Updated column semantics successfully + "404": + description: "Table, database, semantic concept, unit of measurement or\ + \ container could not be found" content: application/json: schema: - $ref: '#/components/schemas/ColumnDto' - "400": - description: Update semantic concept query is malformed or update unit of - measurement query is malformed + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Update column semantics not permitted content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/ColumnDto' security: - bearerAuth: [] /api/database/{id}/access/{userId}: @@ -972,7 +861,7 @@ paths: tags: - access-endpoint summary: Modify access to some database - operationId: update_5 + operationId: update_4 parameters: - name: id in: path @@ -1000,8 +889,6 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "202": - description: Modify access succeeded "400": description: Modify access query or database connection is malformed content: @@ -1014,6 +901,8 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Modify access succeeded security: - bearerAuth: [] post: @@ -1041,14 +930,14 @@ paths: $ref: '#/components/schemas/DatabaseGiveAccessDto' required: true responses: - "202": - description: Granting access succeeded "400": description: Granting access query or database connection is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Granting access succeeded "405": description: Granting access not permitted content: @@ -1082,8 +971,8 @@ paths: type: string format: uuid responses: - "403": - description: Revoke of access not permitted as no access was found + "404": + description: User with access was not found content: application/json: schema: @@ -1094,16 +983,16 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: User with access was not found + "400": + description: Modify access query or database connection is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' "202": description: Revoked access successfully - "400": - description: Modify access query or database connection is malformed + "403": + description: Revoke of access not permitted as no access was found content: application/json: schema: @@ -1130,12 +1019,6 @@ paths: type: integer format: int64 responses: - "503": - description: Connection to the database failed - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "504": description: Query store failed to select query content: @@ -1148,24 +1031,30 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: List queries + "405": + description: Find query is not permitted content: application/json: schema: - $ref: '#/components/schemas/QueryDto' + $ref: '#/components/schemas/ApiErrorDto' "501": description: Image is not supported content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Find query is not permitted + "503": + description: Connection to the database failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "200": + description: List queries + content: + application/json: + schema: + $ref: '#/components/schemas/QueryDto' security: - bearerAuth: [] put: @@ -1193,14 +1082,14 @@ paths: $ref: '#/components/schemas/QueryPersistDto' required: true responses: - "409": - description: Query is already persisted + "200": + description: Persist query successful content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "504": - description: Query store failed to persist query + $ref: '#/components/schemas/QueryDto' + "405": + description: Persist query is not permitted content: application/json: schema: @@ -1211,20 +1100,20 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: Persist query successful + "501": + description: Image is not supported content: application/json: schema: - $ref: '#/components/schemas/QueryDto' - "501": - description: Image is not supported + $ref: '#/components/schemas/ApiErrorDto' + "409": + description: Query is already persisted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Persist query is not permitted + "504": + description: Query store failed to persist query content: application/json: schema: @@ -1258,69 +1147,34 @@ paths: $ref: '#/components/schemas/SignupRequestDto' required: true responses: - "201": - description: Created user - content: - application/json: - schema: - $ref: '#/components/schemas/UserBriefDto' "400": description: Parameters are not well-formed (likely email) content: application/json: {} - "409": - description: User with username already exists - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' - "417": - description: User with e-mail already exists + "404": + description: default role not found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: default role not found + "409": + description: User with username already exists content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - /api/semantic/unit: - get: - tags: - - semantics-endpoint - summary: List semantic units - operationId: findAllUnits - responses: - "200": - description: Find all semantic units + "201": + description: Created user content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/UnitDto' - post: - tags: - - semantics-endpoint - summary: Save a semantic unit - operationId: saveUnit - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/UnitSaveDto' - required: true - responses: - "202": - description: Saved a semantic unit + $ref: '#/components/schemas/UserBriefDto' + "417": + description: User with e-mail already exists content: application/json: schema: - $ref: '#/components/schemas/UnitDto' - security: - - bearerAuth: [] + $ref: '#/components/schemas/ApiErrorDto' /api/semantic/ontology: get: tags: @@ -1349,46 +1203,11 @@ paths: required: true responses: "201": - description: Could not find user - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' - security: - - bearerAuth: [] - /api/semantic/concept: - get: - tags: - - semantics-endpoint - summary: List semantic concepts - operationId: findAllConcepts - responses: - "200": - description: Find all semantic concepts - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/ConceptDto' - post: - tags: - - semantics-endpoint - summary: Create or update a semantic concept - operationId: saveUnit_1 - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ConceptSaveDto' - required: true - responses: - "202": - description: Saved a semantic concept + description: Registered ontology successfully content: application/json: schema: - $ref: '#/components/schemas/ConceptDto' + $ref: '#/components/schemas/OntologyDto' security: - bearerAuth: [] /api/maintenance/message: @@ -1451,6 +1270,12 @@ paths: $ref: '#/components/schemas/ImageCreateDto' required: true responses: + "502": + description: Failed to connect + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' "409": description: Image already exists content: @@ -1463,24 +1288,18 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "201": - description: Created image - content: - application/json: - schema: - $ref: '#/components/schemas/ImageDto' - "502": - description: Failed to connect + "400": + description: Image specification is invalid content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Image specification is invalid + "201": + description: Created image content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/ImageDto' security: - bearerAuth: [] /api/identifier: @@ -1508,6 +1327,12 @@ paths: schema: type: integer format: int64 + - name: tid + in: query + required: false + schema: + type: integer + format: int64 - name: type in: query required: false @@ -1516,6 +1341,7 @@ paths: enum: - database - subset + - table - view responses: "200": @@ -1538,24 +1364,12 @@ paths: $ref: '#/components/schemas/IdentifierSaveDto' required: true responses: - "406": - description: Creating identifier not allowed - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "201": description: Created identifier content: application/json: schema: $ref: '#/components/schemas/IdentifierDto' - "400": - description: Identifier form contains invalid request data - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "403": description: Insufficient access rights or authorities content: @@ -1574,20 +1388,38 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Creating identifier not permitted + "406": + description: Creating identifier not allowed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - security: - - bearerAuth: [] - /api/database: - get: - tags: - - database-endpoint - summary: List databases - operationId: list_2 + "404": + description: "Failed to find database, table or view" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Identifier form contains invalid request data + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Creating identifier not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/database: + get: + tags: + - database-endpoint + summary: List databases + operationId: list_2 parameters: - name: filter in: query @@ -1615,58 +1447,58 @@ paths: $ref: '#/components/schemas/DatabaseCreateDto' required: true responses: - "503": - description: Connection to the database failed + "406": + description: Failed to create user at broker service or virtual host could + not be reached at broker service content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "501": - description: Container image is not supported + "405": + description: Database create permission is missing or grant permissions + at broker service failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: "Container, user or database could not be found" + "400": + description: Database create query is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Database create permission is missing or grant permissions - at broker service failed + "201": + description: Created a new database content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/DatabaseBriefDto' "409": description: Database name already exist or query store could not be created content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Database create query is malformed + "501": + description: Container image is not supported content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "502": - description: Connection to the container failed + "503": + description: Connection to the database failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "201": - description: Created a new database + "502": + description: Connection to the container failed content: application/json: schema: - $ref: '#/components/schemas/DatabaseBriefDto' - "406": - description: Failed to create user at broker service or virtual host could - not be reached at broker service + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: "Container, user or database could not be found" content: application/json: schema: @@ -1709,14 +1541,14 @@ paths: type: array items: $ref: '#/components/schemas/ViewBriefDto' - "405": - description: Find views is not permitted + "404": + description: Database or user could not be found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: Database or user could not be found + "405": + description: Find views is not permitted content: application/json: schema: @@ -1742,38 +1574,32 @@ paths: $ref: '#/components/schemas/ViewCreateDto' required: true responses: - "503": - description: Connection to the database failed + "403": + description: Credentials missing content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "201": - description: Create view successfully - content: - application/json: - schema: - $ref: '#/components/schemas/ViewBriefDto' "401": description: Credentials missing content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Create view resulted in an invalid query statement + "503": + description: Connection to the database failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "403": - description: Credentials missing + "404": + description: Database or user could not be found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: Database or user could not be found + "405": + description: Create view is not permitted content: application/json: schema: @@ -1784,12 +1610,18 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Create view is not permitted + "423": + description: Create view resulted in an invalid query statement content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "201": + description: Create view successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ViewBriefDto' security: - bearerAuth: [] /api/database/{databaseId}/table: @@ -1806,26 +1638,26 @@ paths: type: integer format: int64 responses: - "200": - description: List tables + "405": + description: List tables not permitted content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/TableBriefDto' + $ref: '#/components/schemas/ApiErrorDto' "404": description: Database could not be found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: List tables not permitted + "200": + description: List tables content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + type: array + items: + $ref: '#/components/schemas/TableBriefDto' security: - bearerAuth: [] post: @@ -1847,38 +1679,38 @@ paths: $ref: '#/components/schemas/TableCreateDto' required: true responses: - "409": - description: Create table conflicts with existing table name + "201": + description: Created a new table content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "504": - description: Broker service failed to create queue + $ref: '#/components/schemas/TableBriefDto' + "404": + description: "Database, container or user could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: "Database, container or user could not be found" + "405": + description: Create table not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "201": - description: Created a new table + "501": + description: Image is not supported content: application/json: schema: - $ref: '#/components/schemas/TableBriefDto' - "405": - description: Create table not permitted + $ref: '#/components/schemas/ApiErrorDto' + "504": + description: Broker service failed to create queue content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "501": - description: Image is not supported + "409": + description: Create table conflicts with existing table name content: application/json: schema: @@ -1940,18 +1772,6 @@ paths: schema: type: boolean responses: - "503": - description: Connection to the database failed - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' - "504": - description: Query store failed to select query - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "423": description: Selection of time-versioned query resulted in an invalid query statement @@ -1965,14 +1785,14 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "501": - description: Image is not supported + "504": + description: Query store failed to select query content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Find all queries is not permitted + "501": + description: Image is not supported content: application/json: schema: @@ -1985,6 +1805,18 @@ paths: type: array items: $ref: '#/components/schemas/QueryBriefDto' + "503": + description: Connection to the database failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Find all queries is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] post: @@ -2073,12 +1905,6 @@ paths: $ref: '#/components/schemas/ContainerCreateRequestDto' required: true responses: - "409": - description: Container name already exists - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "502": description: Failed to connect content: @@ -2097,8 +1923,29 @@ paths: application/json: schema: $ref: '#/components/schemas/ContainerBriefDto' + "409": + description: Container name already exists + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] + /api/semantic/unit: + get: + tags: + - semantics-endpoint + summary: List semantic units + operationId: findAllUnits + responses: + "200": + description: Find all semantic units + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/UnitDto' /api/semantic/ontology/{id}/entity: get: tags: @@ -2123,32 +1970,38 @@ paths: schema: type: string responses: + "200": + description: Found entities + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/EntityDto' "417": description: Generated query or uri is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Filter params are invalid + "404": + description: Could not find ontology content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: Could not find ontology + "400": + description: Filter params are invalid content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: Found entities + "422": + description: Ontology does not have rdf or sparql endpoint content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/EntityDto' + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] /api/semantic/database/{databaseId}/table/{tableId}: @@ -2171,12 +2024,6 @@ paths: type: integer format: int64 responses: - "417": - description: Generated query is malformed - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "200": description: Suggested table semantics successfully content: @@ -2185,12 +2032,24 @@ paths: type: array items: $ref: '#/components/schemas/TableColumnEntityDto' + "417": + description: Generated query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' "404": description: Could not find the table content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "422": + description: Ontology does not have rdf or sparql endpoint + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] /api/semantic/database/{databaseId}/table/{tableId}/column/{columnId}: @@ -2219,28 +2078,49 @@ paths: type: integer format: int64 responses: - "404": - description: Could not find the table column + "200": + description: Suggested table column semantics successfully content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + type: array + items: + $ref: '#/components/schemas/TableColumnEntityDto' "417": description: Generated query is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: Suggested table column semantics successfully + "404": + description: Could not find the table column content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/TableColumnEntityDto' + $ref: '#/components/schemas/ApiErrorDto' + "422": + description: Ontology does not have rdf or sparql endpoint + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] + /api/semantic/concept: + get: + tags: + - semantics-endpoint + summary: List semantic concepts + operationId: findAllConcepts + responses: + "200": + description: Find all semantic concepts + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ConceptDto' /api/pid/{pid}: get: tags: @@ -2260,6 +2140,13 @@ paths: schema: type: string responses: + "400": + description: "Identifier could not be exported, the requested style is not\ + \ known" + content: + text/bibliography: + schema: + $ref: '#/components/schemas/ApiErrorDto' "200": description: Found identifier successfully content: @@ -2285,13 +2172,6 @@ paths: text/csv: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: "Identifier could not be exported, the requested style is not\ - \ known" - content: - text/bibliography: - schema: - $ref: '#/components/schemas/ApiErrorDto' /api/oai: get: tags: @@ -2331,7 +2211,7 @@ paths: tags: - identifier-endpoint summary: Retrieve metadata from identifier - operationId: create_10 + operationId: retrieve parameters: - name: url in: query @@ -2373,11 +2253,12 @@ paths: $ref: '#/components/schemas/DatabaseDto' security: - bearerAuth: [] - delete: + /api/database/{id}/table/{tableId}/export: + get: tags: - - database-endpoint - summary: Delete some database - operationId: delete_4 + - export-endpoint + summary: Export table + operationId: export parameters: - name: id in: path @@ -2385,94 +2266,63 @@ paths: schema: type: integer format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + - name: timestamp + in: query + required: false + schema: + type: string + format: date-time responses: - "503": - description: Connection to the database failed + "201": + description: Created identifier content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "501": - description: Container image is not supported + $ref: '#/components/schemas/IdentifierDto' + "410": + description: Blob storage operation could not be completed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Database delete permission is missing or revoke permissions - at broker service failed + "503": + description: Database connection could not be established content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "201": - description: Deleted a database - content: - application/json: - schema: - $ref: '#/components/schemas/DatabaseBriefDto' - "406": - description: Failed to delete user at broker service or virtual host could - not be reached at broker service + "404": + description: "Table, database or user was not found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "502": - description: Connection to the container failed + "403": + description: Operation is not allowed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Database delete query is malformed + "422": + description: Sidecar operation could not be completed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: Container or database could not be found + "400": + description: Images is not supported or table/query is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] - /api/database/{id}/table/{tableId}/export: - get: - tags: - - export-endpoint - summary: Export table - operationId: export - parameters: - - name: id - in: path - required: true - schema: - type: integer - format: int64 - - name: tableId - in: path - required: true - schema: - type: integer - format: int64 - - name: timestamp - in: query - required: false - schema: - type: string - format: date-time - responses: - "200": - description: OK - content: - '*/*': - schema: - type: string - format: binary - security: - - bearerAuth: [] /api/database/{id}/access: get: tags: @@ -2487,18 +2337,18 @@ paths: type: integer format: int64 responses: - "405": - description: Check access is not permitted - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "200": description: Found database access content: application/json: schema: $ref: '#/components/schemas/DatabaseAccessDto' + "405": + description: Check access is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' "403": description: No access to this database content: @@ -2527,18 +2377,18 @@ paths: type: integer format: int64 responses: - "404": - description: "Database, view or user could not be found" - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "200": description: Find view successfully content: application/json: schema: $ref: '#/components/schemas/ViewDto' + "404": + description: "Database, view or user could not be found" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' "405": description: Find view is not permitted content: @@ -2551,7 +2401,7 @@ paths: tags: - view-endpoint summary: Delete one view - operationId: delete_5 + operationId: delete_4 parameters: - name: databaseId in: path @@ -2566,46 +2416,46 @@ paths: type: integer format: int64 responses: - "200": - description: Delete view successfully - "503": - description: Connection to the database failed + "400": + description: Delete view query is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: "Database, view or user could not be found" + "403": + description: Credentials missing content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "401": - description: Credentials missing + "405": + description: Delete view is not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Delete view is not permitted + "401": + description: Credentials missing content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Delete view resulted in an invalid query statement + "503": + description: Connection to the database failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Delete view query is malformed + "423": + description: Delete view resulted in an invalid query statement content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "403": - description: Credentials missing + "200": + description: Delete view successfully + "404": + description: "Database, view or user could not be found" content: application/json: schema: @@ -2644,68 +2494,68 @@ paths: type: integer format: int64 responses: - "503": - description: Connection to the database failed + "404": + description: "Database, view, container or user could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Pagination not in valid range or find data query is malformed + "200": + description: Find data successfully content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Find data is not permitted + $ref: '#/components/schemas/QueryResultDto' + "423": + description: Find data resulted in an invalid query statement content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "401": - description: Credentials missing + "504": + description: Query store failed to query view data content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "417": - description: Parsing of resulting columns failed + "403": + description: Credentials missing content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: "Database, view, container or user could not be found" + "501": + description: Image is not supported content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "403": + "401": description: Credentials missing content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: Find data successfully + "417": + description: Parsing of resulting columns failed content: application/json: schema: - $ref: '#/components/schemas/QueryResultDto' - "423": - description: Find data resulted in an invalid query statement + $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "501": - description: Image is not supported + "405": + description: Find data is not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "504": - description: Query store failed to query view data + "400": + description: Pagination not in valid range or find data query is malformed content: application/json: schema: @@ -2767,18 +2617,18 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: Find table successfully - content: - application/json: - schema: - $ref: '#/components/schemas/TableDto' "404": description: "Table, database or container could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Find table successfully + content: + application/json: + schema: + $ref: '#/components/schemas/TableDto' "405": description: Find table not permitted content: @@ -2791,7 +2641,7 @@ paths: tags: - table-endpoint summary: Delete a table - operationId: delete_6 + operationId: delete_5 parameters: - name: databaseId in: path @@ -2806,26 +2656,20 @@ paths: type: integer format: int64 responses: - "400": - description: Delete table query resulted in an invalid query statement + "403": + description: Access to the database is forbidden content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "202": - description: Delete table successfully - content: - application/json: - schema: - $ref: '#/components/schemas/TableDto' - "423": - description: Delete table resulted in an invalid state + "404": + description: "Table, database or container could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "403": - description: Access to the database is forbidden + "405": + description: Delete table not permitted content: application/json: schema: @@ -2836,14 +2680,20 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Delete table not permitted + "202": + description: Delete table successfully + content: + application/json: + schema: + $ref: '#/components/schemas/TableDto' + "423": + description: Delete table resulted in an invalid state content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: "Table, database or container could not be found" + "400": + description: Delete table query resulted in an invalid query statement content: application/json: schema: @@ -3029,18 +2879,18 @@ paths: type: integer format: int64 responses: - "502": - description: Connection to the container failed - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "200": description: Found container content: application/json: schema: $ref: '#/components/schemas/ContainerDto' + "502": + description: Connection to the container failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' "404": description: Container image could not be found content: @@ -3051,7 +2901,7 @@ paths: tags: - container-endpoint summary: Delete some container - operationId: delete_8 + operationId: delete_7 parameters: - name: id in: path @@ -3060,14 +2910,14 @@ paths: type: integer format: int64 responses: + "202": + description: Deleted container successfully "410": description: Container is already removed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "202": - description: Deleted container successfully "409": description: Container is still running content: @@ -3076,6 +2926,36 @@ paths: $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] + /api/pid/{id}: + delete: + tags: + - persistence-endpoint + summary: Delete some identifier + operationId: delete_1 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "405": + description: Deleting identifier not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: Identifier or database could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Deleted identifier + security: + - bearerAuth: [] components: schemas: ApiErrorDto: @@ -3295,6 +3175,9 @@ components: sparql_endpoint: type: string example: Ontology SPARQL endpoint + rdf_path: + type: string + example: rdf/om-2.0.rdf OntologyDto: required: - created @@ -3332,6 +3215,9 @@ components: sparql_endpoint: type: string example: https://query.wikidata.org/sparql + rdf_path: + type: string + example: rdf/om-2.0.rdf UserBriefDto: required: - id @@ -3361,568 +3247,736 @@ components: family_name: type: string example: Carberry - CreatorSaveDto: + BannerMessageUpdateDto: required: - - creator_name - - firstname - - lastname - - name_type + - message + - type type: object properties: - id: - type: integer - format: int64 - firstname: - type: string - example: Josiah - lastname: + type: type: string - example: Carberry - affiliation: + enum: + - error + - warning + - info + message: type: string - example: Wesleyan University - creator_name: + example: Maintenance starts on 8am on Monday + link: type: string - example: "Carberry, Josiah" - name_type: + example: https://example.com + link_text: type: string - example: Personal - enum: - - Personal - - Organizational - name_identifier: + example: More + display_start: type: string - example: 0000-0002-1825-0097 - name_identifier_scheme: + format: date-time + example: 2021-03-12T15:26:21Z + display_end: type: string - example: ORCID - enum: - - ORCID - - ROR - - ISNI - - GRID - affiliation_identifier: + format: date-time + example: 2021-03-12T15:26:21Z + BannerMessageNotFoundException: + type: object + properties: + cause: + type: object + properties: + stackTrace: + type: array + items: + type: object + properties: + classLoaderName: + type: string + moduleName: + type: string + moduleVersion: + type: string + methodName: + type: string + fileName: + type: string + lineNumber: + type: integer + format: int32 + nativeMethod: + type: boolean + className: + type: string + message: + type: string + suppressed: + type: array + items: + type: object + properties: + stackTrace: + type: array + items: + type: object + properties: + classLoaderName: + type: string + moduleName: + type: string + moduleVersion: + type: string + methodName: + type: string + fileName: + type: string + lineNumber: + type: integer + format: int32 + nativeMethod: + type: boolean + className: + type: string + message: + type: string + localizedMessage: + type: string + localizedMessage: + type: string + stackTrace: + type: array + items: + type: object + properties: + classLoaderName: + type: string + moduleName: + type: string + moduleVersion: + type: string + methodName: + type: string + fileName: + type: string + lineNumber: + type: integer + format: int32 + nativeMethod: + type: boolean + className: + type: string + message: type: string - example: https://ror.org/04d836q62 - affiliation_identifier_scheme: + suppressed: + type: array + items: + type: object + properties: + stackTrace: + type: array + items: + type: object + properties: + classLoaderName: + type: string + moduleName: + type: string + moduleVersion: + type: string + methodName: + type: string + fileName: + type: string + lineNumber: + type: integer + format: int32 + nativeMethod: + type: boolean + className: + type: string + message: + type: string + localizedMessage: + type: string + localizedMessage: type: string - example: ROR - enum: - - ROR - - GRID - - ISNI - IdentifierFunderSaveDto: + BannerMessageBriefDto: required: - - funder_name + - message + - type type: object properties: - id: - type: integer - format: int64 - funder_name: - type: string - example: European Commission - funder_identifier: - type: string - example: http://doi.org/10.13039/501100000780 - funder_identifier_type: + type: type: string - example: Crossref Funder ID enum: - - Crossref Funder ID - - ROR - - GND - - ISNI - - Other - scheme_uri: + - error + - warning + - info + message: type: string - example: http://doi.org/ - award_number: + example: Maintenance starts on 8am on Monday + link: type: string - example: "824087" - award_title: + example: https://example.com + link_text: type: string - example: EOSC-Life - IdentifierSaveDescriptionDto: + example: More + ImageChangeDto: + required: + - dialect + - driver_class + - jdbc_method + - registry type: object properties: - id: + registry: + type: string + example: docker.io/library + defaultPort: + maximum: 65535 + minimum: 1024 type: integer - format: int64 - description: + format: int32 + example: 5432 + dialect: type: string - example: "Air quality reports at Stephansplatz, Vienna" - language: + example: Postgres + driver_class: type: string - example: en - enum: - - ab - - aa - - af - - ak - - sq - - am - - ar - - an - - hy - - as - - av - - ae - - ay - - az - - bm - - ba - - eu - - be - - bn - - bh - - bi - - bs - - br - - bg - - my - - ca - - km - - ch - - ce - - ny - - zh - - cu - - cv - - kw - - co - - cr - - hr - - cs - - da - - dv - - nl - - dz - - en - - eo - - et - - ee - - fo - - fj - - fi - - fr - - ff - - gd - - gl - - lg - - ka - - de - - ki - - el - - kl - - gn - - gu - - ht - - ha - - he - - hz - - hi - - ho - - hu - - is - - io - - ig - - id - - ia - - ie - - iu - - ik - - ga - - it - - ja - - jv - - kn - - kr - - ks - - kk - - rw - - kv - - kg - - ko - - kj - - ku - - ky - - lo - - la - - lv - - lb - - li - - ln - - lt - - lu - - mk - - mg - - ms - - ml - - mt - - gv - - mi - - mr - - mh - - ro - - mn - - na - - nv - - nd - - ng - - ne - - se - - "no" - - nb - - nn - - ii - - oc - - oj - - or - - om - - os - - pi - - pa - - ps - - fa - - pl - - pt - - qu - - rm - - rn - - ru - - sm - - sg - - sa - - sc - - sr - - sn - - sd - - si - - sk - - sl - - so - - st - - nr - - es - - su - - sw - - ss - - sv - - tl - - ty - - tg - - ta - - tt - - te - - th - - bo - - ti - - to - - ts - - tn - - tr - - tk - - tw - - ug - - uk - - ur - - uz - - ve - - vi - - vo - - wa - - cy - - fy - - wo - - xh - - yi - - yo - - za - - zu - type: + example: org.postgresql.Driver + jdbc_method: type: string - example: Abstract - enum: - - Abstract - - Methods - - SeriesInformation - - TableOfContents - - TechnicalInfo - - Other - IdentifierSaveDto: + example: postgresql + ImageDateDto: required: - - creators - - database_id - - publication_year - - type - - visibility + - created_at + - database_format + - example + - has_time + - id + - unix_format type: object properties: - type: - type: string - example: database - enum: - - database - - subset - - view - titles: - type: array - items: - $ref: '#/components/schemas/IdentifierSaveTitleDto' - descriptions: + id: + type: integer + format: int64 + example: + type: string + example: 30.01.2022 + database_format: + type: string + example: '%d.%c.%Y' + unix_format: + type: string + example: dd.MM.YYYY + has_time: + type: boolean + example: false + created_at: + type: string + format: date-time + example: 2021-03-12T15:26:21Z + ImageDto: + required: + - default_port + - dialect + - driver_class + - id + - jdbc_method + - name + - registry + - version + type: object + properties: + id: + type: integer + format: int64 + registry: + type: string + example: docker.io/library + name: + type: string + example: mariadb + version: + type: string + example: "10.5" + dialect: + type: string + example: org.hibernate.dialect.MariaDBDialect + driver_class: + type: string + example: org.mariadb.jdbc.Driver + date_formats: type: array items: - $ref: '#/components/schemas/IdentifierSaveDescriptionDto' - funders: + $ref: '#/components/schemas/ImageDateDto' + jdbc_method: + type: string + example: mariadb + default_port: + type: integer + format: int32 + example: 3306 + DatabaseModifyVisibilityDto: + required: + - is_public + type: object + properties: + is_public: + type: boolean + example: true + ColumnBriefDto: + required: + - column_type + - database_id + - id + - internal_name + - name + - table_id + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: date + alias: + type: string + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 + internal_name: + type: string + example: mdb_date + column_type: + type: string + example: date + enum: + - char + - varchar + - binary + - varbinary + - tinyblob + - tinytext + - text + - blob + - mediumtext + - mediumblob + - longtext + - longblob + - enum + - set + - bit + - tinyint + - bool + - smallint + - mediumint + - int + - bigint + - float + - double + - decimal + - date + - datetime + - timestamp + - time + - year + ColumnDto: + required: + - auto_generated + - column_type + - database_id + - id + - internal_name + - is_null_allowed + - is_primary_key + - is_public + - name + - table_id + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: Date + alias: + type: string + size: + type: integer + format: int64 + example: 255 + d: + type: integer + format: int64 + example: 0 + dataLength: + type: integer + format: int64 + example: 34300 + maxDataLength: + type: integer + format: int64 + example: 34300 + numRows: + type: integer + format: int64 + example: 32 + valMin: + type: number + example: 0 + valMax: + type: number + example: 100 + mean: + type: number + example: 45.4 + median: + type: number + example: 51 + stdDev: + type: number + example: 5.32 + concept: + $ref: '#/components/schemas/ConceptDto' + unit: + $ref: '#/components/schemas/UnitDto' + enums: type: array items: - $ref: '#/components/schemas/IdentifierFunderSaveDto' - licenses: + type: string + sets: type: array items: - $ref: '#/components/schemas/LicenseDto' - visibility: - type: string - example: everyone - enum: - - everyone - - self - publisher: + type: string + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 + internal_name: type: string - example: TU Wien - language: + example: mdb_date + date_format: + $ref: '#/components/schemas/ImageDateDto' + auto_generated: + type: boolean + example: false + is_primary_key: + type: boolean + example: true + index_length: + type: integer + format: int64 + length: + type: integer + format: int64 + column_type: type: string + example: string enum: - - ab - - aa - - af - - ak - - sq - - am - - ar - - an - - hy - - as - - av - - ae - - ay - - az - - bm - - ba - - eu - - be - - bn - - bh - - bi - - bs - - br - - bg - - my - - ca - - km - - ch - - ce - - ny - - zh - - cu - - cv - - kw - - co - - cr - - hr - - cs - - da - - dv - - nl - - dz - - en - - eo - - et - - ee - - fo - - fj - - fi - - fr - - ff - - gd - - gl - - lg - - ka - - de - - ki - - el - - kl - - gn - - gu - - ht - - ha - - he - - hz - - hi - - ho - - hu - - is - - io - - ig - - id - - ia - - ie - - iu - - ik - - ga - - it - - ja - - jv - - kn - - kr - - ks - - kk - - rw - - kv - - kg - - ko - - kj - - ku - - ky - - lo - - la - - lv - - lb - - li - - ln - - lt - - lu - - mk - - mg - - ms - - ml - - mt - - gv - - mi - - mr - - mh - - ro - - mn - - na - - nv - - nd - - ng - - ne - - se - - "no" - - nb - - nn - - ii - - oc - - oj - - or - - om - - os - - pi - - pa - - ps - - fa - - pl - - pt - - qu - - rm - - rn - - ru - - sm - - sg - - sa - - sc - - sr - - sn - - sd - - si - - sk - - sl - - so - - st - - nr - - es - - su - - sw - - ss - - sv - - tl - - ty - - tg - - ta - - tt - - te - - th - - bo - - ti - - to - - ts - - tn - - tr - - tk - - tw - - ug - - uk - - ur - - uz - - ve - - vi - - vo - - wa - - cy - - fy - - wo - - xh - - yi - - yo - - za - - zu - creators: - type: array - items: - $ref: '#/components/schemas/CreatorSaveDto' - database_id: - type: integer - format: int64 - example: 1 - query_id: - type: integer - format: int64 - view_id: + - char + - varchar + - binary + - varbinary + - tinyblob + - tinytext + - text + - blob + - mediumtext + - mediumblob + - longtext + - longblob + - enum + - set + - bit + - tinyint + - bool + - smallint + - mediumint + - int + - bigint + - float + - double + - decimal + - date + - datetime + - timestamp + - time + - year + is_public: + type: boolean + example: true + is_null_allowed: + type: boolean + example: false + ConceptDto: + required: + - columns + - created + - id + - uri + type: object + properties: + id: type: integer format: int64 - publication_day: - type: integer - format: int32 - example: 15 - publication_month: - type: integer - format: int32 - example: 12 - publication_year: - type: integer - format: int32 - example: 2022 - related_identifiers: + uri: + type: string + name: + type: string + description: + type: string + created: + type: string + format: date-time + example: 2021-03-12T15:26:21Z + columns: type: array items: - $ref: '#/components/schemas/RelatedIdentifierSaveDto' - IdentifierSaveTitleDto: + $ref: '#/components/schemas/ColumnBriefDto' + ConstraintsDto: + type: object + properties: + uniques: + type: array + items: + $ref: '#/components/schemas/UniqueDto' + checks: + type: array + items: + type: string + foreign_keys: + type: array + items: + $ref: '#/components/schemas/ForeignKeyDto' + ContainerDto: + required: + - created + - host + - id + - internal_name + - name + - sidecar_host + - sidecar_port type: object properties: id: type: integer format: int64 - title: + name: type: string - example: Airquality Demonstrator - language: + example: Air Quality + host: type: string - example: en - enum: - - ab - - aa + port: + type: integer + format: int32 + image: + $ref: '#/components/schemas/ImageBriefDto' + created: + type: string + format: date-time + example: 2021-03-12T15:26:21Z + internal_name: + type: string + example: data-db + sidecar_host: + type: string + sidecar_port: + type: integer + format: int32 + ui_host: + type: string + ui_port: + type: integer + format: int32 + CreatorDto: + required: + - creator_name + - id + type: object + properties: + id: + type: integer + format: int64 + firstname: + type: string + example: Josiah + lastname: + type: string + example: Carberry + affiliation: + type: string + example: Brown University + creator_name: + type: string + example: "Carberry, Josiah" + name_type: + type: string + example: Personal + enum: + - Personal + - Organizational + name_identifier: + type: string + example: 0000-0002-1825-0097 + name_identifier_scheme: + type: string + example: ORCID + enum: + - ORCID + - ROR + - ISNI + - GRID + name_identifier_scheme_uri: + type: string + example: https://orcid.org/ + affiliation_identifier: + type: string + example: https://ror.org/05gq02987 + affiliation_identifier_scheme: + type: string + example: ROR + enum: + - ROR + - GRID + - ISNI + affiliation_identifier_scheme_uri: + type: string + example: https://ror.org/ + DatabaseAccessDto: + required: + - created + - type + - user + type: object + properties: + user: + $ref: '#/components/schemas/UserDto' + type: + type: string + enum: + - read + - write_own + - write_all + created: + type: string + format: date-time + example: 2021-03-12T15:26:21Z + DatabaseDto: + required: + - contact + - created + - creator + - exchange_name + - id + - internal_name + - name + - owner + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: Air Quality + description: + type: string + example: Air Quality + tables: + type: array + items: + $ref: '#/components/schemas/TableDto' + views: + type: array + items: + $ref: '#/components/schemas/ViewDto' + container: + $ref: '#/components/schemas/ContainerDto' + accesses: + type: array + items: + $ref: '#/components/schemas/DatabaseAccessDto' + identifiers: + type: array + items: + $ref: '#/components/schemas/IdentifierDto' + subsets: + type: array + items: + $ref: '#/components/schemas/IdentifierDto' + creator: + $ref: '#/components/schemas/UserDto' + contact: + $ref: '#/components/schemas/UserDto' + owner: + $ref: '#/components/schemas/UserDto' + created: + type: string + format: date-time + example: 2021-03-12T15:26:21Z + exchange_name: + type: string + example: dbrepo + exchange_type: + type: string + example: topic + internal_name: + type: string + example: air_quality + is_public: + type: boolean + example: true + ForeignKeyDto: + type: object + properties: + columns: + type: array + items: + $ref: '#/components/schemas/ColumnDto' + referenced_table: + $ref: '#/components/schemas/TableBriefDto' + referenced_columns: + type: array + items: + $ref: '#/components/schemas/ColumnDto' + on_update: + type: string + enum: + - restrict + - cascade + - set_null + - no_action + - set_default + on_delete: + type: string + enum: + - restrict + - cascade + - set_null + - no_action + - set_default + IdentifierDescriptionDto: + required: + - id + type: object + properties: + id: + type: integer + format: int64 + description: + type: string + example: "Air quality reports at Stephansplatz, Vienna" + language: + type: string + example: en + enum: + - ab + - aa - af - ak - sq @@ -4107,390 +4161,69 @@ components: - zu type: type: string - example: Subtitle + example: Abstract enum: - - AlternativeTitle - - Subtitle - - TranslatedTitle + - Abstract + - Methods + - SeriesInformation + - TableOfContents + - TechnicalInfo - Other - LicenseDto: - required: - - identifier - - uri - type: object - properties: - identifier: - type: string - example: MIT - uri: - type: string - example: https://opensource.org/licenses/MIT - RelatedIdentifierSaveDto: + IdentifierDto: required: - - value + - created + - creators + - execution + - id + - last_modified + - publication_year + - query + - query_hash + - query_normalized + - result_hash + - result_number + - type type: object properties: - value: - type: string - example: 10.70124/dc4zh-9ce78 + id: + type: integer + format: int64 type: type: string - example: DOI enum: - - DOI - - URL - - URN - - ARK - - arXiv - - bibcode - - EAN13 - - EISSN - - Handle - - IGSN - - ISBN - - ISTC - - LISSN - - LSID - - PMID - - PURL - - UPC - - w3id - relation: - type: string - example: Cites - enum: - - IsCitedBy - - Cites - - IsSupplementTo - - IsSupplementedBy - - IsContinuedBy - - Continues - - IsDescribedBy - - Describes - - HasMetadata - - IsMetadataFor - - HasVersion - - IsVersionOf - - IsNewVersionOf - - IsPreviousVersionOf - - IsPartOf - - HasPart - - IsPublishedIn - - IsReferencedBy - - References - - IsDocumentedBy - - Documents - - IsCompiledBy - - Compiles - - IsVariantFormOf - - IsOriginalFormOf - - IsIdenticalTo - - IsReviewedBy - - Reviews - - IsDerivedFrom - - IsSourceOf - - IsRequiredBy - - Requires - - IsObsoletedBy - - Obsoletes - ColumnBriefDto: - required: - - column_type - - database_id - - id - - internal_name - - name - - table_id - type: object - properties: - id: - type: integer - format: int64 - name: - type: string - example: date - alias: - type: string - database_id: - type: integer - format: int64 - table_id: - type: integer - format: int64 - internal_name: - type: string - example: mdb_date - column_type: - type: string - example: date - enum: - - char - - varchar - - binary - - varbinary - - tinyblob - - tinytext - - text - - blob - - mediumtext - - mediumblob - - longtext - - longblob - - enum - - set - - bit - - tinyint - - bool - - smallint - - mediumint - - int - - bigint - - float - - double - - decimal - - date - - datetime - - timestamp - - time - - year - ContainerDto: - required: - - created - - host - - id - - internal_name - - name - type: object - properties: - id: - type: integer - format: int64 - name: - type: string - example: Air Quality - host: + - database + - subset + - table + - view + titles: + type: array + items: + $ref: '#/components/schemas/IdentifierTitleDto' + descriptions: + type: array + items: + $ref: '#/components/schemas/IdentifierDescriptionDto' + funders: + type: array + items: + $ref: '#/components/schemas/IdentifierFunderDto' + query: type: string - port: - type: integer - format: int32 - image: - $ref: '#/components/schemas/ImageBriefDto' - created: + example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ + \ = \"09:STEF\"" + execution: type: string format: date-time example: 2021-03-12T15:26:21Z - internal_name: - type: string - example: data-db - CreatorBriefDto: - required: - - creator_name - type: object - properties: - affiliation: - type: string - example: Wesleyan University - name_identifier: - type: string - example: https://orcid.org/0000-0002-1825-0097 - name_type: - type: string - example: Personal - enum: - - Personal - - Organizational - creator_name: - type: string - example: "Carberry, Josiah" - CreatorDto: - required: - - creator_name - - id - type: object - properties: - id: - type: integer - format: int64 - firstname: - type: string - example: Josiah - lastname: - type: string - example: Carberry - affiliation: - type: string - example: Brown University - creator_name: - type: string - example: "Carberry, Josiah" - name_type: - type: string - example: Personal - enum: - - Personal - - Organizational - name_identifier: - type: string - example: 0000-0002-1825-0097 - name_identifier_scheme: - type: string - example: ORCID - enum: - - ORCID - - ROR - - ISNI - - GRID - name_identifier_scheme_uri: - type: string - example: https://orcid.org/ - affiliation_identifier: - type: string - example: https://ror.org/05gq02987 - affiliation_identifier_scheme: + doi: type: string - example: ROR - enum: - - ROR - - GRID - - ISNI - affiliation_identifier_scheme_uri: + example: 10.1038/nphys1170 + publisher: type: string - example: https://ror.org/ - DatabaseAccessDto: - required: - - created - - type - - user - type: object - properties: - user: - $ref: '#/components/schemas/UserDto' - type: + example: TU Wien + language: type: string enum: - - read - - write_own - - write_all - created: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - DatabaseDto: - required: - - created - - creator - - exchange_name - - id - - internal_name - - name - - owner - type: object - properties: - id: - type: integer - format: int64 - name: - type: string - example: Air Quality - identifier: - $ref: '#/components/schemas/IdentifierDto' - description: - type: string - example: Air Quality - tables: - type: array - items: - $ref: '#/components/schemas/TableBriefDto' - views: - type: array - items: - $ref: '#/components/schemas/ViewBriefDto' - image: - $ref: '#/components/schemas/ImageDto' - container: - $ref: '#/components/schemas/ContainerDto' - accesses: - type: array - items: - $ref: '#/components/schemas/DatabaseAccessDto' - creator: - $ref: '#/components/schemas/UserBriefDto' - owner: - $ref: '#/components/schemas/UserBriefDto' - created: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - exchange_name: - type: string - example: dbrepo - exchange_type: - type: string - example: topic - internal_name: - type: string - example: air_quality - is_public: - type: boolean - example: true - IdentifierBriefDto: - required: - - creators - - id - - publication_year - - type - type: object - properties: - id: - type: integer - format: int64 - type: - type: string - enum: - - database - - subset - - view - titles: - type: array - items: - $ref: '#/components/schemas/IdentifierTitleDto' - doi: - type: string - example: 10.1038/nphys1170 - publisher: - type: string - example: TU Wien - creators: - type: array - items: - $ref: '#/components/schemas/CreatorBriefDto' - database_id: - type: integer - format: int64 - example: 1 - query_id: - type: integer - format: int64 - example: 1 - publication_year: - type: integer - format: int32 - example: 2022 - IdentifierDescriptionDto: - required: - - id - type: object - properties: - id: - type: integer - format: int64 - description: - type: string - example: "Air quality reports at Stephansplatz, Vienna" - language: - type: string - example: en - enum: - ab - aa - af @@ -4675,79 +4408,115 @@ components: - yo - za - zu - type: - type: string - example: Abstract - enum: - - Abstract - - Methods - - SeriesInformation - - TableOfContents - - TechnicalInfo - - Other - IdentifierDto: - required: - - created - - creators - - database - - execution - - id - - last_modified - - publication_year - - query - - query_hash - - query_normalized - - result_hash - - result_number - - type - - visibility - type: object - properties: - id: - type: integer - format: int64 - type: - type: string - enum: - - database - - subset - - view - titles: - type: array - items: - $ref: '#/components/schemas/IdentifierTitleDto' - descriptions: + licenses: type: array items: - $ref: '#/components/schemas/IdentifierDescriptionDto' - funders: + $ref: '#/components/schemas/LicenseDto' + creators: type: array items: - $ref: '#/components/schemas/IdentifierFunderDto' - query: + $ref: '#/components/schemas/CreatorDto' + created: + type: string + format: date-time + example: 2021-03-12T15:26:21Z + database_id: + type: integer + format: int64 + example: 1 + query_id: + type: integer + format: int64 + example: 1 + table_id: + type: integer + format: int64 + example: 1 + view_id: + type: integer + format: int64 + example: 1 + query_normalized: type: string example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ \ = \"09:STEF\"" - database: - $ref: '#/components/schemas/DatabaseDto' - execution: + related_identifiers: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifierDto' + query_hash: + type: string + description: query hash in sha512 + result_hash: + type: string + example: 34fe82cda2c53f13f8d90cfd7a3469e3a939ff311add50dce30d9136397bf8e5 + result_number: + type: integer + format: int64 + example: 1 + publication_day: + type: integer + format: int32 + example: 15 + publication_month: + type: integer + format: int32 + example: 12 + publication_year: + type: integer + format: int32 + example: 2022 + last_modified: type: string format: date-time example: 2021-03-12T15:26:21Z - visibility: + IdentifierFunderDto: + required: + - funder_name + - id + type: object + properties: + id: + type: integer + format: int64 + funder_name: + type: string + example: European Commission + funder_identifier: + type: string + example: http://doi.org/10.13039/501100000780 + funder_identifier_type: type: string - example: everyone + example: Crossref Funder ID enum: - - everyone - - self - doi: + - Crossref Funder ID + - ROR + - GND + - ISNI + - Other + scheme_uri: type: string - example: 10.1038/nphys1170 - publisher: + example: http://doi.org/ + award_number: type: string - example: TU Wien + example: "824087" + award_title: + type: string + example: EOSC-Life + IdentifierTitleDto: + required: + - id + type: object + properties: + id: + type: integer + format: int64 + title: + type: string + example: Airquality Demonstrator language: type: string + example: en enum: - ab - aa @@ -4933,552 +4702,453 @@ components: - yo - za - zu - licenses: - type: array - items: - $ref: '#/components/schemas/LicenseDto' - creators: - type: array - items: - $ref: '#/components/schemas/CreatorDto' - created: + type: type: string - format: date-time - example: 2021-03-12T15:26:21Z - database_id: - type: integer - format: int64 - example: 1 - query_id: - type: integer - format: int64 - example: 1 - view_id: + enum: + - AlternativeTitle + - Subtitle + - TranslatedTitle + - Other + ImageBriefDto: + required: + - id + - name + - version + type: object + properties: + id: type: integer format: int64 - example: 1 - query_normalized: + name: type: string - example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ - \ = \"09:STEF\"" - related_identifiers: - type: array - items: - $ref: '#/components/schemas/RelatedIdentifierDto' - query_hash: + example: mariadb + version: type: string - description: query hash in sha512 - result_hash: + example: "10.5" + LicenseDto: + required: + - identifier + - uri + type: object + properties: + identifier: type: string - example: 34fe82cda2c53f13f8d90cfd7a3469e3a939ff311add50dce30d9136397bf8e5 - result_number: + example: MIT + uri: + type: string + example: https://opensource.org/licenses/MIT + RelatedIdentifierDto: + required: + - created + - id + - value + type: object + properties: + id: type: integer format: int64 - example: 1 - publication_day: - type: integer - format: int32 - example: 15 - publication_month: - type: integer - format: int32 - example: 12 - publication_year: - type: integer - format: int32 - example: 2022 + value: + type: string + example: 10.70124/dc4zh-9ce78 + type: + type: string + example: DOI + enum: + - DOI + - URL + - URN + - ARK + - arXiv + - bibcode + - EAN13 + - EISSN + - Handle + - IGSN + - ISBN + - ISTC + - LISSN + - LSID + - PMID + - PURL + - UPC + - w3id + relation: + type: string + example: Cites + enum: + - IsCitedBy + - Cites + - IsSupplementTo + - IsSupplementedBy + - IsContinuedBy + - Continues + - IsDescribedBy + - Describes + - HasMetadata + - IsMetadataFor + - HasVersion + - IsVersionOf + - IsNewVersionOf + - IsPreviousVersionOf + - IsPartOf + - HasPart + - IsPublishedIn + - IsReferencedBy + - References + - IsDocumentedBy + - Documents + - IsCompiledBy + - Compiles + - IsVariantFormOf + - IsOriginalFormOf + - IsIdenticalTo + - IsReviewedBy + - Reviews + - IsDerivedFrom + - IsSourceOf + - IsRequiredBy + - Requires + - IsObsoletedBy + - Obsoletes + created: + type: string + format: date-time + example: 2021-03-12T15:26:21Z last_modified: type: string format: date-time example: 2021-03-12T15:26:21Z - IdentifierFunderDto: + TableBriefDto: required: - - funder_name + - columns + - description - id + - internal_name + - is_versioned + - name + - owner type: object properties: id: type: integer format: int64 - funder_name: - type: string - example: European Commission - funder_identifier: - type: string - example: http://doi.org/10.13039/501100000780 - funder_identifier_type: - type: string - example: Crossref Funder ID - enum: - - Crossref Funder ID - - ROR - - GND - - ISNI - - Other - scheme_uri: + name: type: string - example: http://doi.org/ - award_number: + example: Air Quality + description: type: string - example: "824087" - award_title: + example: Air Quality in Austria + owner: + $ref: '#/components/schemas/UserBriefDto' + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' + internal_name: type: string - example: EOSC-Life - IdentifierTitleDto: + example: air_quality + is_versioned: + type: boolean + example: true + TableDto: required: + - columns + - created + - created_by + - creator - id + - internal_name + - is_public + - is_versioned + - name + - owner + - queue_name + - routing_key + - tdbid type: object properties: id: type: integer format: int64 - title: + tdbid: + type: integer + format: int64 + name: type: string - example: Airquality Demonstrator - language: + example: Air Quality + identifiers: + type: array + items: + $ref: '#/components/schemas/IdentifierDto' + creator: + $ref: '#/components/schemas/UserDto' + owner: + $ref: '#/components/schemas/UserDto' + description: type: string - example: en - enum: - - ab - - aa - - af - - ak - - sq - - am - - ar - - an - - hy - - as - - av - - ae - - ay - - az - - bm - - ba - - eu - - be - - bn - - bh - - bi - - bs - - br - - bg - - my - - ca - - km - - ch - - ce - - ny - - zh - - cu - - cv - - kw - - co - - cr - - hr - - cs - - da - - dv - - nl - - dz - - en - - eo - - et - - ee - - fo - - fj - - fi - - fr - - ff - - gd - - gl - - lg - - ka - - de - - ki - - el - - kl - - gn - - gu - - ht - - ha - - he - - hz - - hi - - ho - - hu - - is - - io - - ig - - id - - ia - - ie - - iu - - ik - - ga - - it - - ja - - jv - - kn - - kr - - ks - - kk - - rw - - kv - - kg - - ko - - kj - - ku - - ky - - lo - - la - - lv - - lb - - li - - ln - - lt - - lu - - mk - - mg - - ms - - ml - - mt - - gv - - mi - - mr - - mh - - ro - - mn - - na - - nv - - nd - - ng - - ne - - se - - "no" - - nb - - nn - - ii - - oc - - oj - - or - - om - - os - - pi - - pa - - ps - - fa - - pl - - pt - - qu - - rm - - rn - - ru - - sm - - sg - - sa - - sc - - sr - - sn - - sd - - si - - sk - - sl - - so - - st - - nr - - es - - su - - sw - - ss - - sv - - tl - - ty - - tg - - ta - - tt - - te - - th - - bo - - ti - - to - - ts - - tn - - tr - - tk - - tw - - ug - - uk - - ur - - uz - - ve - - vi - - vo - - wa - - cy - - fy - - wo - - xh - - yi - - yo - - za - - zu - type: + example: Air Quality in Austria + created: type: string - enum: - - AlternativeTitle - - Subtitle - - TranslatedTitle - - Other - ImageBriefDto: + format: date-time + example: 2021-03-12T15:26:21Z + columns: + type: array + items: + $ref: '#/components/schemas/ColumnDto' + constraints: + $ref: '#/components/schemas/ConstraintsDto' + internal_name: + type: string + example: air_quality + is_versioned: + type: boolean + example: true + created_by: + type: string + format: uuid + queue_name: + type: string + example: air_quality + queue_type: + type: string + example: quorum + routing_key: + type: string + example: dbrepo.database.air_quality + is_public: + type: boolean + example: true + UniqueDto: required: - - id - - name - - version + - columns + - table + - uid type: object properties: - id: + uid: type: integer format: int64 - name: - type: string - example: mariadb - version: - type: string - example: "10.5" - ImageDateDto: + table: + $ref: '#/components/schemas/TableDto' + columns: + type: array + items: + $ref: '#/components/schemas/ColumnDto' + UnitDto: required: - - created_at - - database_format - - example - - has_time + - columns + - created - id - - unix_format + - uri type: object properties: id: type: integer format: int64 - example: + uri: type: string - example: 30.01.2022 - database_format: + name: type: string - example: '%d.%c.%Y' - unix_format: + description: type: string - example: dd.MM.YYYY - has_time: - type: boolean - example: false - created_at: + created: type: string format: date-time example: 2021-03-12T15:26:21Z - ImageDto: + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' + ViewDto: required: - - default_port - - dialect - - driver_class + - columns + - created + - creator + - database + - database_id - id - - jdbc_method + - internal_name - name - - registry - - version + - query + - query_hash type: object properties: id: type: integer format: int64 - registry: - type: string - example: docker.io/library + database: + $ref: '#/components/schemas/DatabaseDto' name: type: string - example: mariadb - version: - type: string - example: "10.5" - dialect: + example: Air Quality + identifiers: + type: array + items: + $ref: '#/components/schemas/IdentifierDto' + query: type: string - example: org.hibernate.dialect.MariaDBDialect - driver_class: + example: SELECT `id` FROM `air_quality` ORDER BY `value` DESC + created: type: string - example: org.mariadb.jdbc.Driver - date_formats: + format: date-time + example: 2021-03-12T15:26:21Z + creator: + $ref: '#/components/schemas/UserDto' + columns: type: array items: - $ref: '#/components/schemas/ImageDateDto' - jdbc_method: - type: string - example: mariadb - default_port: - type: integer - format: int32 - example: 3306 - RelatedIdentifierDto: - required: - - created - - id - - value - type: object - properties: - id: + $ref: '#/components/schemas/ColumnDto' + database_id: type: integer format: int64 - value: - type: string - example: 10.70124/dc4zh-9ce78 - type: - type: string - example: DOI - enum: - - DOI - - URL - - URN - - ARK - - arXiv - - bibcode - - EAN13 - - EISSN - - Handle - - IGSN - - ISBN - - ISTC - - LISSN - - LSID - - PMID - - PURL - - UPC - - w3id - relation: + internal_name: type: string - example: Cites - enum: - - IsCitedBy - - Cites - - IsSupplementTo - - IsSupplementedBy - - IsContinuedBy - - Continues - - IsDescribedBy - - Describes - - HasMetadata - - IsMetadataFor - - HasVersion - - IsVersionOf - - IsNewVersionOf - - IsPreviousVersionOf - - IsPartOf - - HasPart - - IsPublishedIn - - IsReferencedBy - - References - - IsDocumentedBy - - Documents - - IsCompiledBy - - Compiles - - IsVariantFormOf - - IsOriginalFormOf - - IsIdenticalTo - - IsReviewedBy - - Reviews - - IsDerivedFrom - - IsSourceOf - - IsRequiredBy - - Requires - - IsObsoletedBy - - Obsoletes - created: + example: air_quality + is_public: + type: boolean + example: true + initial_view: + type: boolean + description: True if it is the default view for the database + example: true + query_hash: type: string - format: date-time - example: 2021-03-12T15:26:21Z + example: 7de03e818900b6ea6d58ad0306d4a741d658c6df3d1964e89ed2395d8c7e7916 last_modified: type: string format: date-time example: 2021-03-12T15:26:21Z - TableBriefDto: + DatabaseTransferDto: required: - - columns - - description - - id - - internal_name - - is_versioned - - name - - owner + - username type: object properties: - id: - type: integer - format: int64 - name: + username: type: string - example: Air Quality - description: + ColumnSemanticsUpdateDto: + type: object + properties: + concept_uri: type: string - example: Air Quality in Austria - owner: - $ref: '#/components/schemas/UserBriefDto' - columns: - type: array - items: - $ref: '#/components/schemas/ColumnBriefDto' - internal_name: + unit_uri: type: string - example: air_quality - is_versioned: + DatabaseModifyAccessDto: + required: + - type + type: object + properties: + type: + type: string + enum: + - read + - write_own + - write_all + QueryPersistDto: + required: + - persist + type: object + properties: + persist: type: boolean example: true - ViewBriefDto: + QueryDto: required: + - cid - created - creator + - dbid + - execution - id - - internal_name - - name + - is_persisted + - last_modified - query - query_hash - - vdbid type: object properties: id: type: integer format: int64 - vdbid: + cid: type: integer format: int64 - name: + dbid: + type: integer + format: int64 + creator: + $ref: '#/components/schemas/UserDto' + execution: type: string - example: Air Quality - identifier: - $ref: '#/components/schemas/IdentifierBriefDto' + format: date-time + example: 2021-03-12T15:26:21Z query: type: string - example: SELECT `id` FROM `air_quality` ORDER BY `value` DESC + example: SELECT `id` FROM `air_quality` + type: + type: string + example: query + enum: + - query + - view + identifiers: + type: array + items: + $ref: '#/components/schemas/IdentifierDto' created: type: string format: date-time example: 2021-03-12T15:26:21Z - creator: - $ref: '#/components/schemas/UserDto' - internal_name: + query_normalized: type: string - example: air_quality - is_public: - type: boolean - example: true - initial_view: + example: SELECT `id` FROM `air_quality` + query_hash: + type: string + example: 17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76 + is_persisted: type: boolean - description: True if it is the default view for the database example: true - query_hash: + result_hash: type: string - example: 7de03e818900b6ea6d58ad0306d4a741d658c6df3d1964e89ed2395d8c7e7916 + example: 17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76 + result_number: + type: integer + format: int64 + example: 1 last_modified: type: string format: date-time example: 2021-03-12T15:26:21Z - BannerMessageUpdateDto: + SignupRequestDto: + required: + - email + - password + - username + type: object + properties: + username: + pattern: "^[a-z0-9]{3,}$" + type: string + example: user + email: + type: string + example: user@example.com + password: + type: string + OntologyCreateDto: + required: + - prefix + - uri + type: object + properties: + uri: + type: string + example: Ontology URI + prefix: + type: string + example: Ontology prefix + sparql_endpoint: + type: string + example: Ontology SPARQL endpoint + BannerMessageCreateDto: required: - message - type @@ -5507,559 +5177,853 @@ components: type: string format: date-time example: 2021-03-12T15:26:21Z - BannerMessageNotFoundException: + ImageCreateDto: + required: + - default_port + - dialect + - driver_class + - jdbc_method + - name + - registry + - version type: object properties: - cause: - type: object - properties: - stackTrace: - type: array - items: - type: object - properties: - classLoaderName: - type: string - moduleName: - type: string - moduleVersion: - type: string - methodName: - type: string - fileName: - type: string - lineNumber: - type: integer - format: int32 - nativeMethod: - type: boolean - className: - type: string - message: - type: string - suppressed: - type: array - items: - type: object - properties: - stackTrace: - type: array - items: - type: object - properties: - classLoaderName: - type: string - moduleName: - type: string - moduleVersion: - type: string - methodName: - type: string - fileName: - type: string - lineNumber: - type: integer - format: int32 - nativeMethod: - type: boolean - className: - type: string - message: - type: string - localizedMessage: - type: string - localizedMessage: - type: string - stackTrace: - type: array - items: - type: object - properties: - classLoaderName: - type: string - moduleName: - type: string - moduleVersion: - type: string - methodName: - type: string - fileName: - type: string - lineNumber: - type: integer - format: int32 - nativeMethod: - type: boolean - className: - type: string - message: - type: string - suppressed: - type: array - items: - type: object - properties: - stackTrace: - type: array - items: - type: object - properties: - classLoaderName: - type: string - moduleName: - type: string - moduleVersion: - type: string - methodName: - type: string - fileName: - type: string - lineNumber: - type: integer - format: int32 - nativeMethod: - type: boolean - className: - type: string - message: - type: string - localizedMessage: - type: string - localizedMessage: + registry: type: string - BannerMessageBriefDto: - required: - - message - - type - type: object - properties: - type: + example: docker.io/library + name: type: string - enum: - - error - - warning - - info - message: + example: mariadb + version: type: string - example: Maintenance starts on 8am on Monday - link: + dialect: type: string - example: https://example.com - link_text: + driver_class: type: string - example: More - ImageChangeDto: - required: - - dialect - - driver_class - - jdbc_method - - registry - type: object - properties: - registry: + jdbc_method: type: string - example: docker.io/library - defaultPort: + default_port: maximum: 65535 minimum: 1024 type: integer format: int32 - example: 5432 - dialect: - type: string - example: Postgres - driver_class: - type: string - example: org.postgresql.Driver - jdbc_method: - type: string - example: postgresql - DatabaseModifyVisibilityDto: - required: - - is_public - type: object - properties: - is_public: - type: boolean - example: true - DatabaseTransferDto: + CreatorSaveDto: required: - - username + - creator_name + - firstname + - lastname + - name_type type: object properties: - username: + id: + type: integer + format: int64 + firstname: type: string - ColumnSemanticsUpdateDto: - type: object - properties: - concept_uri: + example: Josiah + lastname: type: string - unit_uri: + example: Carberry + affiliation: type: string - ColumnDto: + example: Wesleyan University + creator_name: + type: string + example: "Carberry, Josiah" + name_type: + type: string + example: Personal + enum: + - Personal + - Organizational + name_identifier: + type: string + example: 0000-0002-1825-0097 + name_identifier_scheme: + type: string + example: ORCID + enum: + - ORCID + - ROR + - ISNI + - GRID + affiliation_identifier: + type: string + example: https://ror.org/04d836q62 + affiliation_identifier_scheme: + type: string + example: ROR + enum: + - ROR + - GRID + - ISNI + IdentifierFunderSaveDto: required: - - auto_generated - - column_type - - database_id - - id - - internal_name - - is_null_allowed - - is_primary_key - - is_public - - name - - table_id + - funder_name type: object properties: id: type: integer format: int64 - name: + funder_name: type: string - example: Date - alias: + example: European Commission + funder_identifier: type: string - size: - type: integer - format: int32 - example: 255 - d: - type: integer - format: int32 - example: 0 - concept: - $ref: '#/components/schemas/ConceptDto' - unit: - $ref: '#/components/schemas/UnitDto' - enums: - type: array - items: - type: string - sets: - type: array - items: - type: string - database_id: - type: integer - format: int64 - table_id: - type: integer - format: int64 - internal_name: - type: string - example: mdb_date - date_format: - $ref: '#/components/schemas/ImageDateDto' - auto_generated: - type: boolean - example: false - is_primary_key: - type: boolean - example: true - index_length: - type: integer - format: int32 - column_type: + example: http://doi.org/10.13039/501100000780 + funder_identifier_type: type: string - example: string + example: Crossref Funder ID enum: - - char - - varchar - - binary - - varbinary - - tinyblob - - tinytext - - text - - blob - - mediumtext - - mediumblob - - longtext - - longblob - - enum - - set - - bit - - tinyint - - bool - - smallint - - mediumint - - int - - bigint - - float - - double - - decimal - - date - - datetime - - timestamp - - time - - year - is_public: - type: boolean - example: true - is_null_allowed: - type: boolean - example: false - ConceptDto: - required: - - columns - - created - - id - - uri - type: object - properties: - id: - type: integer - format: int64 - uri: - type: string - name: + - Crossref Funder ID + - ROR + - GND + - ISNI + - Other + scheme_uri: type: string - description: + example: http://doi.org/ + award_number: type: string - created: + example: "824087" + award_title: type: string - format: date-time - example: 2021-03-12T15:26:21Z - columns: - type: array - items: - $ref: '#/components/schemas/ColumnBriefDto' - UnitDto: - required: - - columns - - created - - id - - uri + example: EOSC-Life + IdentifierSaveDescriptionDto: type: object properties: id: type: integer format: int64 - uri: - type: string - name: - type: string description: type: string - created: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - columns: - type: array - items: - $ref: '#/components/schemas/ColumnBriefDto' - DatabaseModifyAccessDto: - required: - - type - type: object - properties: - type: - type: string - enum: - - read - - write_own - - write_all - TableCsvUpdateDto: - required: - - data - - keys - type: object - properties: - data: - type: object - additionalProperties: - type: object - keys: - type: object - additionalProperties: - type: object - QueryPersistDto: - required: - - persist - type: object - properties: - persist: - type: boolean - example: true - QueryDto: - required: - - cid - - created - - creator - - dbid - - execution - - id - - is_persisted - - last_modified - - query - - query_hash - type: object - properties: - id: - type: integer - format: int64 - cid: - type: integer - format: int64 - dbid: - type: integer - format: int64 - creator: - $ref: '#/components/schemas/UserDto' - execution: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - query: - type: string - example: SELECT `id` FROM `air_quality` - type: + example: "Air quality reports at Stephansplatz, Vienna" + language: type: string - example: query + example: en enum: - - query - - view - identifier: - $ref: '#/components/schemas/IdentifierDto' - created: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - query_normalized: - type: string - example: SELECT `id` FROM `air_quality` - query_hash: - type: string - example: 17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76 - is_persisted: - type: boolean - example: true - result_hash: - type: string - example: 17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76 - result_number: - type: integer - format: int64 - example: 1 - last_modified: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - SignupRequestDto: - required: - - email - - password - - username - type: object - properties: - username: - pattern: "^[a-z0-9]{3,}$" - type: string - example: user - email: - type: string - example: user@example.com - password: - type: string - UnitSaveDto: - required: - - description - - name - - uri - type: object - properties: - uri: - type: string - name: - type: string - description: - type: string - OntologyCreateDto: - required: - - prefix - - uri - type: object - properties: - uri: - type: string - example: Ontology URI - prefix: - type: string - example: Ontology prefix - sparql_endpoint: - type: string - example: Ontology SPARQL endpoint - ConceptSaveDto: + - ab + - aa + - af + - ak + - sq + - am + - ar + - an + - hy + - as + - av + - ae + - ay + - az + - bm + - ba + - eu + - be + - bn + - bh + - bi + - bs + - br + - bg + - my + - ca + - km + - ch + - ce + - ny + - zh + - cu + - cv + - kw + - co + - cr + - hr + - cs + - da + - dv + - nl + - dz + - en + - eo + - et + - ee + - fo + - fj + - fi + - fr + - ff + - gd + - gl + - lg + - ka + - de + - ki + - el + - kl + - gn + - gu + - ht + - ha + - he + - hz + - hi + - ho + - hu + - is + - io + - ig + - id + - ia + - ie + - iu + - ik + - ga + - it + - ja + - jv + - kn + - kr + - ks + - kk + - rw + - kv + - kg + - ko + - kj + - ku + - ky + - lo + - la + - lv + - lb + - li + - ln + - lt + - lu + - mk + - mg + - ms + - ml + - mt + - gv + - mi + - mr + - mh + - ro + - mn + - na + - nv + - nd + - ng + - ne + - se + - "no" + - nb + - nn + - ii + - oc + - oj + - or + - om + - os + - pi + - pa + - ps + - fa + - pl + - pt + - qu + - rm + - rn + - ru + - sm + - sg + - sa + - sc + - sr + - sn + - sd + - si + - sk + - sl + - so + - st + - nr + - es + - su + - sw + - ss + - sv + - tl + - ty + - tg + - ta + - tt + - te + - th + - bo + - ti + - to + - ts + - tn + - tr + - tk + - tw + - ug + - uk + - ur + - uz + - ve + - vi + - vo + - wa + - cy + - fy + - wo + - xh + - yi + - yo + - za + - zu + type: + type: string + example: Abstract + enum: + - Abstract + - Methods + - SeriesInformation + - TableOfContents + - TechnicalInfo + - Other + IdentifierSaveDto: required: - - description - - name - - uri + - creators + - database_id + - publication_year + - type type: object properties: - uri: + type: type: string - name: + example: database + enum: + - database + - subset + - table + - view + titles: + type: array + items: + $ref: '#/components/schemas/IdentifierSaveTitleDto' + descriptions: + type: array + items: + $ref: '#/components/schemas/IdentifierSaveDescriptionDto' + funders: + type: array + items: + $ref: '#/components/schemas/IdentifierFunderSaveDto' + licenses: + type: array + items: + $ref: '#/components/schemas/LicenseDto' + publisher: type: string - description: + example: TU Wien + language: type: string - BannerMessageCreateDto: - required: - - message - - type - type: object - properties: + enum: + - ab + - aa + - af + - ak + - sq + - am + - ar + - an + - hy + - as + - av + - ae + - ay + - az + - bm + - ba + - eu + - be + - bn + - bh + - bi + - bs + - br + - bg + - my + - ca + - km + - ch + - ce + - ny + - zh + - cu + - cv + - kw + - co + - cr + - hr + - cs + - da + - dv + - nl + - dz + - en + - eo + - et + - ee + - fo + - fj + - fi + - fr + - ff + - gd + - gl + - lg + - ka + - de + - ki + - el + - kl + - gn + - gu + - ht + - ha + - he + - hz + - hi + - ho + - hu + - is + - io + - ig + - id + - ia + - ie + - iu + - ik + - ga + - it + - ja + - jv + - kn + - kr + - ks + - kk + - rw + - kv + - kg + - ko + - kj + - ku + - ky + - lo + - la + - lv + - lb + - li + - ln + - lt + - lu + - mk + - mg + - ms + - ml + - mt + - gv + - mi + - mr + - mh + - ro + - mn + - na + - nv + - nd + - ng + - ne + - se + - "no" + - nb + - nn + - ii + - oc + - oj + - or + - om + - os + - pi + - pa + - ps + - fa + - pl + - pt + - qu + - rm + - rn + - ru + - sm + - sg + - sa + - sc + - sr + - sn + - sd + - si + - sk + - sl + - so + - st + - nr + - es + - su + - sw + - ss + - sv + - tl + - ty + - tg + - ta + - tt + - te + - th + - bo + - ti + - to + - ts + - tn + - tr + - tk + - tw + - ug + - uk + - ur + - uz + - ve + - vi + - vo + - wa + - cy + - fy + - wo + - xh + - yi + - yo + - za + - zu + creators: + type: array + items: + $ref: '#/components/schemas/CreatorSaveDto' + database_id: + type: integer + format: int64 + example: 1 + query_id: + type: integer + format: int64 + view_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 + publication_day: + type: integer + format: int32 + example: 15 + publication_month: + type: integer + format: int32 + example: 12 + publication_year: + type: integer + format: int32 + example: 2022 + related_identifiers: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifierSaveDto' + IdentifierSaveTitleDto: + type: object + properties: + id: + type: integer + format: int64 + title: + type: string + example: Airquality Demonstrator + language: + type: string + example: en + enum: + - ab + - aa + - af + - ak + - sq + - am + - ar + - an + - hy + - as + - av + - ae + - ay + - az + - bm + - ba + - eu + - be + - bn + - bh + - bi + - bs + - br + - bg + - my + - ca + - km + - ch + - ce + - ny + - zh + - cu + - cv + - kw + - co + - cr + - hr + - cs + - da + - dv + - nl + - dz + - en + - eo + - et + - ee + - fo + - fj + - fi + - fr + - ff + - gd + - gl + - lg + - ka + - de + - ki + - el + - kl + - gn + - gu + - ht + - ha + - he + - hz + - hi + - ho + - hu + - is + - io + - ig + - id + - ia + - ie + - iu + - ik + - ga + - it + - ja + - jv + - kn + - kr + - ks + - kk + - rw + - kv + - kg + - ko + - kj + - ku + - ky + - lo + - la + - lv + - lb + - li + - ln + - lt + - lu + - mk + - mg + - ms + - ml + - mt + - gv + - mi + - mr + - mh + - ro + - mn + - na + - nv + - nd + - ng + - ne + - se + - "no" + - nb + - nn + - ii + - oc + - oj + - or + - om + - os + - pi + - pa + - ps + - fa + - pl + - pt + - qu + - rm + - rn + - ru + - sm + - sg + - sa + - sc + - sr + - sn + - sd + - si + - sk + - sl + - so + - st + - nr + - es + - su + - sw + - ss + - sv + - tl + - ty + - tg + - ta + - tt + - te + - th + - bo + - ti + - to + - ts + - tn + - tr + - tk + - tw + - ug + - uk + - ur + - uz + - ve + - vi + - vo + - wa + - cy + - fy + - wo + - xh + - yi + - yo + - za + - zu type: type: string + example: Subtitle enum: - - error - - warning - - info - message: - type: string - example: Maintenance starts on 8am on Monday - link: - type: string - example: https://example.com - link_text: - type: string - example: More - display_start: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - display_end: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - ImageCreateDto: + - AlternativeTitle + - Subtitle + - TranslatedTitle + - Other + RelatedIdentifierSaveDto: required: - - default_port - - dialect - - driver_class - - jdbc_method - - name - - registry - - version + - value type: object properties: - registry: - type: string - example: docker.io/library - name: - type: string - example: mariadb - version: - type: string - dialect: + value: type: string - driver_class: + example: 10.70124/dc4zh-9ce78 + type: type: string - jdbc_method: + example: DOI + enum: + - DOI + - URL + - URN + - ARK + - arXiv + - bibcode + - EAN13 + - EISSN + - Handle + - IGSN + - ISBN + - ISTC + - LISSN + - LSID + - PMID + - PURL + - UPC + - w3id + relation: type: string - default_port: - maximum: 65535 - minimum: 1024 - type: integer - format: int32 + example: Cites + enum: + - IsCitedBy + - Cites + - IsSupplementTo + - IsSupplementedBy + - IsContinuedBy + - Continues + - IsDescribedBy + - Describes + - HasMetadata + - IsMetadataFor + - HasVersion + - IsVersionOf + - IsNewVersionOf + - IsPreviousVersionOf + - IsPartOf + - HasPart + - IsPublishedIn + - IsReferencedBy + - References + - IsDocumentedBy + - Documents + - IsCompiledBy + - Compiles + - IsVariantFormOf + - IsOriginalFormOf + - IsIdenticalTo + - IsReviewedBy + - Reviews + - IsDerivedFrom + - IsSourceOf + - IsRequiredBy + - Requires + - IsObsoletedBy + - Obsoletes DatabaseCreateDto: required: - container_id @@ -6082,6 +6046,7 @@ components: - created - hash - id + - image - internal_name - name - running @@ -6096,6 +6061,8 @@ components: name: type: string example: Air Quality + image: + $ref: '#/components/schemas/ImageBriefDto' running: type: boolean example: true @@ -6106,11 +6073,32 @@ components: internal_name: type: string example: air-quality + CreatorBriefDto: + required: + - creator_name + type: object + properties: + affiliation: + type: string + example: Wesleyan University + name_identifier: + type: string + example: https://orcid.org/0000-0002-1825-0097 + name_type: + type: string + example: Personal + enum: + - Personal + - Organizational + creator_name: + type: string + example: "Carberry, Josiah" DatabaseBriefDto: required: - created + - creator + - exchange_name - id - - image - internal_name - name - owner @@ -6122,32 +6110,140 @@ components: name: type: string example: Air Quality - description: - type: string - example: Air Quality in Austria identifier: - $ref: '#/components/schemas/IdentifierBriefDto' - engine: + $ref: '#/components/schemas/IdentifierDto' + description: type: string - example: mariadb:10.5 - owner: - $ref: '#/components/schemas/UserBriefDto' + example: Air Quality + tables: + type: array + items: + $ref: '#/components/schemas/TableBriefDto' + views: + type: array + items: + $ref: '#/components/schemas/ViewBriefDto' + image: + $ref: '#/components/schemas/ImageDto' container: $ref: '#/components/schemas/ContainerBriefDto' + accesses: + type: array + items: + $ref: '#/components/schemas/DatabaseAccessDto' creator: $ref: '#/components/schemas/UserBriefDto' + owner: + $ref: '#/components/schemas/UserBriefDto' + created: + type: string + format: date-time + example: 2021-03-12T15:26:21Z + exchange_name: + type: string + example: dbrepo + exchange_type: + type: string + example: topic + internal_name: + type: string + example: air_quality + is_public: + type: boolean + example: true + IdentifierBriefDto: + required: + - creators + - id + - publication_year + - type + type: object + properties: + id: + type: integer + format: int64 + type: + type: string + enum: + - database + - subset + - table + - view + titles: + type: array + items: + $ref: '#/components/schemas/IdentifierTitleDto' + doi: + type: string + example: 10.1038/nphys1170 + publisher: + type: string + example: TU Wien + creators: + type: array + items: + $ref: '#/components/schemas/CreatorBriefDto' + database_id: + type: integer + format: int64 + example: 1 + query_id: + type: integer + format: int64 + example: 1 + publication_year: + type: integer + format: int32 + example: 2022 + ViewBriefDto: + required: + - created + - creator + - id + - internal_name + - name + - query + - query_hash + - vdbid + type: object + properties: + id: + type: integer + format: int64 + vdbid: + type: integer + format: int64 + name: + type: string + example: Air Quality + identifier: + $ref: '#/components/schemas/IdentifierBriefDto' + query: + type: string + example: SELECT `id` FROM `air_quality` ORDER BY `value` DESC created: type: string format: date-time example: 2021-03-12T15:26:21Z - image: - $ref: '#/components/schemas/ImageBriefDto' + creator: + $ref: '#/components/schemas/UserDto' internal_name: type: string example: air_quality is_public: type: boolean example: true + initial_view: + type: boolean + description: True if it is the default view for the database + example: true + query_hash: + type: string + example: 7de03e818900b6ea6d58ad0306d4a741d658c6df3d1964e89ed2395d8c7e7916 + last_modified: + type: string + format: date-time + example: 2021-03-12T15:26:21Z DatabaseGiveAccessDto: required: - type @@ -6221,11 +6317,11 @@ components: - year size: type: integer - format: int32 + format: int64 example: 255 d: type: integer - format: int32 + format: int64 example: 0 dfid: type: integer @@ -6248,7 +6344,7 @@ components: example: false index_length: type: integer - format: int32 + format: int64 null_allowed: type: boolean example: true @@ -6333,7 +6429,7 @@ components: properties: location: type: string - example: /tmp/file.csv + example: file.csv separator: type: string example: "," @@ -6517,14 +6613,23 @@ components: type: string internalName: type: string - imageId: - type: integer - format: int64 host: type: string port: type: integer format: int32 + sidecarHost: + type: string + sidecarPort: + type: integer + format: int32 + uiHost: + type: string + uiPort: + type: integer + format: int32 + uiAdditionalFlags: + type: string databases: type: array items: @@ -6611,8 +6716,8 @@ components: nameType: type: string enum: - - Personal - - Organizational + - PERSONAL + - ORGANIZATIONAL nameIdentifier: type: string nameIdentifierScheme: @@ -6678,8 +6783,14 @@ components: format: uuid contact: $ref: '#/components/schemas/User' - identifier: - $ref: '#/components/schemas/Identifier' + identifiers: + type: array + items: + $ref: '#/components/schemas/Identifier' + subsets: + type: array + items: + $ref: '#/components/schemas/Identifier' tables: type: array items: @@ -6688,6 +6799,10 @@ components: type: array items: $ref: '#/components/schemas/View' + accesses: + type: array + items: + $ref: '#/components/schemas/DatabaseAccess' isPublic: type: boolean created: @@ -6774,6 +6889,9 @@ components: queryId: type: integer format: int64 + tableId: + type: integer + format: int64 viewId: type: integer format: int64 @@ -6991,6 +7109,7 @@ components: enum: - DATABASE - SUBSET + - TABLE - VIEW query: type: string @@ -7015,11 +7134,6 @@ components: publicationDay: type: integer format: int32 - visibility: - type: string - enum: - - VisibilityType.EVERYONE - - VisibilityType.SELF database: $ref: '#/components/schemas/Database' relatedIdentifiers: @@ -7583,10 +7697,26 @@ components: type: array items: $ref: '#/components/schemas/TableColumn' + identifiers: + type: array + items: + $ref: '#/components/schemas/Identifier' constraints: $ref: '#/components/schemas/Constraints' isVersioned: type: boolean + numRows: + type: integer + format: int64 + dataLength: + type: integer + format: int64 + maxDataLength: + type: integer + format: int64 + avgRowLength: + type: integer + format: int64 created: type: string format: date-time @@ -7617,7 +7747,7 @@ components: type: boolean indexLength: type: integer - format: int32 + format: int64 alias: type: string columnType: @@ -7654,7 +7784,7 @@ components: - TableColumnType.YEAR length: type: integer - format: int32 + format: int64 isNullAllowed: type: boolean ordinalPosition: @@ -7677,10 +7807,20 @@ components: type: string size: type: integer - format: int32 + format: int64 d: type: integer - format: int32 + format: int64 + valMin: + type: number + valMax: + type: number + mean: + type: number + median: + type: number + stdDev: + type: number lastModified: type: string format: date-time @@ -7784,10 +7924,12 @@ components: type: string queryHash: type: string + identifiers: + type: array + items: + $ref: '#/components/schemas/Identifier' database: $ref: '#/components/schemas/Database' - identifier: - $ref: '#/components/schemas/Identifier' columns: type: array items: @@ -7798,186 +7940,6 @@ components: lastModified: type: string format: date-time - ViewDto: - required: - - columns - - created - - creator - - database - - database_id - - id - - internal_name - - name - - query - - query_hash - type: object - properties: - id: - type: integer - format: int64 - database: - $ref: '#/components/schemas/DatabaseDto' - name: - type: string - example: Air Quality - identifier: - $ref: '#/components/schemas/IdentifierDto' - query: - type: string - example: SELECT `id` FROM `air_quality` ORDER BY `value` DESC - created: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - creator: - $ref: '#/components/schemas/UserDto' - columns: - type: array - items: - $ref: '#/components/schemas/ColumnDto' - database_id: - type: integer - format: int64 - internal_name: - type: string - example: air_quality - is_public: - type: boolean - example: true - initial_view: - type: boolean - description: True if it is the default view for the database - example: true - query_hash: - type: string - example: 7de03e818900b6ea6d58ad0306d4a741d658c6df3d1964e89ed2395d8c7e7916 - last_modified: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - ConstraintsDto: - type: object - properties: - uniques: - type: array - items: - $ref: '#/components/schemas/UniqueDto' - checks: - type: array - items: - type: string - foreign_keys: - type: array - items: - $ref: '#/components/schemas/ForeignKeyDto' - ForeignKeyDto: - type: object - properties: - columns: - type: array - items: - $ref: '#/components/schemas/ColumnDto' - referenced_table: - $ref: '#/components/schemas/TableBriefDto' - referenced_columns: - type: array - items: - $ref: '#/components/schemas/ColumnDto' - on_update: - type: string - enum: - - restrict - - cascade - - set_null - - no_action - - set_default - on_delete: - type: string - enum: - - restrict - - cascade - - set_null - - no_action - - set_default - TableDto: - required: - - columns - - created - - created_by - - creator - - database - - id - - internal_name - - is_public - - is_versioned - - name - - owner - - queue_name - - routing_key - type: object - properties: - id: - type: integer - format: int64 - database: - $ref: '#/components/schemas/DatabaseDto' - name: - type: string - example: Air Quality - creator: - $ref: '#/components/schemas/UserDto' - owner: - $ref: '#/components/schemas/UserDto' - description: - type: string - example: Air Quality in Austria - created: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - columns: - type: array - items: - $ref: '#/components/schemas/ColumnDto' - constraints: - $ref: '#/components/schemas/ConstraintsDto' - internal_name: - type: string - example: air_quality - is_versioned: - type: boolean - example: true - created_by: - type: string - format: uuid - queue_name: - type: string - example: air_quality - queue_type: - type: string - example: quorum - routing_key: - type: string - example: dbrepo.database.air_quality - is_public: - type: boolean - example: true - UniqueDto: - required: - - columns - - table - - uid - type: object - properties: - uid: - type: integer - format: int64 - table: - $ref: '#/components/schemas/TableDto' - columns: - type: array - items: - $ref: '#/components/schemas/ColumnDto' QueryBriefDto: required: - cid @@ -7986,6 +7948,7 @@ components: - dbid - execution - id + - is_persisted - last_modified - query - query_hash @@ -8033,6 +7996,9 @@ components: type: integer format: int64 example: 1 + is_persisted: + type: boolean + example: true last_modified: type: string format: date-time diff --git a/.docs/api-mirror.yaml b/.docs/api-mirror.yaml index 2310a7fd8baeb4fbc8d33224dc36869b8777a14e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 --- a/.docs/api-mirror.yaml +++ b/.docs/api-mirror.yaml @@ -1,14 +0,0 @@ -openapi: 3.0.1 -info: - title: OpenAPI definition - version: v0 -servers: -- url: http://localhost:9050 - description: Generated server url -paths: {} -components: - securitySchemes: - bearerAuth: - type: http - scheme: bearer - bearerFormat: JWT diff --git a/.env.unix.example b/.env.unix.example index 54986336db71fa576456e6638245f6a36574a34b..cc42c2445172e19016c48e55a5a599df5961de38 100644 --- a/.env.unix.example +++ b/.env.unix.example @@ -1,29 +1 @@ -DBREPO_CLIENT_ID="dbrepo-client" -DBREPO_CLIENT_SECRET="MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG" -JWT_ISSUER="http://localhost/api/auth/realms/dbrepo" -JWT_PUBKEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB" -JWT_CERT="MIICmzCCAYMCBgGG3GWyBTANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZkYnJlcG8wHhcNMjMwMzEzMTkxMzE3WhcNMzMwMzEzMTkxNDU3WjARMQ8wDQYDVQQDDAZkYnJlcG8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqqcdDYFZZb28M0tEJzEP77FmD/Xqioyj9zWX6VwUSOMAgmMmn8eqs9hT9T0a+q4YTo9tUW1PNbUpwprA5b4Uk04DcIajxDVMUR/PjcHytmkqwVskq9AZW/Vngdoo+8tSbuIybwe/3Vwt266hbHpDcM97a+DXcYooRl7tQWCEX7RP27wQrMD9epDQ6IgKayZg9vC9/03dsIqwH9jXQRiZlFvwiEKhX2aY7lPGBaCK414JO00K/Z49iov9TRa/IYVbSt5qwgrx6DcqsBSPwOnI6A85UGfeUEZ/7coVJiL7RvBlsllapsL9eWTbQajVh94k9Ei3sibEPbtH+U2OAM78zAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAASnN1Cuif1sdfEK2kWAURSXGJCohCROLWdKFjaeHPRaEfpbFJsgxW0Yj3nwX5O3bUlOWoTyENwnXSsXMQsqnNi+At32CKaKO8+AkhAbgQL9F0B+KeJwmYv3cUj5N/LYkJjBvZBzUZ4Ugu5dcxH0k7AktLAIwimkyEnxTNolOA3UyrGGpREr8MCKWVr10RFuOpF/0CsJNNwbHXzalO9D756EUcRWZ9VSg6QVNso0YYRKTnILWDn9hcTRnqGy3SHo3anFTqQZ+BB57YbgFWy6udC0LYRB3zdp6zNti87eu/VEymiDY/mmo1AB8Tm0b6vxFz4AKcL3ax5qS6YnZ9efSzk=" -SHARED_FILESYSTEM=/tmp -SEARCH_USERNAME=admin -SEARCH_PASSWORD=admin -METADATA_DB=fda -METADATA_USERNAME=root -METADATA_PASSWORD=dbrepo -AUTH_DB=keycloak -AUTH_USERNAME=root -AUTH_PASSWORD=dbrepo -BROKER_ENDPOINT=http://broker-service:15672/admin/broker -BROKER_USERNAME=fda -BROKER_PASSWORD=fda -KEYCLOAK_ADMIN=fda -KEYCLOAK_ADMIN_PASSWORD=fda -WEBSITE=http://localhost -LOG_LEVEL=trace # error, warning, info, debug, trace -DOI_URL="https://doi.org" -DATACITE_URL="https://api.datacite.org" -DATACITE_PREFIX="10.1234" -DATACITE_USERNAME="username" -DATACITE_PASSWORD="password" -USER_DB_USERNAME=root -USER_DB_PASSWORD=dbrepo -NODE_ENV="development" \ No newline at end of file +LOG_LEVEL=trace # error, warning, info, debug, trace \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 26f1603650990f003e0dc3bab6903028c3469454..edf794cd58e6c90e7c93c1ff8ba2f9e6d274a0bb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -41,15 +41,6 @@ build-data-service: - "mvn -f ./dbrepo-metadata-service/pom.xml clean install -Dstyle.color=always -DskipTests" - "mvn -f ./dbrepo-data-service/pom.xml clean package -Dstyle.color=always -DskipTests" -build-mirror-service: - image: maven:3-openjdk-17 - stage: build - needs: - - build-metadata-service - script: - - "mvn -f ./dbrepo-metadata-service/pom.xml clean install -Dstyle.color=always -DskipTests" - - "mvn -f ./dbrepo-mirror-service/pom.xml clean package -Dstyle.color=always -DskipTests" - build-frontend: image: node:14-alpine stage: build @@ -72,7 +63,6 @@ build-docker: - "cp .env.unix.example .env" - "docker build -t dbrepo-metadata-service:build --target build dbrepo-metadata-service" - "docker build -t dbrepo-data-service:build --target build dbrepo-data-service" - - "docker build -t dbrepo-mirror-service:build --target build dbrepo-mirror-service" - "docker build ./dbrepo-log-service -t dbrepo-log-service" - "docker compose build --parallel" @@ -114,25 +104,6 @@ test-data-service: junit: ./dbrepo-data-service/rest-service/target/surefire-reports/TEST-*.xml coverage: '/Total.*?([0-9]{1,3})%/' -test-mirror-service: - image: maven:3-openjdk-17 - stage: test - needs: - - build-mirror-service - script: - - "mvn -f ./dbrepo-metadata-service/pom.xml clean install -Dstyle.color=always -DskipTests" - - "mvn -f ./dbrepo-mirror-service/pom.xml clean test verify -Dstyle.color=always" - - "cat ./dbrepo-mirror-service/report/target/site/jacoco-aggregate/index.html | grep -o 'Total[^%]*%' | sed 's/<.*>/ /; s/Total/Jacoco Coverage Total:/'" - artifacts: - when: always - paths: - - ./dbrepo-mirror-service/report/target/site/jacoco-aggregate/ - - ./dbrepo-mirror-service/rest-service/target/surefire-reports/ - expire_in: 1 days - reports: - junit: ./dbrepo-mirror-service/rest-service/target/surefire-reports/TEST-*.xml - coverage: '/Total.*?([0-9]{1,3})%/' - test-analyse-service: image: python:3.9-slim stage: test @@ -472,7 +443,6 @@ release-latest: needs: - test-metadata-service - test-data-service - - test-mirror-service - test-analyse-service - test-frontend only: @@ -491,7 +461,6 @@ release-version: needs: - test-metadata-service - test-data-service - - test-mirror-service - test-analyse-service - test-frontend only: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000000000000000000000000000000000..5dfe6d4af885ce5bd84e6f8630536281fe5ff45e --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,27 @@ +## Contributing to DBRepo + +All contributions are welcome. Ideas, code, documentation, production experiences, bugfixes... we only need to define +some key ideas in order to make this more efficient. + +### Key ideas + +* Follow the object-oriented programming principles for the Java-based services +* Embrace the [GitOps](https://opengitops.dev/) principles +* Simplicity first + +### Development guide + +We have a [development guide](./.docs/DEVELOPMENT.md) at your disposal so you can quickly setup an environment to +develop locally. + +### Issues + +Creating a new issue it's generally a good way to share your ideas and get feedback. We consider creating good issues +and documentation its part of the creative process, and we don't want to interfere on it. However, it's encouraged to +provide as much context as possible. Feel free to talk about a specific use case, show the maintainers what we are +trying to solve. + +Explore the available labels in order to proper categorize it and get the fastest feedback. + +If the contribution it's a bugfix, a little feature or documentation improvement that could be implemented in, lets say, +a couple of days at maximum, one could go directly for a PR. It's fine. diff --git a/Makefile b/Makefile index 56d500ab7e33b2f9154f285e3bd4aa85f9f4bffc..6f3e5d5c6a93e7583155e9d2c7af9f5a1c34c758 100644 --- a/Makefile +++ b/Makefile @@ -16,14 +16,11 @@ clean: build: build-backend build-docker -build-backend: build-metadata-service build-analyse-service build-data-service build-mirror-service +build-backend: build-metadata-service build-analyse-service build-data-service build-data-service: build-metadata-service mvn -f ./dbrepo-data-service/pom.xml clean package -DskipTests -build-mirror-service: build-metadata-service - mvn -f ./dbrepo-mirror-service/pom.xml clean package -DskipTests - build-metadata-service: mvn -f ./dbrepo-metadata-service/pom.xml clean install -DskipTests @@ -33,7 +30,6 @@ build-analyse-service: build-docker: docker build -t dbrepo-metadata-service:build --target build dbrepo-metadata-service docker build -t dbrepo-data-service:build --target build dbrepo-data-service - docker build -t dbrepo-mirror-service:build --target build dbrepo-mirror-service docker build ./dbrepo-log-service -t dbrepo-log-service docker compose build --parallel @@ -44,7 +40,7 @@ build-frontend: build-clients: bash ./.gitlab/swagger/generate.sh -tag: tag-analyse-service tag-authentication-service tag-metadata-db tag-ui tag-metadata-service tag-data-service tag-mirror-service tag-log-service tag-search-db tag-search-db-init tag-search-service tag-data-db-sidecar +tag: tag-analyse-service tag-authentication-service tag-metadata-db tag-ui tag-metadata-service tag-data-service tag-log-service tag-search-db tag-search-db-init tag-search-service tag-data-db-sidecar tag-analyse-service: docker tag dbrepo-analyse-service:latest "${REPOSITORY_URL}/analyse-service:${TAG}" @@ -64,11 +60,7 @@ tag-ui: tag-data-service: docker tag dbrepo-data-service:latest "${REPOSITORY_URL}/data-service:${TAG}" - docker tag dbrepo-data-service:latest "${REPOSITORY2_URL}/data-service:${TAG}" - -tag-mirror-service: - docker tag dbrepo-mirror-service:latest "${REPOSITORY_URL}/mirror-service:${TAG}" - docker tag dbrepo-mirror-service:latest "${REPOSITORY2_URL}/mirror-service:${TAG}" + docker tag dbrepo-data-service:latest "${REPOSITORY2_URL}/data-service:${TAG} tag-metadata-service: docker tag dbrepo-metadata-service:latest "${REPOSITORY_URL}/metadata-service:${TAG}" @@ -98,7 +90,7 @@ tag-storage-service-init: docker tag dbrepo-storage-service-init:latest "${REPOSITORY_URL}/storage-service-init:${TAG}" docker tag dbrepo-storage-service-init:latest "${REPOSITORY2_URL}/storage-service-init:${TAG}" -release: build-docker tag release-analyse-service release-authentication-service release-metadata-db release-ui release-metadata-service release-data-service release-log-service release-search-db release-mirror-service release-search-db-init release-search-service release-data-db-sidecar +release: build-docker tag release-analyse-service release-authentication-service release-metadata-db release-ui release-metadata-service release-data-service release-log-service release-search-db release-search-db-init release-search-service release-data-db-sidecar release-analyse-service: tag-analyse-service docker push "${REPOSITORY_URL}/analyse-service:${TAG}" @@ -120,10 +112,6 @@ release-data-service: tag-data-service docker push "${REPOSITORY_URL}/data-service:${TAG}" docker push "${REPOSITORY2_URL}/data-service:${TAG}" -release-mirror-service: tag-mirror-service - docker push "${REPOSITORY_URL}/mirror-service:${TAG}" - docker push "${REPOSITORY2_URL}/mirror-service:${TAG}" - release-search-db: tag-search-db docker push "${REPOSITORY_URL}/search-db:${TAG}" docker push "${REPOSITORY2_URL}/search-db:${TAG}" @@ -152,21 +140,18 @@ release-storage-service-init: tag-storage-service-init docker push "${REPOSITORY_URL}/storage-service-init:${TAG}" docker push "${REPOSITORY2_URL}/storage-service-init:${TAG}" -test-backend: test-metadata-service test-analyse-service test-data-service test-mirror-service +test-backend: test-metadata-service test-analyse-service test-data-service test-data-service: build-data-service mvn -f ./dbrepo-data-service/pom.xml clean test verify -test-mirror-service: build-mirror-service - mvn -f ./dbrepo-mirror-service/pom.xml clean test verify - test-metadata-service: build-metadata-service mvn -f ./dbrepo-metadata-service/pom.xml clean test verify test-analyse-service: build-analyse-service bash ./dbrepo-analyse-service/test.sh -scan: scan-analyse-service scan-authentication-service scan-broker-service scan-gateway-service scan-metadata-db scan-metadata-service scan-search-db scan-ui scan-data-service scan-data-db scan-log-service scan-mirror-service scan-search-dashboard scan-search-service +scan: scan-analyse-service scan-authentication-service scan-broker-service scan-gateway-service scan-metadata-db scan-metadata-service scan-search-db scan-ui scan-data-service scan-data-db scan-log-service scan-search-dashboard scan-search-service scan-analyse-service: trivy image --insecure --exit-code 0 --format template --template "@.trivy/gitlab.tpl" -o ./.trivy/trivy-analyse-service-report.json dbrepo-analyse-service:latest @@ -204,11 +189,6 @@ scan-data-service: trivy image --insecure --exit-code 0 dbrepo-data-service:latest trivy image --insecure --exit-code 1 --severity CRITICAL dbrepo-data-service:latest -scan-mirror-service: - trivy image --insecure --exit-code 0 --format template --template "@.trivy/gitlab.tpl" -o ./.trivy/trivy-mirror-service-report.json dbrepo-mirror-service:latest - trivy image --insecure --exit-code 0 dbrepo-mirror-service:latest - trivy image --insecure --exit-code 1 --severity CRITICAL dbrepo-mirror-service:latest - scan-search-db: trivy image --insecure --exit-code 0 --format template --template "@.trivy/gitlab.tpl" -o ./.trivy/trivy-search-db-report.json "dbrepo-search-db" trivy image --insecure --exit-code 0 "dbrepo-search-db" @@ -258,5 +238,5 @@ teardown: docs: build-docker docker compose up -d || docker compose down - bash .docs/generate_swagger.sh || docker compose down + cd .docs && bash generate_swagger.sh || docker compose down docker compose down diff --git a/README.md b/README.md index a6d91a56fc46c3b53e8827759f59b77189eef061..11e21d53b4e17fbc7a98c78a212c03332e04a3eb 100644 --- a/README.md +++ b/README.md @@ -4,93 +4,23 @@ # DBRepo — A Repository for Databases -## tl;dr - -```shell -docker compose up -d -docker compose logs -f -``` - -## Build - -Build DBRepo from scratch: - -```shell -make build -``` - ## Documentation More documentation can be found online: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/ -## Development - -### CI/CD - -We get compute resources in-kind from [dataLAB](https://www.it.tuwien.ac.at/en/services/network-and-servers/datalab) -to run our pipeline: - -<p align="center"> -<img src="./.gitlab/gitlab-runner.png" alt="Gitlab runner configuration in the cluster" width="732" height="262" /><br/> -<i><strong>Figure 1.</strong> Gitlab runner configuration in the cluster.</i> -</p> - -Minikube cluster with 6vCPU and 28GB RAM. The CI pipeline is configured as follows in the `config.toml`: - -```toml -concurrent = 10 -[[runners]] - executor = "kubernetes" - environment = [ - "FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY=false" - ] - [runners.kubernetes] - namespace = "{{.Release.Namespace}}" - privileged = true - allowed_services = ["docker:24-dind"] - [[runners.kubernetes.services]] - name = "docker:24-dind" - command = [ "--registry-mirror=http://docker-io-mirror:80", "--insecure-registry=docker-io-mirror:80", "--registry-mirror=http://gcr-io-mirror:80", "--insecure-registry=gcr-io-mirror:80", "--registry-mirror=http://ghcr-io-mirror:80", "--insecure-registry=ghcr-io-mirror:80", "--registry-mirror=http://k8s-io-mirror:80", "--insecure-registry=k8s-io-mirror:80" ] - alias = "docker" - [[runners.kubernetes.volumes.empty_dir]] - name = "rundind" - mount_path = "/var/run/dind" - medium = "Memory" - [[runners.kubernetes.volumes.empty_dir]] - name = "tmp" - mount_path = "/tmp" - medium = "Memory" -``` - -For each job in the CI/CD pipeline, a pod with three containers is started: - -1. `build` the main build container, you can *freely* specify any image with `image: xyz` as base -2. `helper` the default helper container. -3. `svc-0` the Docker-in-Docker sidecar (rootless executed as user `rootless`/`1000`) exposing the Docker socket to the - `build` container under ` - -*Note.* Only Docker-in-Docker (dind) is allowed as service in the pipeline currently. For each job, a -dind-sidecar container `svc-0` is started that exposes the Docker socket at `/var/run/dind/docker.sock` in the `build` -container you can freely configure how you want. We are aware this is not optimal as it exposes *root* privileges in the -cluster. - -The full CI/CD pipeline Helm chart is documented in -the [`fda-deployment`](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-deployment/-/tree/master/charts/dbrepo-devops) -repository. - ## Contribute -Contributions are always welcome and encouraged, simply fork the repository and +Contributions are always welcome and encouraged, please read the [contribution overview](./CONTRIBUTING.md) and contact [Andreas Rauber](http://www.ifs.tuwien.ac.at/~andi/). ## Acknowledgements We want to thank the following organizations: -* Bundesministerium für Bildung, Wissenschaft und Forschung (BMBWF) for funding during +* Bundesministerium für Bildung, Wissenschaft und Forschung (BMBWF) for funding during the [call](https://www.bmbwf.gv.at/Themen/HS-Uni/Aktuelles/Ausschreibung--Digitale-und-soziale-Transformation-in-der-Hochschulbildung-.html) "Digitale und soziale Transformation in der Hochschulbildung". -* [TU.it](https://www.it.tuwien.ac.at/en/) for their continuous support in project work, funding and compute resources +* [TU.it](https://www.it.tuwien.ac.at/en/) for their continuous support in project work, funding and compute resources provided in-kind. ## License diff --git a/dbrepo-authentication-service/dbrepo-realm.json b/dbrepo-authentication-service/dbrepo-realm.json index dbd6c6cc5b928ee4f571673495a38ac79e26c433..d3cadb4e7168edaff547f13e7437be41155a7a2d 100644 --- a/dbrepo-authentication-service/dbrepo-realm.json +++ b/dbrepo-authentication-service/dbrepo-realm.json @@ -99,7 +99,7 @@ "description" : "${default-database-handling}", "composite" : true, "composites" : { - "realm" : [ "modify-database-owner", "update-database-access", "create-database", "list-databases", "create-database-access", "find-database", "modify-database-visibility", "delete-database-access", "check-database-access" ] + "realm" : [ "modify-database-owner", "update-database-access", "create-database", "list-databases", "create-database-access", "find-database", "modify-database-visibility", "import-database-data", "delete-database-access", "check-database-access" ] }, "clientRole" : false, "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", @@ -212,6 +212,14 @@ "clientRole" : false, "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", "attributes" : { } + }, { + "id" : "e51b63c2-48dd-4bd6-95fb-d257d21b26ba", + "name" : "import-database-data", + "description" : "${import-database-data}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } }, { "id" : "a7ad038c-5c06-42fc-951c-15ac09d4df66", "name" : "modify-database-owner", @@ -357,14 +365,6 @@ "clientRole" : false, "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", "attributes" : { } - }, { - "id" : "972badbc-ee50-4194-8352-848f1e4c5eee", - "name" : "delete-database", - "description" : "${delete-database}", - "composite" : false, - "clientRole" : false, - "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", - "attributes" : { } }, { "id" : "c047d521-cec3-4444-86c4-aef098489b7b", "name" : "delete-maintenance-message", @@ -401,10 +401,7 @@ "id" : "b372f8f7-d203-4293-b991-ad93fb505917", "name" : "escalated-database-handling", "description" : "${escalated-database-handling}", - "composite" : true, - "composites" : { - "realm" : [ "delete-database" ] - }, + "composite" : false, "clientRole" : false, "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", "attributes" : { } @@ -448,14 +445,6 @@ "clientRole" : false, "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", "attributes" : { } - }, { - "id" : "8755da2b-d85a-4f40-a0bf-fe08cf8f9d75", - "name" : "delete-table", - "description" : "${delete-table}", - "composite" : false, - "clientRole" : false, - "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", - "attributes" : { } }, { "id" : "f392bfcb-0be5-4fad-9ce4-8ac6396f176d", "name" : "export-query-data", @@ -676,6 +665,14 @@ "clientRole" : false, "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", "attributes" : { } + }, { + "id" : "ba1ad8f2-39aa-487d-987f-645e8a459559", + "name" : "delete-table", + "description" : "${delete-table}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } }, { "id" : "09f7bdb0-296f-46c8-a3a3-8f9254fb17e4", "name" : "list-maintenance-messages", @@ -1062,7 +1059,7 @@ "otpPolicyLookAheadWindow" : 1, "otpPolicyPeriod" : 30, "otpPolicyCodeReusable" : false, - "otpSupportedApplications" : [ "totpAppGoogleName", "totpAppFreeOTPName", "totpAppMicrosoftAuthenticatorName" ], + "otpSupportedApplications" : [ "totpAppFreeOTPName", "totpAppMicrosoftAuthenticatorName", "totpAppGoogleName" ], "webAuthnPolicyRpEntityName" : "keycloak", "webAuthnPolicySignatureAlgorithms" : [ "ES256" ], "webAuthnPolicyRpId" : "", @@ -2035,7 +2032,7 @@ "subType" : "anonymous", "subComponents" : { }, "config" : { - "allowed-protocol-mapper-types" : [ "saml-role-list-mapper", "saml-user-property-mapper", "saml-user-attribute-mapper", "oidc-full-name-mapper", "oidc-usermodel-attribute-mapper", "oidc-usermodel-property-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-address-mapper" ] + "allowed-protocol-mapper-types" : [ "saml-user-property-mapper", "oidc-sha256-pairwise-sub-mapper", "saml-user-attribute-mapper", "oidc-full-name-mapper", "oidc-usermodel-property-mapper", "saml-role-list-mapper", "oidc-address-mapper", "oidc-usermodel-attribute-mapper" ] } }, { "id" : "1849e52a-b8c9-44a8-af3d-ee19376a1ed1", @@ -2061,7 +2058,7 @@ "subType" : "authenticated", "subComponents" : { }, "config" : { - "allowed-protocol-mapper-types" : [ "oidc-full-name-mapper", "oidc-usermodel-attribute-mapper", "oidc-address-mapper", "saml-user-attribute-mapper", "saml-user-property-mapper", "saml-role-list-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-usermodel-property-mapper" ] + "allowed-protocol-mapper-types" : [ "oidc-full-name-mapper", "oidc-usermodel-attribute-mapper", "oidc-usermodel-property-mapper", "oidc-address-mapper", "saml-user-property-mapper", "saml-user-attribute-mapper", "oidc-sha256-pairwise-sub-mapper", "saml-role-list-mapper" ] } } ], "org.keycloak.userprofile.UserProfileProvider" : [ { @@ -2119,7 +2116,7 @@ "internationalizationEnabled" : false, "supportedLocales" : [ ], "authenticationFlows" : [ { - "id" : "7b9f9c3b-0636-406b-8ac3-c7259ef423d3", + "id" : "7b272faa-5cbf-4783-8bca-cabe292e80cc", "alias" : "Account verification options", "description" : "Method with which to verity the existing account", "providerId" : "basic-flow", @@ -2141,7 +2138,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "70be7410-8823-4c0f-aa70-39d9d0e1c7f2", + "id" : "9d570708-d15a-4063-a3b1-d742c9c85529", "alias" : "Authentication Options", "description" : "Authentication options.", "providerId" : "basic-flow", @@ -2170,7 +2167,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "c3bfd9c1-1e61-4789-9797-7e28867ac15b", + "id" : "2579048c-e648-4e95-9bd9-fb1fe776a64b", "alias" : "Browser - Conditional OTP", "description" : "Flow to determine if the OTP is required for the authentication", "providerId" : "basic-flow", @@ -2192,7 +2189,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "ba6106ab-6fca-43b3-a170-c1db8352fc69", + "id" : "76197fdc-44e0-470c-b84f-7e666edda852", "alias" : "Direct Grant - Conditional OTP", "description" : "Flow to determine if the OTP is required for the authentication", "providerId" : "basic-flow", @@ -2214,7 +2211,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "bd04da6b-71b0-42d0-a279-4402b7cf35cf", + "id" : "1c163e76-4872-4996-b7a2-937fd9827f4a", "alias" : "First broker login - Conditional OTP", "description" : "Flow to determine if the OTP is required for the authentication", "providerId" : "basic-flow", @@ -2236,7 +2233,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "2016d479-271f-4dfd-88c3-50635d1d27ea", + "id" : "fac05c8f-328f-4bb6-ac68-e5cf0dbaf768", "alias" : "Handle Existing Account", "description" : "Handle what to do if there is existing account with same email/username like authenticated identity provider", "providerId" : "basic-flow", @@ -2258,7 +2255,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "3294bcec-0829-405e-bc34-897eb5ecbf62", + "id" : "e9478687-f9bd-4854-83a2-768903dd06a7", "alias" : "Reset - Conditional OTP", "description" : "Flow to determine if the OTP should be reset or not. Set to REQUIRED to force.", "providerId" : "basic-flow", @@ -2280,7 +2277,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "cdc002be-a391-4853-8c40-8eef726dcfb6", + "id" : "a6a6064c-91e3-455d-a8f7-8530f0d9f932", "alias" : "User creation or linking", "description" : "Flow for the existing/non-existing user alternatives", "providerId" : "basic-flow", @@ -2303,7 +2300,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "11e9d0a5-743f-44fe-ab9f-59f3e730e20a", + "id" : "bf274d56-ea30-450d-9ba7-1d4206f8b9ae", "alias" : "Verify Existing Account by Re-authentication", "description" : "Reauthentication of existing account", "providerId" : "basic-flow", @@ -2325,7 +2322,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "c5ea7e5c-c07d-48c5-ba99-4e84ed167bee", + "id" : "38133f86-344b-497e-9402-87c454d7128c", "alias" : "browser", "description" : "browser based authentication", "providerId" : "basic-flow", @@ -2361,7 +2358,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "e18342ad-98d9-4411-bf59-30e07cf65f98", + "id" : "f644f101-4f4a-458a-990d-6ced0d1353fe", "alias" : "clients", "description" : "Base authentication for clients", "providerId" : "client-flow", @@ -2397,7 +2394,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "ca97318e-8587-43b4-919b-5c65e2a074f3", + "id" : "a12de1f9-53eb-4563-8aa8-051e583bb144", "alias" : "direct grant", "description" : "OpenID Connect Resource Owner Grant", "providerId" : "basic-flow", @@ -2426,7 +2423,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "7f523ba5-6d6b-4a65-9ba0-107b5c3afe7a", + "id" : "edc782a3-5dee-41a2-ab0d-715fc55b01c9", "alias" : "docker auth", "description" : "Used by Docker clients to authenticate against the IDP", "providerId" : "basic-flow", @@ -2441,7 +2438,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "c72a0c74-0dc4-45dc-8b62-a77bc42d805c", + "id" : "358c0c7d-832d-477c-b9d0-258a786325d5", "alias" : "first broker login", "description" : "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account", "providerId" : "basic-flow", @@ -2464,7 +2461,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "5939da5a-b299-49b7-8c07-c45e13d995db", + "id" : "891b4eb9-3a7f-4556-8cb8-f6a07c637dae", "alias" : "forms", "description" : "Username, password, otp and other auth forms.", "providerId" : "basic-flow", @@ -2486,7 +2483,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "6a0341db-eec8-4962-bb04-4b8a43dced2a", + "id" : "b74eeba1-2096-41d4-bafb-940ad65ecd42", "alias" : "http challenge", "description" : "An authentication flow based on challenge-response HTTP Authentication Schemes", "providerId" : "basic-flow", @@ -2508,7 +2505,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "525006c3-c676-4bfb-83cf-79faeafe0183", + "id" : "37ca760b-2b9f-491f-aa1c-a9896923ab61", "alias" : "registration", "description" : "registration flow", "providerId" : "basic-flow", @@ -2524,7 +2521,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "65e9d76b-d180-47e6-ad1b-dddea414668f", + "id" : "1cf97e2c-9063-4b0e-8b99-56c463a6effc", "alias" : "registration form", "description" : "registration form", "providerId" : "form-flow", @@ -2560,7 +2557,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "feb110ed-e018-43ba-8989-0b17a3a20de3", + "id" : "01499d7a-b0a1-4dd0-a866-62e6a28d5119", "alias" : "reset credentials", "description" : "Reset credentials for a user if they forgot their password or something", "providerId" : "basic-flow", @@ -2596,7 +2593,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "15efa29f-2140-4e3b-803e-64d79906c18b", + "id" : "579397ef-7c1f-4a24-93c4-7e9ea2514783", "alias" : "saml ecp", "description" : "SAML ECP Profile Authentication Flow", "providerId" : "basic-flow", @@ -2612,13 +2609,13 @@ } ] } ], "authenticatorConfig" : [ { - "id" : "2c135401-6244-41b0-8c49-648f38b5e1bd", + "id" : "8f778718-7e1d-417a-b6e6-fc4788b45c44", "alias" : "create unique user config", "config" : { "require.password.update.after.registration" : "false" } }, { - "id" : "39d00721-0854-4ff7-9f5c-7f6fa71ae37a", + "id" : "fdf2fe79-06e9-4bea-b361-dab88bd38680", "alias" : "review profile config", "config" : { "update.profile.on.first.login" : "missing" diff --git a/dbrepo-data-db/sidecar/Dockerfile b/dbrepo-data-db/sidecar/Dockerfile index de0f2d76f2ee5d4788083fba56e22f719a93636a..b662b2453246d34a1453c1a7267d29f537d4c9f0 100644 --- a/dbrepo-data-db/sidecar/Dockerfile +++ b/dbrepo-data-db/sidecar/Dockerfile @@ -1,6 +1,6 @@ FROM python:3.10-alpine -RUN apk add bash curl jq +RUN apk add bash curl jq mariadb-client ENV PYTHONFAULTHANDLER=1 diff --git a/dbrepo-data-service/README.md b/dbrepo-data-service/README.md index 4191caa888f12a791b0c54026698c00bc2e98a85..0441a17305f7f085082c445d8f77825c721a41be 100644 --- a/dbrepo-data-service/README.md +++ b/dbrepo-data-service/README.md @@ -1,2 +1,24 @@ -# Search Startup Agent +# Data Service +## Actuator + +- Info: http://localhost:9093/actuator/info +- Health: http://localhost:9093/actuator/health + - Readiness: http://localhost:9093/actuator/health/readiness + - Liveness: http://localhost:9093/actuator/health/liveness +- Prometheus: http://localhost:9093/actuator/prometheus + +## Swagger UI Endpoints + +- Swagger UI: http://localhost:9093/swagger-ui/index.html + +## OpenAPI Endpoints + +- OpenAPI v3 as .yaml: http://localhost:9093/v3/api-docs.yaml + +## Build + +```shell +mvn -f ../dbrepo-metadata-service/pom.xml clean install -DskipTests +mvn clean package -DskipTests +``` \ No newline at end of file diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/annotations/MockOpensearch.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/annotations/MockOpensearch.java index 77a4d8cec3bc5f9efbca5e3f66e14c3b112fc05b..5544c9562d53d8bad82db735eef18fa0585b9225 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/annotations/MockOpensearch.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/annotations/MockOpensearch.java @@ -14,9 +14,8 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) -@MockBeans({@MockBean(DatabaseIdxRepository.class), @MockBean(UnitIdxRepository.class), - @MockBean(ConceptIdxRepository.class), @MockBean(TableIdxRepository.class), @MockBean(TableColumnIdxRepository.class), - @MockBean(UserIdxRepository.class), @MockBean(ViewIdxRepository.class), @MockBean(IdentifierIdxRepository.class)}) -@EnableAutoConfiguration(exclude = {OpenSearchRestClientAutoConfiguration.class, OpenSearchRestHighLevelClientAutoConfiguration.class}) +@MockBeans({@MockBean(DatabaseIdxRepository.class)}) +@EnableAutoConfiguration(exclude = {OpenSearchRestClientAutoConfiguration.class, + OpenSearchRestHighLevelClientAutoConfiguration.class}) public @interface MockOpensearch { } diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java index 55feb01c14091d0d1f0dec7d1a492a7bf95adcca..5a129d950e3fbd65e5270ddc48d0db235421ab01 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java @@ -4,13 +4,8 @@ import at.tuwien.BaseUnitTest; import at.tuwien.annotations.MockAmqp; import at.tuwien.annotations.MockOpensearch; import at.tuwien.entities.database.Database; -import at.tuwien.entities.user.User; import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.repository.mdb.ContainerRepository; -import at.tuwien.repository.mdb.DatabaseRepository; -import at.tuwien.repository.mdb.ImageRepository; -import at.tuwien.repository.mdb.UserRepository; +import at.tuwien.repository.mdb.*; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -45,15 +40,24 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { @Autowired private DatabaseRepository databaseRepository; + @Autowired + private LicenseRepository licenseRepository; + @Autowired private DatabaseService databaseService; @BeforeEach public void beforeEach() { + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + /* metadata database */ userRepository.save(USER_1); - imageRepository.save(IMAGE_1_SIMPLE); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); + imageRepository.save(IMAGE_1); + licenseRepository.save(LICENSE_1); + containerRepository.save(CONTAINER_1); + databaseRepository.save(DATABASE_1); } @Test diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java index 669ae322bb7a1256fa4dfa9eeed4a073abe568d8..f3f9d3382574b33c4df5cb31b3cb65acd1c9fb2f 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java @@ -5,7 +5,6 @@ import at.tuwien.annotations.MockOpensearch; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.exception.QueryMalformedException; import at.tuwien.exception.TableNotFoundException; import at.tuwien.repository.mdb.*; import at.tuwien.service.impl.QueueServiceImpl; @@ -22,9 +21,7 @@ import org.testcontainers.junit.jupiter.Testcontainers; import java.sql.SQLException; import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -45,13 +42,10 @@ public class QueueServiceIntegrationTest extends BaseUnitTest { private DatabaseRepository databaseRepository; @Autowired - private TableRepository tableRepository; + private ImageRepository imageRepository; @Autowired - private TableColumnRepository tableColumnRepository; - - @Autowired - private ImageRepository imageRepository; + private LicenseRepository licenseRepository; @Autowired private QueueServiceImpl queueService; @@ -61,15 +55,18 @@ public class QueueServiceIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() throws SQLException { - MariaDbConfig.dropDatabase(CONTAINER_1, DATABASE_1_INTERNALNAME); - MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); /* metadata database */ - imageRepository.save(IMAGE_1); userRepository.save(USER_1); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); - tableRepository.save(TABLE_1_SIMPLE); - tableColumnRepository.saveAll(TABLE_1_COLUMNS); + imageRepository.save(IMAGE_1); + licenseRepository.save(LICENSE_1); + containerRepository.save(CONTAINER_1); + databaseRepository.save(DATABASE_1); + MariaDbConfig.dropDatabase(CONTAINER_1, DATABASE_1_INTERNALNAME); + MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); } @Test diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java index 3e3cff725d951850bfaa128f7c52a340f2afc4be..d461ffdb13697847db68229d93086236279792e3 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java @@ -3,12 +3,7 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; import at.tuwien.annotations.MockAmqp; import at.tuwien.annotations.MockOpensearch; -import at.tuwien.config.MariaDbConfig; -import at.tuwien.config.MariaDbContainerConfig; import at.tuwien.entities.user.User; -import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.TableNotFoundException; import at.tuwien.exception.UserNotFoundException; import at.tuwien.repository.mdb.*; import lombok.extern.log4j.Log4j2; @@ -18,15 +13,8 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.testcontainers.containers.MariaDBContainer; -import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; -import java.sql.SQLException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java index 109644ddfd0f3a8e4428e0bffd6fae0d3dc708ea..16e7cc8249cadf672b3b08349414cd9d6efeb59a 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java @@ -6,7 +6,6 @@ import at.tuwien.repository.mdb.DatabaseRepository; import at.tuwien.service.DatabaseService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.annotation.Transient; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -25,16 +24,18 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe } @Override + @Transactional(readOnly = true) public List<Database> findAll() { return databaseRepository.findAll(); } @Override + @Transactional(readOnly = true) public Database find(Long databaseId) throws DatabaseNotFoundException { final Optional<Database> database = databaseRepository.findById(databaseId); if (database.isEmpty()) { log.error("Failed to find database with id {}", databaseId); - throw new DatabaseNotFoundException("could not find database with id " + databaseId); + throw new DatabaseNotFoundException("Failed to find database with id " + databaseId); } return database.get(); } @@ -45,7 +46,7 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe final Optional<Database> database = databaseRepository.findByInternalName(internalName); if (database.isEmpty()) { log.error("Failed to find database with internal name {}", internalName); - throw new DatabaseNotFoundException("could not find database with internal name " + internalName); + throw new DatabaseNotFoundException("Failed to find database with internal name " + internalName); } return database.get(); } diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java index 9156e18c58d22409909660d64c16f55cedaf8611..6231e51d651fbe7488b3bd4e72b3734cbd36302b 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java @@ -7,6 +7,7 @@ import at.tuwien.service.UserService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Optional; @@ -22,6 +23,7 @@ public class UserServiceImpl implements UserService { } @Override + @Transactional(readOnly = true) public User findByUsername(String username) throws UserNotFoundException { final Optional<User> optional = userRepository.findByUsername(username); if (optional.isEmpty()) { diff --git a/dbrepo-metadata-db/setup-schema.sql b/dbrepo-metadata-db/setup-schema.sql index 0b3a6c132db85e7454de153332c318d13cee2d6f..3165796d3dd1a263ef031f98b64300889c385f21 100644 --- a/dbrepo-metadata-db/setup-schema.sql +++ b/dbrepo-metadata-db/setup-schema.sql @@ -116,27 +116,29 @@ CREATE TABLE IF NOT EXISTS `mdb_databases_subjects` CREATE TABLE IF NOT EXISTS `mdb_tables` ( - ID bigint NOT NULL AUTO_INCREMENT, - tDBID bigint NOT NULL, - internal_name character varying(255) NOT NULL, - queue_name character varying(255) NOT NULL, - routing_key character varying(255) NOT NULL, - tName VARCHAR(50), - tDescription TEXT, - NumCols INTEGER, - NumRows INTEGER, - `separator` CHAR(1), - quote CHAR(1), - element_null VARCHAR(50), - skip_lines BIGINT, - element_true VARCHAR(50), - element_false VARCHAR(50), - Version TEXT, - created timestamp NOT NULL DEFAULT NOW(), - versioned boolean not null default true, - created_by character varying(36) NOT NULL, - owned_by character varying(36) NOT NULL, - last_modified timestamp, + ID bigint NOT NULL AUTO_INCREMENT, + tDBID bigint NOT NULL, + internal_name character varying(255) NOT NULL, + queue_name character varying(255) NOT NULL, + routing_key character varying(255) NOT NULL, + tName VARCHAR(50), + tDescription TEXT, + num_rows BIGINT, + data_length BIGINT, + max_data_length BIGINT, + avg_row_length BIGINT, + `separator` CHAR(1), + quote CHAR(1), + element_null VARCHAR(50), + skip_lines BIGINT, + element_true VARCHAR(50), + element_false VARCHAR(50), + Version TEXT, + created timestamp NOT NULL DEFAULT NOW(), + versioned boolean not null default true, + created_by character varying(36) NOT NULL, + owned_by character varying(36) NOT NULL, + last_modified timestamp, PRIMARY KEY (ID), FOREIGN KEY (tDBID) REFERENCES mdb_databases (id), FOREIGN KEY (created_by) REFERENCES mdb_users (id), @@ -145,19 +147,19 @@ CREATE TABLE IF NOT EXISTS `mdb_tables` CREATE TABLE IF NOT EXISTS `mdb_columns` ( - ID bigint NOT NULL AUTO_INCREMENT, - tID bigint NOT NULL, - dfID bigint, + ID BIGINT NOT NULL AUTO_INCREMENT, + tID BIGINT NOT NULL, + dfID BIGINT, cName VARCHAR(100), internal_name VARCHAR(100) NOT NULL, alias VARCHAR(100), Datatype ENUM ('CHAR','VARCHAR','BINARY','VARBINARY','TINYBLOB','TINYTEXT','TEXT','BLOB','MEDIUMTEXT','MEDIUMBLOB','LONGTEXT','LONGBLOB','ENUM','SET','BIT','TINYINT','BOOL','SMALLINT','MEDIUMINT','INT','BIGINT','FLOAT','DOUBLE','DECIMAL','DATE','DATETIME','TIMESTAMP','TIME','YEAR'), - length INT NULL, + length BIGINT NULL, ordinal_position INTEGER NOT NULL, is_primary_key BOOLEAN NOT NULL, - index_length INT NULL, - size INT, - d INT, + index_length BIGINT NULL, + size BIGINT, + d BIGINT, auto_generated BOOLEAN DEFAULT false, is_null_allowed BOOLEAN NOT NULL DEFAULT true, val_min NUMERIC NULL, @@ -314,8 +316,6 @@ CREATE TABLE IF NOT EXISTS `mdb_view` Query TEXT NOT NULL, query_hash VARCHAR(255) NOT NULL, Public BOOLEAN NOT NULL, - NumCols INTEGER, - NumRows INTEGER, InitialView BOOLEAN NOT NULL, created timestamp NOT NULL DEFAULT NOW(), last_modified timestamp, @@ -365,30 +365,29 @@ CREATE TABLE IF NOT EXISTS `mdb_view_columns` CREATE TABLE IF NOT EXISTS `mdb_identifiers` ( - id bigint NOT NULL AUTO_INCREMENT, - dbid bigint, - qid bigint, - vid bigint, - publisher VARCHAR(255) NOT NULL, + id BIGINT NOT NULL AUTO_INCREMENT, + dbid BIGINT, + qid BIGINT, + vid BIGINT, + tid BIGINT, + publisher VARCHAR(255) NOT NULL, language VARCHAR(2), - visibility ENUM ('SELF', 'EVERYONE') NOT NULL default 'EVERYONE', - publication_year INTEGER NOT NULL, + publication_year INTEGER NOT NULL, publication_month INTEGER, publication_day INTEGER, - identifier_type ENUM ('DATABASE', 'SUBSET', 'VIEW') NOT NULL, + identifier_type ENUM ('DATABASE', 'SUBSET', 'VIEW', 'TABLE') NOT NULL, query TEXT, query_normalized TEXT, query_hash VARCHAR(255), - execution timestamp, + execution TIMESTAMP, result_hash VARCHAR(255), - result_number bigint, + result_number BIGINT, doi VARCHAR(255), - created timestamp NOT NULL DEFAULT NOW(), - created_by character varying(36) NOT NULL, - last_modified timestamp, + created TIMESTAMP NOT NULL DEFAULT NOW(), + created_by VARCHAR(36) NOT NULL, + last_modified TIMESTAMP, PRIMARY KEY (id), /* must be a single id from persistent identifier concept */ FOREIGN KEY (dbid) REFERENCES mdb_databases (id), - UNIQUE (dbid, qid), FOREIGN KEY (created_by) REFERENCES mdb_users (id) ) WITH SYSTEM VERSIONING; diff --git a/dbrepo-metadata-service/Dockerfile b/dbrepo-metadata-service/Dockerfile index 4a7bd0a5ba6726678a5894f6d04ef44fa82f078f..965dd2737ba93184d9b86dc3c1a1c05eb53f6466 100644 --- a/dbrepo-metadata-service/Dockerfile +++ b/dbrepo-metadata-service/Dockerfile @@ -77,6 +77,9 @@ ENV DATACITE_PASSWORD="" ENV S3_STORAGE_ENDPOINT="http://storage-service:9000" ENV S3_ACCESS_KEY_ID="seaweedfsadmin" ENV S3_SECRET_ACCESS_KEY="seaweedfsadmin" +ENV MIRROR_RATE=60 +ENV OBTAIN_METADATA_RATE=60 +ENV DELETE_STALE_QUERIES_RATE=60 WORKDIR /app diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java index dcc1a62546ce8cc8ebf325df4a2ca38d182c3329..d1de28cf809c7dab958c768664a6be08fb8270c5 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java @@ -1,5 +1,6 @@ package at.tuwien.api.container; +import at.tuwien.api.container.image.ImageBriefDto; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -38,6 +39,10 @@ public class ContainerBriefDto { @Schema(example = "air-quality") private String internalName; + @NotNull + @Field(name = "internal_name") + private ImageBriefDto image; + @NotNull @org.springframework.data.annotation.Transient @Schema(example = "true") diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java index 73a83b9217e5f2505775c605ec47194cb906dd8f..3cab9d49ff6f1779200ddb0a5ced317e8c9fa2e8 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java @@ -40,7 +40,7 @@ public class ContainerDto { @Field(name = "host", type = FieldType.Keyword) private String host; - @Field(name = "port", type = FieldType.Keyword) + @Field(name = "port", type = FieldType.Integer) private Integer port; @NotBlank @@ -50,7 +50,7 @@ public class ContainerDto { @NotNull @JsonProperty("sidecar_port") - @Field(name = "sidecar_port", type = FieldType.Keyword) + @Field(name = "sidecar_port", type = FieldType.Integer) private Integer sidecarPort; @JsonProperty("ui_host") @@ -58,10 +58,10 @@ public class ContainerDto { private String uiHost; @JsonProperty("ui_port") - @Field(name = "ui_port", type = FieldType.Keyword) + @Field(name = "ui_port", type = FieldType.Integer) private Integer uiPort; - @Field(name = "image", includeInParent = true, type = FieldType.Nested) + @Field(name = "image", type = FieldType.Nested) private ImageBriefDto image; @NotNull diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java index 020b6d690f0704907f0ad3133c1d117823797a04..b4fd668da38de4dab526d43fb0239db24adbd8d7 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java @@ -1,8 +1,9 @@ package at.tuwien.api.database; import at.tuwien.api.container.ContainerBriefDto; -import at.tuwien.api.container.image.ImageBriefDto; -import at.tuwien.api.identifier.IdentifierBriefDto; +import at.tuwien.api.container.image.ImageDto; +import at.tuwien.api.database.table.TableBriefDto; +import at.tuwien.api.identifier.IdentifierDto; import at.tuwien.api.user.UserBriefDto; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; @@ -13,6 +14,7 @@ import lombok.*; import lombok.extern.jackson.Jacksonized; import java.time.Instant; +import java.util.List; @Getter @Setter @@ -23,45 +25,59 @@ import java.time.Instant; @ToString public class DatabaseBriefDto { - @NotNull(message = "database id is required") + @NotNull private Long id; - @NotBlank(message = "name is required") + @NotBlank @Schema(example = "Air Quality") private String name; - @NotBlank(message = "internal name is required") + @NotBlank + @JsonProperty("exchange_name") + @Schema(example = "dbrepo") + private String exchangeName; + + @JsonProperty("exchange_type") + @Schema(example = "topic") + private String exchangeType; + + private IdentifierDto identifier; + + @NotBlank @JsonProperty("internal_name") @Schema(example = "air_quality") private String internalName; - @Schema(example = "Air Quality in Austria") + @Schema(example = "Air Quality") private String description; - private IdentifierBriefDto identifier; + @org.springframework.data.annotation.Transient + private List<TableBriefDto> tables; + + @org.springframework.data.annotation.Transient + private List<ViewBriefDto> views; @JsonProperty("is_public") @Schema(example = "true") private Boolean isPublic; - @Schema(example = "mariadb:10.5") - private String engine; + @org.springframework.data.annotation.Transient + private ImageDto image; - @NotNull - private UserBriefDto owner; + private ContainerBriefDto container; - @ToString.Exclude @org.springframework.data.annotation.Transient - private ContainerBriefDto container; + private List<DatabaseAccessDto> accesses; + @NotNull private UserBriefDto creator; + @NotNull + private UserBriefDto owner; + @NotNull @Schema(example = "2021-03-12T15:26:21Z") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant created; - @NotNull - private ImageBriefDto image; - } diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseDto.java index 77172e8ee94ff92618d5fa1a9ef2503aa23fbbb2..e1b4298cc30d959b7d6c2e23dfe287b3cbe8382d 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseDto.java @@ -2,9 +2,9 @@ package at.tuwien.api.database; import at.tuwien.api.container.ContainerDto; import at.tuwien.api.container.image.ImageDto; -import at.tuwien.api.database.table.TableBriefDto; +import at.tuwien.api.database.table.TableDto; import at.tuwien.api.identifier.IdentifierDto; -import at.tuwien.api.user.UserBriefDto; +import at.tuwien.api.user.UserDto; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -16,6 +16,7 @@ import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.annotations.FieldType; +import org.springframework.data.elasticsearch.annotations.WriteTypeHint; import java.time.Instant; import java.util.List; @@ -27,7 +28,7 @@ import java.util.List; @AllArgsConstructor @Jacksonized @ToString -@Document(indexName = "database") +@Document(indexName = "database", writeTypeHint = WriteTypeHint.FALSE) public class DatabaseDto { @Id @@ -51,8 +52,6 @@ public class DatabaseDto { @Field(name = "exchange_type", type = FieldType.Keyword) private String exchangeType; - private IdentifierDto identifier; - @NotBlank @JsonProperty("internal_name") @Schema(example = "air_quality") @@ -63,33 +62,38 @@ public class DatabaseDto { @Field(name = "description", type = FieldType.Text) private String description; - @org.springframework.data.annotation.Transient - private List<TableBriefDto> tables; + @Field(name = "tables", type = FieldType.Nested) + private List<TableDto> tables; - @org.springframework.data.annotation.Transient - private List<ViewBriefDto> views; + @Field(name = "views", type = FieldType.Nested) + private List<ViewDto> views; @JsonProperty("is_public") @Schema(example = "true") @Field(name = "is_public", type = FieldType.Boolean) private Boolean isPublic; - @org.springframework.data.annotation.Transient - private ImageDto image; - - @Field(name = "container", includeInParent = true, type = FieldType.Nested) + @Field(name = "container", type = FieldType.Nested) private ContainerDto container; - @org.springframework.data.annotation.Transient private List<DatabaseAccessDto> accesses; + @Field(name = "identifiers", type = FieldType.Nested) + private List<IdentifierDto> identifiers; + + @Field(name = "subsets", type = FieldType.Nested) + private List<IdentifierDto> subsets; + + @NotNull + private UserDto creator; + @NotNull - @Field(name = "creator", includeInParent = true, type = FieldType.Nested) - private UserBriefDto creator; + @Field(name = "contact", type = FieldType.Nested) + private UserDto contact; @NotNull - @Field(name = "owner", includeInParent = true, type = FieldType.Nested) - private UserBriefDto owner; + @Field(name = "owner", type = FieldType.Nested) + private UserDto owner; @NotNull @Schema(example = "2021-03-12T15:26:21Z") diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewDto.java index a9bd0314c4b5f1c2a1d9a93faef6b896e5a2530a..84df87e0170a537128f307d6b0c5479de0dd6630 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewDto.java @@ -28,7 +28,6 @@ import java.util.UUID; @AllArgsConstructor @Jacksonized @ToString -@Document(indexName = "view") public class ViewDto { @Id @@ -50,8 +49,8 @@ public class ViewDto { @Field(name = "name", type = FieldType.Keyword) private String name; - @org.springframework.data.annotation.Transient - private IdentifierDto identifier; + @Field(name = "identifiers", type = FieldType.Nested) + private List<IdentifierDto> identifiers; @NotBlank @Schema(example = "air_quality") @@ -91,7 +90,6 @@ public class ViewDto { private UUID createdBy; @NotNull - @Field(name = "creator", includeInParent = true, type = FieldType.Nested) private UserDto creator; @NotNull(message = "columns are required") diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java index dc07b9b8051df7008257992a77207a1c8950e3f2..62a347107409b5b8823fa53a445221bbe80a0927 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java @@ -1,6 +1,7 @@ package at.tuwien.api.database.query; import at.tuwien.api.identifier.IdentifierBriefDto; +import at.tuwien.api.identifier.IdentifierDto; import at.tuwien.api.user.UserDto; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -13,6 +14,7 @@ import jakarta.validation.constraints.NotNull; import lombok.extern.jackson.Jacksonized; import java.time.Instant; +import java.util.List; import java.util.UUID; @@ -67,10 +69,15 @@ public class QueryBriefDto { @Schema(example = "1") private Long resultNumber; + @NotNull + @JsonProperty("is_persisted") + @Schema(example = "true") + private Boolean isPersisted; + @Schema(example = "query") private QueryTypeDto type; - private IdentifierBriefDto identifier; + private List<IdentifierBriefDto> identifiers; @NotNull @Schema(example = "2021-03-12T15:26:21Z") diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryDto.java index ef4496b78712811aab5ede916de445246244ae3f..59533d41b02b06f3c8da108cfea4263b1eceb5fc 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryDto.java @@ -13,9 +13,9 @@ import jakarta.validation.constraints.NotNull; import lombok.extern.jackson.Jacksonized; import java.time.Instant; +import java.util.List; import java.util.UUID; - @Getter @Setter @Builder @@ -58,7 +58,7 @@ public class QueryDto { @Schema(example = "query") private QueryTypeDto type; - private IdentifierDto identifier; + private List<IdentifierDto> identifiers; @NotBlank(message = "query hash is required") @JsonProperty("query_hash") diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCsvInformationDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCsvInformationDto.java deleted file mode 100644 index 6064b71d022601edfb428511856dd455ccc8a95f..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCsvInformationDto.java +++ /dev/null @@ -1,38 +0,0 @@ -package at.tuwien.api.database.table; - -import at.tuwien.api.database.table.columns.ColumnTypeDto; -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.extern.jackson.Jacksonized; - -import java.util.List; - -@Getter -@Setter -@Builder -@NoArgsConstructor -@AllArgsConstructor -@Jacksonized -@ToString -public class TableCsvInformationDto { - - @NotBlank - @Schema(example = "Air Quality") - private String name; - - @NotBlank - @Schema(example = "Air Quality in Austria") - private String description; - - @NotNull - private List<ColumnTypeDto> columns; - - @NotBlank - @JsonProperty("file_location") - private String fileLocation; - -} diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCsvUpdateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCsvUpdateDto.java deleted file mode 100644 index 7fd558022fdc5eb5b11452d07dfbd31a23108f51..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCsvUpdateDto.java +++ /dev/null @@ -1,25 +0,0 @@ -package at.tuwien.api.database.table; - -import lombok.*; - -import jakarta.validation.constraints.NotNull; -import lombok.extern.jackson.Jacksonized; - -import java.util.Map; - -@Getter -@Setter -@Builder -@NoArgsConstructor -@AllArgsConstructor -@Jacksonized -@ToString -public class TableCsvUpdateDto { - - @NotNull(message = "data is required") - private Map<String, Object> data; - - @NotNull(message = "primary key columns are required") - private Map<String, Object> keys; - -} diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableDto.java index 9f1da0d66868f7b99a4eb3f45b424dc25d450013..b05b843ae5c6f975b0ef9d00befcf5b4a4e50747 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableDto.java @@ -1,8 +1,8 @@ package at.tuwien.api.database.table; -import at.tuwien.api.database.DatabaseDto; import at.tuwien.api.database.table.columns.ColumnDto; import at.tuwien.api.database.table.constraints.ConstraintsDto; +import at.tuwien.api.identifier.IdentifierDto; import at.tuwien.api.user.UserDto; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; @@ -13,8 +13,6 @@ import lombok.extern.jackson.Jacksonized; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import org.springframework.data.annotation.Id; -import org.springframework.data.annotation.Transient; -import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.annotations.FieldType; @@ -29,7 +27,6 @@ import java.util.UUID; @AllArgsConstructor @Jacksonized @ToString -@Document(indexName = "table") public class TableDto { @Id @@ -41,10 +38,6 @@ public class TableDto { @Field(name = "database_id", type = FieldType.Keyword) private Long tdbid; - @NotNull - @org.springframework.data.annotation.Transient - private DatabaseDto database; - @NotBlank(message = "name is required") @Schema(example = "Air Quality") @Field(name = "name", type = FieldType.Keyword) @@ -56,6 +49,9 @@ public class TableDto { @Field(name = "internal_name", type = FieldType.Keyword) private String internalName; + @Field(name = "identifiers", type = FieldType.Nested) + private List<IdentifierDto> identifiers; + @NotNull @JsonProperty("is_versioned") @Schema(example = "true") @@ -68,11 +64,11 @@ public class TableDto { private UUID createdBy; @NotNull(message = "creator is required") - @Field(name = "creator", includeInParent = true, type = FieldType.Nested) + @Field(name = "creator", type = FieldType.Nested) private UserDto creator; @NotNull(message = "owner is required") - @Field(name = "owner", includeInParent = true, type = FieldType.Nested) + @Field(name = "owner", type = FieldType.Nested) private UserDto owner; @NotBlank(message = "queueName is required") @@ -109,10 +105,9 @@ public class TableDto { private Instant created; @NotNull(message = "columns are required") - @org.springframework.data.annotation.Transient private List<ColumnDto> columns; - @Field(name = "constraints", includeInParent = true, type = FieldType.Nested) + @Field(name = "constraints", type = FieldType.Nested) private ConstraintsDto constraints; } diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnCreateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnCreateDto.java index b938171df09b5d8493933ff863a8bc7092912f0a..d675644ececec4423e89cc0d6fc8c9ffd5c6a779 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnCreateDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnCreateDto.java @@ -29,17 +29,17 @@ public class ColumnCreateDto { private Boolean primaryKey; @JsonProperty("index_length") - private Integer indexLength; + private Long indexLength; @NotNull @Schema(example = "string") private ColumnTypeDto type; @Schema(example = "255") - private Integer size; + private Long size; @Schema(example = "0") - private Integer d; + private Long d; @NotNull @JsonProperty("null_allowed") diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java index bf5e9fe292249b8c19610828d46a0d32c8cebc72..fc667ae8ee479d20dfb7289b061d8917cab63c8a 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java @@ -6,13 +6,11 @@ import at.tuwien.api.database.table.columns.concepts.UnitDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.persistence.Column; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.*; import lombok.extern.jackson.Jacksonized; import org.springframework.data.annotation.Id; -import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.annotations.FieldType; @@ -26,7 +24,6 @@ import java.util.List; @AllArgsConstructor @Jacksonized @ToString -@Document(indexName = "column") public class ColumnDto { @Id @@ -60,7 +57,7 @@ public class ColumnDto { private String alias; @JsonProperty("date_format") - @Field(name = "date_format", includeInParent = true, type = FieldType.Nested) + @Field(name = "date_format", type = FieldType.Nested) private ImageDateDto dateFormat; @NotNull @@ -75,9 +72,13 @@ public class ColumnDto { @Schema(example = "true") private Boolean isPrimaryKey; - @Field(name = "index_length", type = FieldType.Integer) + @Field(name = "index_length", type = FieldType.Long) @JsonProperty("index_length") - private Integer indexLength; + private Long indexLength; + + @Field(name = "length", type = FieldType.Long) + @JsonProperty("length") + private Long length; @NotNull @JsonProperty("column_type") @@ -86,12 +87,24 @@ public class ColumnDto { private ColumnTypeDto columnType; @Schema(example = "255") - @Field(name = "size", type = FieldType.Integer) - private Integer size; + @Field(name = "size", type = FieldType.Long) + private Long size; @Schema(example = "0") - @Field(name = "d", type = FieldType.Integer) - private Integer d; + @Field(name = "d", type = FieldType.Long) + private Long d; + + @Schema(example = "34300") + @Field(name = "data_length", type = FieldType.Long) + private Long dataLength; + + @Schema(example = "34300") + @Field(name = "max_data_length", type = FieldType.Long) + private Long maxDataLength; + + @Schema(example = "32") + @Field(name = "num_rows", type = FieldType.Long) + private Long numRows; @Schema(example = "0") @Field(name = "val_min", type = FieldType.Double) @@ -113,10 +126,10 @@ public class ColumnDto { @Field(name = "std_dev", type = FieldType.Double) private BigDecimal stdDev; - @Field(name = "concept", includeInParent = true, type = FieldType.Nested) + @Field(name = "concept", type = FieldType.Nested) private ConceptDto concept; - @Field(name = "unit", includeInParent = true, type = FieldType.Nested) + @Field(name = "unit", type = FieldType.Nested) private UnitDto unit; @NotNull @@ -131,11 +144,11 @@ public class ColumnDto { @Schema(example = "false") private Boolean isNullAllowed; - @Field(name = "enums", includeInParent = true, type = FieldType.Nested) + @Field(name = "enums", type = FieldType.Nested) @Parameter(description = "enum values, only considered when type = ENUM") private List<String> enums; - @Field(name = "sets", includeInParent = true, type = FieldType.Nested) + @Field(name = "sets", type = FieldType.Nested) @Parameter(description = "enum values, only considered when type = ENUM") private List<String> sets; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java index 510bf07b9c31cd61e4bdfca0e8846f4365257483..7807ada00562a10e7395b203cbef87cee1a326c5 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java @@ -23,7 +23,6 @@ import java.util.List; @AllArgsConstructor @Jacksonized @ToString -@Document(indexName = "concept") public class ConceptDto { @Id diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java index 22324547e8834ac371bf3c064d6536ed94f706b6..de6b20b6777280281d9d3b1b930a2fc748617f04 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java @@ -23,7 +23,6 @@ import java.util.List; @AllArgsConstructor @Jacksonized @ToString -@Document(indexName = "unit") public class UnitDto { @Id diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsDto.java index 72f6a07ef82bcf6b20b1d6f44f98d40f2c48581b..6c5b703634cce81fbbe0c2add8d8231792b4da29 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsDto.java @@ -19,13 +19,12 @@ import java.util.List; @ToString public class ConstraintsDto { - @Field(name = "uniques", includeInParent = true, type = FieldType.Nested) + @Field(name = "uniques", type = FieldType.Nested) private List<UniqueDto> uniques; @JsonProperty("foreign_keys") - @Field(name = "foreign_keys", includeInParent = true, type = FieldType.Nested) + @Field(name = "foreign_keys", type = FieldType.Nested) private List<ForeignKeyDto> foreignKeys; - @Field(name = "checks", includeInParent = true, type = FieldType.Nested) private List<String> checks; } diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyDto.java index db46b0acaabf7641452239f3a7732d6903acbf15..bcc3c6d8d139aacb3e831a2e03a3025aff7bdd88 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyDto.java @@ -31,10 +31,10 @@ public class ForeignKeyDto { private List<ColumnDto> referencedColumns; @JsonProperty("on_update") - @Field(name = "on_update", includeInParent = true, type = FieldType.Keyword) + @Field(name = "on_update", type = FieldType.Keyword) private ReferenceTypeDto onUpdate; @JsonProperty("on_delete") - @Field(name = "on_delete", includeInParent = true, type = FieldType.Keyword) + @Field(name = "on_delete", type = FieldType.Keyword) private ReferenceTypeDto onDelete; } diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java index 5ca9919aa65126ce362a4a47c5cc96624eb6349d..aee2e3281efdfe881a917e7ec0b002fcb3b6b3fd 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java @@ -27,7 +27,6 @@ import java.util.List; @AllArgsConstructor @Jacksonized @ToString -@Document(indexName = "identifier") public class IdentifierDto { @Id @@ -45,6 +44,11 @@ public class IdentifierDto { @Field(name = "query_id", type = FieldType.Keyword) private Long queryId; + @JsonProperty("table_id") + @Schema(example = "1") + @Field(name = "table_id", type = FieldType.Keyword) + private Long tableId; + @JsonProperty("view_id") @Schema(example = "1") @Field(name = "view_id", type = FieldType.Keyword) @@ -54,13 +58,13 @@ public class IdentifierDto { @Field(name = "type", type = FieldType.Keyword) private IdentifierTypeDto type; - @Field(name = "titles", includeInParent = true, type = FieldType.Nested) + @Field(name = "titles", type = FieldType.Nested) private List<IdentifierTitleDto> titles; - @Field(name = "descriptions", includeInParent = true, type = FieldType.Nested) + @Field(name = "descriptions", type = FieldType.Nested) private List<IdentifierDescriptionDto> descriptions; - @Field(name = "funders", includeInParent = true, type = FieldType.Nested) + @Field(name = "funders", type = FieldType.Nested) private List<IdentifierFunderDto> funders; @NotBlank @@ -75,13 +79,9 @@ public class IdentifierDto { private String queryNormalized; @JsonProperty("related_identifiers") - @Field(name = "related_identifiers", includeInParent = true, type = FieldType.Nested) + @Field(name = "related_identifiers", type = FieldType.Nested) private List<RelatedIdentifierDto> relatedIdentifiers; - @NotNull - @org.springframework.data.annotation.Transient - private DatabaseDto database; - @NotBlank @JsonProperty("query_hash") @Schema(description = "query hash in sha512") @@ -106,11 +106,6 @@ public class IdentifierDto { @Schema(example = "1") private Long resultNumber; - @NotNull - @Schema(example = "everyone") - @Field(name = "visibility", type = FieldType.Keyword) - private VisibilityTypeDto visibility; - @Schema(example = "10.1038/nphys1170") @Field(name = "doi", type = FieldType.Keyword) private String doi; @@ -143,11 +138,11 @@ public class IdentifierDto { @Field(name = "language", type = FieldType.Keyword) private LanguageTypeDto language; - @Field(name = "licenses", includeInParent = true, type = FieldType.Nested) + @Field(name = "licenses", type = FieldType.Nested) private List<LicenseDto> licenses; @NotNull - @Field(name = "creators", includeInParent = true, type = FieldType.Nested) + @Field(name = "creators", type = FieldType.Nested) private List<CreatorDto> creators; @NotNull diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveDto.java index 51ce1286c9f3e3af7ff87239e4f95b6556d9adc0..084b783eb96f087f0382ee07be1c69ae5e810b70 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveDto.java @@ -33,6 +33,10 @@ public class IdentifierSaveDto { @Schema(example = "null") private Long viewId; + @JsonProperty("table_id") + @Schema(example = "null") + private Long tableId; + @NotNull @Schema(example = "database") private IdentifierTypeDto type; @@ -45,10 +49,6 @@ public class IdentifierSaveDto { private List<LicenseDto> licenses; - @NotNull - @Schema(example = "everyone") - private VisibilityTypeDto visibility; - @JsonProperty("publication_day") @Schema(example = "15") private Integer publicationDay; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierTypeDto.java index 0f8e94cc952640e9e5c750ab643eca4b6e55cf1c..19660e324d3f4e388135691662d74c048f684826 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierTypeDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierTypeDto.java @@ -12,6 +12,9 @@ public enum IdentifierTypeDto { @JsonProperty("subset") SUBSET("subset"), + @JsonProperty("table") + TABLE("table"), + @JsonProperty("view") VIEW("view"); diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/VisibilityTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/VisibilityTypeDto.java deleted file mode 100644 index 19a913c61294907f4ffd65260cc616aebad8d260..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/VisibilityTypeDto.java +++ /dev/null @@ -1,26 +0,0 @@ -package at.tuwien.api.identifier; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.ToString; - -@Getter -public enum VisibilityTypeDto { - - @JsonProperty("everyone") - EVERYONE("everyone"), - - @JsonProperty("self") - SELF("self"); - - private String name; - - VisibilityTypeDto(String name) { - this.name = name; - } - - @Override - public String toString() { - return this.name; - } -} \ No newline at end of file diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java index 02ecfe55846d2ba0fc562d87a037b05b6dd1e5ae..3ef24c16c1d23c221b44b6148d1833cbe50b6c52 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java @@ -21,7 +21,6 @@ import java.util.UUID; @Jacksonized @ToString @EqualsAndHashCode(onlyExplicitlyIncluded = true) -@Document(indexName = "user") public class UserDto { @Id @@ -56,7 +55,6 @@ public class UserDto { private String lastname; @NotNull - @Field(name = "attributes", includeInParent = true, type = FieldType.Nested) private UserAttributesDto attributes; @NotNull diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java index 82b646e3adbb682e1b6629f85afbb6efbeecdcee..f3722b79130165ae9f3aa3e33dbcc17bc926399d 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java @@ -2,6 +2,7 @@ package at.tuwien.entities.container; import at.tuwien.entities.container.image.ContainerImage; import at.tuwien.entities.database.Database; +import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.GenericGenerator; @@ -21,6 +22,10 @@ import java.util.List; @EntityListeners(AuditingEntityListener.class) @EqualsAndHashCode(onlyExplicitlyIncluded = true) @Table(name = "mdb_containers") +@NamedQueries({ + @NamedQuery(name = "Container.findDefaultTimestampFormat", query = "select d from ContainerImageDate d where d.hasTime = true order by d.id limit 1"), + @NamedQuery(name = "Container.findDefaultDateFormat", query = "select d from ContainerImageDate d where d.hasTime = false order by d.id limit 1"), +}) public class Container { @Id @@ -36,9 +41,6 @@ public class Container { @Column(nullable = false) private String internalName; - @Column(name = "image_id", nullable = false, updatable = false) - private Long imageId; - @Column(nullable = false) private String host; @@ -68,16 +70,15 @@ public class Container { }) private List<Database> databases; - @ToString.Exclude - @org.springframework.data.annotation.Transient - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY, optional = false, cascade = {CascadeType.MERGE, CascadeType.PERSIST}) @JoinColumns({ - @JoinColumn(name = "image_id", referencedColumnName = "id", insertable = false, updatable = false) + @JoinColumn(name = "image_id", referencedColumnName = "id") }) private ContainerImage image; @CreatedDate - @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant created; @LastModifiedDate diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java index 7a1dfb9f0cf0f51d5ea368b1bdd2aec89dbee096..0b98e5d02f67c5090f9b7574aebc42910173aa7a 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java @@ -1,9 +1,12 @@ package at.tuwien.entities.container.image; import at.tuwien.entities.container.Container; +import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; @@ -19,6 +22,7 @@ import java.util.List; @NoArgsConstructor @EntityListeners(AuditingEntityListener.class) @EqualsAndHashCode(onlyExplicitlyIncluded = true) +@OnDelete(action = OnDeleteAction.CASCADE) @Table(name = "mdb_images", uniqueConstraints = @UniqueConstraint(columnNames = {"name", "version"})) public class ContainerImage { @@ -47,16 +51,16 @@ public class ContainerImage { @Column(nullable = false) private Integer defaultPort; - @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST}, mappedBy = "image") + @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.ALL}, mappedBy = "image") // ALL = cascade save + delete private List<ContainerImageDate> dateFormats; @ToString.Exclude - @org.springframework.data.annotation.Transient @OneToMany(fetch = FetchType.LAZY, mappedBy = "image") private List<Container> containers; @CreatedDate - @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant created; @LastModifiedDate diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java index d2198be3eacf3d65131cd327869cd2e3f40841b2..c40da7b077d1443c2e9c4bf22bc60ea27ded28dc 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java @@ -4,10 +4,9 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.*; import org.hibernate.annotations.GenericGenerator; import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import jakarta.persistence.*;; +import jakarta.persistence.*; import java.time.Instant; @Data @@ -32,7 +31,6 @@ public class ContainerImageDate { private Long iid; @ToString.Exclude - @org.springframework.data.annotation.Transient @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "iid", insertable = false, updatable = false) private ContainerImage image; @@ -40,22 +38,18 @@ public class ContainerImageDate { @Column(name = "example", nullable = false) private String example; - @Field(name = "has_time") @Column(name = "has_time", nullable = false) private Boolean hasTime; - @Field(name = "database_format") @Column(name = "database_format", nullable = false) private String databaseFormat; - @Field(name = "unix_format") @Column(name = "unix_format", nullable = false) private String unixFormat; @CreatedDate - @Field(name = "created_at") - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") @Column(name = "created_at", nullable = false, updatable = false, columnDefinition = "TIMESTAMP") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant createdAt; } diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java index e3e4eccc1c760640753f6a7bb2e43b13d6eb72d7..8a1f869a0e47db18c48cffd9c826542611960577 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java @@ -4,15 +4,16 @@ import at.tuwien.entities.container.Container; import at.tuwien.entities.database.table.Table; import at.tuwien.entities.identifier.Identifier; import at.tuwien.entities.user.User; +import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.persistence.CascadeType; import jakarta.persistence.*; import jakarta.persistence.NamedQueries; import jakarta.persistence.NamedQuery; +import jakarta.persistence.OrderBy; import lombok.*; import org.hibernate.annotations.*; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.io.Serializable; @@ -32,13 +33,14 @@ import java.util.UUID; }) @NamedQueries({ @NamedQuery(name = "Database.findAll", query = "select d from Database d order by d.created desc"), + @NamedQuery(name = "Database.findByInternalName", query = "select d from Database d where d.internalName = ?1"), + @NamedQuery(name = "Database.findAllOnlyIds", query = "select d.id from Database d order by d.created desc"), @NamedQuery(name = "Database.findReadAccess", query = "select distinct d from Database d join DatabaseAccess a on a.hdbid = d.id and a.huserid = ?1"), @NamedQuery(name = "Database.findWriteAccess", query = "select distinct d from Database d join DatabaseAccess a on a.hdbid = d.id and a.huserid = ?1 where a.type = 'WRITE_OWN' or a.type = 'WRITE_ALL'"), @NamedQuery(name = "Database.findConfigureAccess", query = "select distinct d from Database d where d.ownedBy = ?1"), @NamedQuery(name = "Database.findPublicOrMine", query = "select distinct d from Database d where d.id = ?1 and (d.isPublic = true or d.ownedBy = ?2)"), @NamedQuery(name = "Database.findPublic", query = "select distinct d from Database d where d.isPublic = true and d.id = ?1"), }) -@Document(indexName = "database") public class Database implements Serializable { @Id @@ -73,8 +75,7 @@ public class Database implements Serializable { @Column(nullable = false) private Long cid; - @org.springframework.data.annotation.Transient - @ManyToOne(cascade = CascadeType.PERSIST) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "cid", referencedColumnName = "id", insertable = false, updatable = false) }) @@ -104,35 +105,35 @@ public class Database implements Serializable { private User contact; @ToString.Exclude - @org.springframework.data.annotation.Transient - @OneToOne(fetch = FetchType.LAZY) - @JoinColumnsOrFormulas({ - @JoinColumnOrFormula(column = @JoinColumn(name = "id", referencedColumnName = "dbid", insertable = false, updatable = false)), - @JoinColumnOrFormula(formula = @JoinFormula(referencedColumnName = "identifier_type", value = "'DATABASE'")) - }) - private Identifier identifier; + @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST}, mappedBy = "database") + @Where(clause = "identifier_type='DATABASE'") + @OrderBy("id DESC") + private List<Identifier> identifiers; @ToString.Exclude - @org.springframework.data.annotation.Transient - @OneToMany(fetch = FetchType.LAZY) - @JoinColumns({ - @JoinColumn(name = "tdbid", referencedColumnName = "id", insertable = false, updatable = false) - }) + @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST}, mappedBy = "database") + @Where(clause = "identifier_type='SUBSET'") + @OrderBy("id DESC") + private List<Identifier> subsets; + + @ToString.Exclude + @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST}, mappedBy = "database", orphanRemoval = true) private List<Table> tables; @ToString.Exclude - @org.springframework.data.annotation.Transient - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) - @JoinColumns({ - @JoinColumn(name = "vdbid", referencedColumnName = "id", insertable = false, updatable = false) - }) + @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST}, mappedBy = "database", orphanRemoval = true) private List<View> views; + @ToString.Exclude + @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST}, mappedBy = "database", orphanRemoval = true) + private List<DatabaseAccess> accesses; + @Column(nullable = false) private Boolean isPublic; @CreatedDate - @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant created; @LastModifiedDate diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java index 8492ee757feffab1f0045ccf2bbe004081042bc1..27a35c0284139c540789c9c0ca91a313ab298bf1 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java @@ -1,12 +1,14 @@ package at.tuwien.entities.database; import at.tuwien.entities.user.User; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.*; import org.hibernate.annotations.JdbcTypeCode; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import jakarta.persistence.*;; +import jakarta.persistence.*; + import java.time.Instant; import java.util.UUID; @@ -20,19 +22,19 @@ import java.util.UUID; @EntityListeners(AuditingEntityListener.class) @Table(name = "mdb_have_access") @NamedQueries({ - @NamedQuery(name ="DatabaseAccess.findByDatabaseId", query = "select a from DatabaseAccess a where a.hdbid = ?1"), - @NamedQuery(name ="DatabaseAccess.findByDatabaseIdAndUserId", query = "select a from DatabaseAccess a where a.hdbid = ?1 and a.huserid = ?2") + @NamedQuery(name = "DatabaseAccess.findByDatabaseId", query = "select a from DatabaseAccess a where a.hdbid = ?1"), + @NamedQuery(name = "DatabaseAccess.findByDatabaseIdAndUserId", query = "select a from DatabaseAccess a where a.hdbid = ?1 and a.huserid = ?2") }) public class DatabaseAccess { @Id - @EqualsAndHashCode.Include @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "user_id", updatable = false, columnDefinition = "VARCHAR(36)") private UUID huserid; + @ToString.Exclude @org.springframework.data.annotation.Transient - @ManyToOne(cascade = CascadeType.PERSIST) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "user_id", referencedColumnName = "ID", insertable = false, updatable = false) }) @@ -43,19 +45,32 @@ public class DatabaseAccess { @Column(name = "database_id", updatable = false) private Long hdbid; + @ToString.Exclude @org.springframework.data.annotation.Transient - @ManyToOne(cascade = CascadeType.PERSIST) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "database_id", referencedColumnName = "id", insertable = false, updatable = false) }) private Database database; - @Column(nullable = false, name = "access_type", columnDefinition = "enum('READ', 'WRITE_OWN', 'WRITE_ALL')") @Enumerated(EnumType.STRING) + @Column(nullable = false, name = "access_type", columnDefinition = "enum('READ', 'WRITE_OWN', 'WRITE_ALL')") private AccessType type; - @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") @CreatedDate + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant created; + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (!(o instanceof DatabaseAccess other)) { + return false; + } + return this.hdbid.equals(other.getHdbid()) && this.huserid.equals(other.getHuserid()); + } + } diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/License.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/License.java index 8591b36ea4daeeaee3f7d5b2aca1fef1fec153ab..c189021d2885743f0aec2fe88a0f2cf05f8f2421 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/License.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/License.java @@ -5,7 +5,6 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; import jakarta.persistence.*; - @Data @Entity @Builder diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java index 569ae61ea7100f246f85da3ac3cabe5f8f4d589f..c5540ecf897559e5739da2940433534cc59a1c61 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java @@ -2,17 +2,18 @@ package at.tuwien.entities.database; import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.entities.identifier.Identifier; +import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.persistence.*; import jakarta.persistence.CascadeType; import jakarta.persistence.NamedQueries; import jakarta.persistence.NamedQuery; +import jakarta.persistence.OrderBy; import jakarta.persistence.Table; import lombok.*; import net.sf.jsqlparser.statement.select.FromItem; import org.hibernate.annotations.*; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.time.Instant; @@ -36,33 +37,29 @@ import java.util.UUID; public class View { @Id + @org.springframework.data.annotation.Id @EqualsAndHashCode.Include @GeneratedValue(generator = "views-sequence") @GenericGenerator(name = "views-sequence", strategy = "increment") @Column(updatable = false, nullable = false) private Long id; - @Field(name = "database_id") @Column(updatable = false, nullable = false) private Long vdbid; @JdbcTypeCode(java.sql.Types.VARCHAR) - @Field(name = "created_by") @Column(name = "createdBy", nullable = false, columnDefinition = "VARCHAR(36)") private UUID createdBy; @Column(name = "vname", nullable = false) private String name; - @Field(name = "internal_name") @Column(nullable = false) private String internalName; - @Field(name = "is_public") @Column(name = "public", nullable = false) private Boolean isPublic; - @Field(name = "is_initial_view") @Column(name = "initialview", nullable = false) private Boolean isInitialView; @@ -74,20 +71,22 @@ public class View { @ToString.Exclude @org.springframework.data.annotation.Transient - @ManyToOne(fetch = FetchType.LAZY) + @OneToMany(fetch = FetchType.LAZY) @JoinColumns({ - @JoinColumn(name = "vdbid", referencedColumnName = "id", insertable = false, updatable = false) + @JoinColumn(name = "vid", referencedColumnName = "id", insertable = false, updatable = false), + @JoinColumn(name = "dbid", referencedColumnName = "vdbid", insertable = false, updatable = false) }) - private Database database; + @Where(clause = "identifier_type='VIEW'") + @OrderBy("id DESC") + private List<Identifier> identifiers; @ToString.Exclude @org.springframework.data.annotation.Transient - @OneToOne(fetch = FetchType.LAZY) - @JoinColumnsOrFormulas({ - @JoinColumnOrFormula(column = @JoinColumn(name = "id", referencedColumnName = "vid", insertable = false, updatable = false)), - @JoinColumnOrFormula(formula = @JoinFormula(referencedColumnName = "identifier_type", value = "'VIEW'")) + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumns({ + @JoinColumn(name = "vdbid", referencedColumnName = "id", insertable = false, updatable = false) }) - private Identifier identifier; + private Database database; /** * KEEP THIS FUNCTION HERE! IT WILL BREAK CODE! @@ -120,11 +119,11 @@ public class View { private List<TableColumn> columns; @CreatedDate - @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant created; @LastModifiedDate - @Field(name = "last_modified") @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/Table.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/Table.java index fe6edc3e4f8f5fcb06011bc0d9ef0fc694c4f094..5ada0ba03bf50c5e844b9b69cc2a459b4dba0403 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/Table.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/Table.java @@ -1,20 +1,24 @@ package at.tuwien.entities.database.table; -import at.tuwien.entities.database.Database; +import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.entities.database.table.constraints.Constraints; +import at.tuwien.entities.database.Database; +import at.tuwien.entities.identifier.Identifier; import at.tuwien.entities.user.User; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.*; import lombok.extern.log4j.Log4j2; import net.sf.jsqlparser.statement.select.FromItem; import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.JdbcTypeCode; +import org.hibernate.annotations.Where; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import jakarta.persistence.*;; +import jakarta.persistence.*; + import java.time.Instant; import java.util.List; import java.util.UUID; @@ -37,7 +41,6 @@ public class Table { @Column(name = "ID", updatable = false, nullable = false) private Long id; - @Field(name = "database_id") @Column(updatable = false, nullable = false) private Long tdbid; @@ -46,8 +49,7 @@ public class Table { private UUID createdBy; @ToString.Exclude - @org.springframework.data.annotation.Transient - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE}) @JoinColumns({ @JoinColumn(name = "created_by", referencedColumnName = "ID", insertable = false, updatable = false) }) @@ -59,8 +61,7 @@ public class Table { private UUID ownedBy; @ToString.Exclude - @org.springframework.data.annotation.Transient - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE}) @JoinColumns({ @JoinColumn(name = "owned_by", referencedColumnName = "ID", insertable = false, updatable = false) }) @@ -69,15 +70,12 @@ public class Table { @Column(name = "tname", nullable = false) private String name; - @Field(name = "internal_name") @Column(nullable = false) private String internalName; - @Field(name = "queue_name") @Column(name = "queue_name", nullable = false, updatable = false) private String queueName; - @Field(name = "routing_key") @Column(name = "routing_key", nullable = false, updatable = false) private String routingKey; @@ -85,7 +83,8 @@ public class Table { private String description; @ToString.Exclude - @ManyToOne(fetch = FetchType.LAZY) + @org.springframework.data.annotation.Transient + @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE}) @JoinColumns({ @JoinColumn(name = "tdbid", referencedColumnName = "id", insertable = false, updatable = false) }) @@ -95,21 +94,55 @@ public class Table { @OrderBy("ordinalPosition") private List<TableColumn> columns; + @ToString.Exclude + @org.springframework.data.annotation.Transient + @OneToMany(fetch = FetchType.LAZY) + @JoinColumns({ + @JoinColumn(name = "tid", referencedColumnName = "id", insertable = false, updatable = false), + @JoinColumn(name = "dbid", referencedColumnName = "tdbid", insertable = false, updatable = false) + }) + @Where(clause = "identifier_type='TABLE'") + @OrderBy("id DESC") + private List<Identifier> identifiers; + @Embedded private Constraints constraints; @Column(name = "versioned", columnDefinition = "boolean default true") private Boolean isVersioned; + @Column(name = "num_rows") + private Long numRows; + + @Column(name = "data_length") + private Long dataLength; + + @Column(name = "max_data_length") + private Long maxDataLength; + + @Column(name = "avg_row_length") + private Long avgRowLength; + @CreatedDate @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant created; @LastModifiedDate - @Field(name = "last_modified") @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (!(o instanceof Table other)) { + return false; + } + return this.id.equals(other.getId()); + } + /** * KEEP THIS FUNCTION HERE! IT WILL BREAK CODE! * Custom equality function implementation. diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java index 552fbd332588a5ecf8aac44a7872794102ada544..0ba70fbd4a5331be6bab983701bec75b94b854a4 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java @@ -3,6 +3,7 @@ package at.tuwien.entities.database.table.columns; import at.tuwien.entities.container.image.ContainerImageDate; import at.tuwien.entities.database.View; import at.tuwien.entities.database.table.Table; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.*; import org.hibernate.annotations.GenericGenerator; import org.springframework.data.annotation.CreatedDate; @@ -38,18 +39,20 @@ public class TableColumn implements Comparable<TableColumn> { private Long id; @ToString.Exclude - @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE}) @JoinColumn(name = "dfid", referencedColumnName = "id") private ContainerImageDate dateFormat; @ToString.Exclude - @ManyToOne(fetch = FetchType.LAZY) + @org.springframework.data.annotation.Transient + @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE}) @JoinColumns({ @JoinColumn(name = "tID", referencedColumnName = "id", nullable = false) }) private Table table; @ToString.Exclude + @org.springframework.data.annotation.Transient @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE, mappedBy = "columns") private List<View> views; @@ -66,7 +69,7 @@ public class TableColumn implements Comparable<TableColumn> { private Boolean isPrimaryKey; @Column - private Integer indexLength; + private Long indexLength; @Column private String alias; @@ -76,7 +79,7 @@ public class TableColumn implements Comparable<TableColumn> { private TableColumnType columnType; @Column - private Integer length; + private Long length; @Column(nullable = false, columnDefinition = "BOOLEAN default true") private Boolean isNullAllowed; @@ -84,8 +87,9 @@ public class TableColumn implements Comparable<TableColumn> { @Column(nullable = false) private Integer ordinalPosition; - @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()") @CreatedDate + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant created; @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST}) @@ -111,10 +115,10 @@ public class TableColumn implements Comparable<TableColumn> { private List<String> sets; @Column - private Integer size; + private Long size; @Column - private Integer d; + private Long d; @Column(name = "val_min") private BigDecimal valMin; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java index d866060e203c13d9bcf8bca1614fc43561ad4af6..59bc17e8bfd52202d6a0a11b71ded7268c5065dc 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java @@ -1,5 +1,6 @@ package at.tuwien.entities.database.table.columns; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.*; import org.hibernate.annotations.GenericGenerator; import org.springframework.data.annotation.CreatedDate; @@ -43,8 +44,9 @@ public class TableColumnConcept { @Column(columnDefinition = "TEXT") private String description; - @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") @CreatedDate + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant created; @ToString.Exclude diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java index 66f24b2ad283fef5d888a30e631411e958b9ec62..6204722d1864b1b69668bdd20cbff71c2c21ad42 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java @@ -1,5 +1,6 @@ package at.tuwien.entities.database.table.columns; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.*; import org.hibernate.annotations.GenericGenerator; import org.springframework.data.annotation.CreatedDate; @@ -43,8 +44,9 @@ public class TableColumnUnit { @Column(columnDefinition = "TEXT") private String description; - @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") @CreatedDate + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant created; @ToString.Exclude diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java index 7feb207f7b79909ff1201f973845e891853618c7..2ec4f2ba5d7913cdca0a14b298773571976bfec7 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java @@ -26,16 +26,16 @@ public class ForeignKey { @Column(updatable = false, nullable = false) private Long fkid; - @org.springframework.data.annotation.Transient @ToString.Exclude + @org.springframework.data.annotation.Transient @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) @JoinColumns({ @JoinColumn(name = "tid", referencedColumnName = "id", nullable = false) }) private Table table; - @org.springframework.data.annotation.Transient @ToString.Exclude + @org.springframework.data.annotation.Transient @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) @JoinColumns({ @JoinColumn(name = "rtid", referencedColumnName = "id", nullable = false) diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java index a9282d49db0b8a379126d88a8eb48a74e5b01309..8cdebed830bdc4bb940002db92d49a0a4262ead4 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java @@ -21,14 +21,14 @@ import java.util.List; public class Unique { @Id + @EqualsAndHashCode.Include @GeneratedValue(generator = "constraints-unique-sequence") @GenericGenerator(name = "constraints-unique-sequence", strategy = "increment") @Column(updatable = false, nullable = false) - @EqualsAndHashCode.Include private Long uid; - @org.springframework.data.annotation.Transient @ToString.Exclude + @org.springframework.data.annotation.Transient @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) @JoinColumns({ @JoinColumn(name = "tid", referencedColumnName = "id") diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Creator.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Creator.java index d3a3e372d0cd110a9fadf6973c8f9197f237407a..f2452ac5598bce48c155a107038b931f7aeecdbd 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Creator.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Creator.java @@ -17,6 +17,7 @@ import jakarta.persistence.*; public class Creator { @Id + @org.springframework.data.annotation.Id @EqualsAndHashCode.Include @GeneratedValue(generator = "creators-sequence") @GenericGenerator(name = "creators-sequence", strategy = "increment") diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java index df3ee6fff9b9dc93d0b7526af5d8abe4f698aab5..0fb92413730f379f336faa5b514092919be0126f 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java @@ -3,14 +3,18 @@ package at.tuwien.entities.identifier; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.LanguageType; import at.tuwien.entities.database.License; +import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.persistence.*; +import jakarta.persistence.CascadeType; +import jakarta.persistence.NamedQueries; +import jakarta.persistence.NamedQuery; +import jakarta.persistence.OrderBy; +import jakarta.persistence.Table; import jakarta.validation.constraints.NotBlank; import lombok.*; -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.JdbcTypeCode; +import org.hibernate.annotations.*; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.io.Serializable; @@ -48,10 +52,13 @@ public class Identifier implements Serializable { @Column(name = "qid") private Long queryId; + @Column(name = "tid") + private Long tableId; + @Column(name = "vid") private Long viewId; - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "identifier") + @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST}, mappedBy = "identifier") @OrderBy("id") private List<Creator> creators; @@ -63,15 +70,15 @@ public class Identifier implements Serializable { @Enumerated(EnumType.STRING) private LanguageType language; - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "identifier") + @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST}, mappedBy = "identifier") @OrderBy("id") private List<IdentifierTitle> titles; - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "identifier") + @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST}, mappedBy = "identifier") @OrderBy("id") private List<IdentifierDescription> descriptions; - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "identifier") + @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST}, mappedBy = "identifier") @OrderBy("id") private List<IdentifierFunder> funders; @@ -83,57 +90,46 @@ public class Identifier implements Serializable { ) private List<License> licenses; - @Column(name = "identifier_type", nullable = false, columnDefinition = "enum('SUBSET', 'DATABASE', 'VIEW')") + @Column(name = "identifier_type", nullable = false, columnDefinition = "enum('SUBSET', 'DATABASE', 'VIEW', 'TABLE')") @Enumerated(EnumType.STRING) private IdentifierType type; @Column(columnDefinition = "TEXT") private String query; - @Field(name = "query_normalized") @Column(columnDefinition = "TEXT") private String queryNormalized; - @Field(name = "query_hash") @Column private String queryHash; - @Field(name = "result_hash") @Column private String resultHash; - @Column(updatable = false, columnDefinition = "TIMESTAMP") + @Column(updatable = false, columnDefinition = "TIMESTAMP default NOW()") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") private Instant execution; - @Field(name = "result_number") @Column private Long resultNumber; - @Field(name = "publication_year") @Column(nullable = false) private Integer publicationYear; - @Field(name = "publication_month") @Column private Integer publicationMonth; - @Field(name = "publication_day") @Column private Integer publicationDay; - @Column(nullable = false, columnDefinition = "enum('EVERYONE', 'SELF')") - @Enumerated(EnumType.STRING) - private VisibilityType visibility; - @ToString.Exclude @org.springframework.data.annotation.Transient - @OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE}) + @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE}) @JoinColumns({ @JoinColumn(name = "dbid", referencedColumnName = "id", insertable = false, updatable = false) }) private Database database; - @Field(name = "related_identifiers") @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "identifier") @OrderBy("id") private List<RelatedIdentifier> relatedIdentifiers; @@ -142,18 +138,27 @@ public class Identifier implements Serializable { private String doi; @JdbcTypeCode(java.sql.Types.VARCHAR) - @Column(name = "createdBy", nullable = false, columnDefinition = "VARCHAR(36)") private UUID createdBy; @CreatedDate - @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()") private Instant created; @LastModifiedDate - @Field(name = "last_modified") @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (!(o instanceof Identifier other)) { + return false; + } + return this.id.equals(other.getId()); + } + } diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierDescription.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierDescription.java index 26b88690637d34cc81b135550ab191c8a108a414..17376c1cb6b43e5960a33d16d4b9f29c689790b7 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierDescription.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierDescription.java @@ -4,7 +4,6 @@ import at.tuwien.entities.database.LanguageType; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.GenericGenerator; -import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.io.Serializable; @@ -20,6 +19,7 @@ import java.io.Serializable; public class IdentifierDescription implements Serializable { @Id + @org.springframework.data.annotation.Id @EqualsAndHashCode.Include @GeneratedValue(generator = "identifier-descriptions-sequence") @GenericGenerator(name = "identifier-descriptions-sequence", strategy = "increment") @@ -29,7 +29,6 @@ public class IdentifierDescription implements Serializable { @Column(nullable = false, columnDefinition = "TEXT") private String description; - @Field(name = "description_type") @Column(columnDefinition = "enum('ABSTRACT', 'METHODS', 'SERIES_INFORMATION', 'TABLE_OF_CONTENTS', 'TECHNICAL_INFO', 'OTHER')") @Enumerated(EnumType.STRING) private DescriptionType descriptionType; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunder.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunder.java index 65a7b9fdc26e686d1a60d7f92e82a955658a4c2c..21977c19a9be256817b8966a472d1c90215d0e2c 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunder.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunder.java @@ -3,7 +3,6 @@ package at.tuwien.entities.identifier; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.GenericGenerator; -import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.io.Serializable; @@ -25,28 +24,22 @@ public class IdentifierFunder implements Serializable { @Column(updatable = false, nullable = false) private Long id; - @Field(name = "funder_name") @Column(nullable = false) private String funderName; - @Field(name = "funder_identifier") @Column(columnDefinition = "TEXT") private String funderIdentifier; - @Field(name = "funder_identifier_type") @Column(name="funder_identifier_type", columnDefinition = "enum('CROSSREF_FUNDER_ID', 'ROR', 'GND', 'ISNI', 'OTHER')") @Enumerated(EnumType.STRING) private IdentifierFunderType funderIdentifierType; - @Field(name = "scheme_uri") @Column(columnDefinition = "TEXT") private String schemeUri; - @Field(name = "award_number") @Column private String awardNumber; - @Field(name = "award_title") @Column(columnDefinition = "TEXT") private String awardTitle; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierTitle.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierTitle.java index 1f487772eee81787e4f156f9c5f3be42c8b70178..c5a62974b0e6b1788a7838dcb6623a446f53d1e2 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierTitle.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierTitle.java @@ -4,7 +4,6 @@ import at.tuwien.entities.database.LanguageType; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.GenericGenerator; -import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.io.Serializable; @@ -29,7 +28,6 @@ public class IdentifierTitle implements Serializable { @Column(nullable = false, columnDefinition = "TEXT") private String title; - @Field(name = "title_type") @Column(columnDefinition = "enum('ALTERNATIVE_TITLE', 'SUBTITLE', 'TRANSLATED_TITLE', 'OTHER')") @Enumerated(EnumType.STRING) private TitleType titleType; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierType.java index c7032d2cf89beeb5576786f712038ab3fb34bfde..51e2f01ef63a62feea3a6d77e12c42776393d6c7 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierType.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierType.java @@ -6,5 +6,6 @@ import lombok.Getter; public enum IdentifierType { DATABASE, SUBSET, + TABLE, VIEW; } diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/VisibilityType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/VisibilityType.java deleted file mode 100644 index 3565740c6b2042fd4fdb003e68a19f369710efcf..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/VisibilityType.java +++ /dev/null @@ -1,11 +0,0 @@ -package at.tuwien.entities.identifier; - -import lombok.Getter; -import lombok.ToString; - -@Getter -@ToString -public enum VisibilityType { - EVERYONE, - SELF; -} \ No newline at end of file diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java index 428f3162df16c46ff099f5c237e334bac8b8ba06..fff84eb51c01701570686d2ecfed68b1dc620a1d 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java @@ -21,6 +21,7 @@ import java.util.UUID; @Table(name = "mdb_ontologies") @NamedQueries({ @NamedQuery(name = "Ontology.findAll", query = "select o from Ontology o order by sparqlEndpoint desc"), + @NamedQuery(name = "Ontology.findAllProcessable", query = "select o from Ontology o where o.sparqlEndpoint != null or o.rdfPath != null order by sparqlEndpoint desc"), }) public class Ontology { diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/User.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/User.java index d17c41df07e0467c58b30afc7fcaef9bc4229ad0..73a1ff1674601649981e5df22b944ac6391e797b 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/User.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/User.java @@ -48,7 +48,6 @@ public class User { private String affiliation; @ToString.Exclude - @org.springframework.data.annotation.Transient @OneToMany(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "user_id", referencedColumnName = "ID", insertable = false, updatable = false) diff --git a/dbrepo-metadata-service/pom.xml b/dbrepo-metadata-service/pom.xml index 060a6b2f93e7aa15bb4d045dd2ce6fc11ecfb45f..4c8525eb7f4bfe2d276bdb27dcbab17d2c21688a 100644 --- a/dbrepo-metadata-service/pom.xml +++ b/dbrepo-metadata-service/pom.xml @@ -364,6 +364,7 @@ <exclude>at/tuwien/mapper/**/*</exclude> <exclude>at/tuwien/handlers/**/*</exclude> <exclude>at/tuwien/exception/**/*</exclude> + <exclude>at/tuwien/converters/**/*</exclude> <exclude>at/tuwien/utils/**/*</exclude> <exclude>at/tuwien/config/**/*</exclude> <exclude>at/tuwien/auth/**/*</exclude> diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseUnchangedException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseUnchangedException.java new file mode 100644 index 0000000000000000000000000000000000000000..38ba4ed83d9197cd6843a97909bb45235651db82 --- /dev/null +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseUnchangedException.java @@ -0,0 +1,23 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +import java.io.IOException; + +@ResponseStatus(code = HttpStatus.NO_CONTENT) +public class DatabaseUnchangedException extends IOException { + + public DatabaseUnchangedException(String msg) { + super(msg); + } + + public DatabaseUnchangedException(String msg, Throwable thr) { + super(msg + ": " + thr.getLocalizedMessage(), thr); + } + + public DatabaseUnchangedException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/OntologyInvalidException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/OntologyInvalidException.java new file mode 100644 index 0000000000000000000000000000000000000000..80a902ab8a73daa7df7b74b1478a0e698cfece52 --- /dev/null +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/OntologyInvalidException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.UNPROCESSABLE_ENTITY) +public class OntologyInvalidException extends Exception { + + public OntologyInvalidException(String msg) { + super(msg); + } + + public OntologyInvalidException(String msg, Throwable thr) { + super(msg + ": " + thr.getLocalizedMessage(), thr); + } + + public OntologyInvalidException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ContainerMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ContainerMapper.java index beae808eb0e78ded5c2d33f9d849b4d952a069b6..080d8f188e7d5409a1a88e7a8b5bb6306c77b99a 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ContainerMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ContainerMapper.java @@ -7,6 +7,7 @@ import at.tuwien.entities.container.Container; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.Mappings; +import org.mapstruct.Named; import java.text.Normalizer; import java.util.Locale; @@ -17,6 +18,9 @@ public interface ContainerMapper { org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ContainerMapper.class); + @Mappings({ + @Mapping(target = "internalName", source = "name", qualifiedByName = "internalNameMapping") + }) Container containerCreateRequestDtoToContainer(ContainerCreateRequestDto data); ContainerDto containerToContainerDto(Container data); @@ -27,14 +31,15 @@ public interface ContainerMapper { ContainerBriefDto containerToDatabaseContainerBriefDto(Container data); // https://stackoverflow.com/questions/1657193/java-code-library-for-generating-slugs-for-use-in-pretty-urls#answer-1657250 - default String containerToInternalContainerName(Container data) { + @Named("internalNameMapping") + default String containerToInternalContainerName(String containerName) { final Pattern NONLATIN = Pattern.compile("[^\\w-]"); final Pattern WHITESPACE = Pattern.compile("[\\s]"); - String nowhitespace = WHITESPACE.matcher(data.getName()).replaceAll("-"); + String nowhitespace = WHITESPACE.matcher(containerName).replaceAll("-"); String normalized = Normalizer.normalize(nowhitespace, Normalizer.Form.NFD); String slug = NONLATIN.matcher(normalized).replaceAll(""); final String name = "dbrepo-userdb-" + slug.toLowerCase(Locale.ENGLISH); - log.trace("mapped container name {} to name {}", data, name); + log.trace("mapped container name {} to internal name {}", containerName, name); return name; } } diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/DatabaseMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/DatabaseMapper.java index 0be2dbcb372ca351573f6b101a742a1e1d54c584..f814b535176456bb0bd8e154f0a4f7ffe92ebdc9 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/DatabaseMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/DatabaseMapper.java @@ -2,12 +2,8 @@ package at.tuwien.mapper; import at.tuwien.api.database.*; import at.tuwien.api.user.UserDetailsDto; -import at.tuwien.api.user.UserDto; import at.tuwien.entities.container.image.ContainerImage; -import at.tuwien.entities.database.AccessType; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.database.LanguageType; +import at.tuwien.entities.database.*; import at.tuwien.entities.user.User; import at.tuwien.exception.QueryMalformedException; import org.apache.commons.lang3.RandomStringUtils; @@ -23,10 +19,9 @@ import java.sql.PreparedStatement; import java.sql.SQLException; import java.text.Normalizer; import java.util.Locale; -import java.util.UUID; import java.util.regex.Pattern; -@Mapper(componentModel = "spring", uses = {ContainerMapper.class, UserMapper.class, ImageMapper.class, UserMapper.class/*, IdentifierMapper.class*/}, imports = {RandomStringUtils.class}) +@Mapper(componentModel = "spring", uses = {ContainerMapper.class, UserMapper.class, ImageMapper.class, UserMapper.class, TableMapper.class, IdentifierMapper.class, ViewMapper.class}, imports = {RandomStringUtils.class}) public interface DatabaseMapper { org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(DatabaseMapper.class); @@ -51,7 +46,6 @@ public interface DatabaseMapper { @Named("languageMapping") LanguageType languageTypeDtoToLanguageType(LanguageTypeDto data); - /* keep */ @Named("engineMapping") default String containerImageToEngine(ContainerImage data) { return data.getName() + ":" + data.getVersion(); @@ -59,7 +53,6 @@ public interface DatabaseMapper { @Mappings({ @Mapping(target = "id", source = "id"), - @Mapping(target = "engine", source = "container.image", qualifiedByName = "engineMapping"), @Mapping(target = "image", source = "container.image"), @Mapping(target = "created", source = "created", dateFormat = "dd-MM-yyyy HH:mm"), @Mapping(target = "container", ignore = true), @@ -68,22 +61,21 @@ public interface DatabaseMapper { @Mappings({ @Mapping(target = "id", source = "id"), - @Mapping(target = "image", source = "container.image"), @Mapping(target = "created", source = "created", dateFormat = "dd-MM-yyyy HH:mm"), - @Mapping(target = "identifier.database", ignore = true) }) DatabaseDto databaseToDatabaseDto(Database data); - @Mappings({ - @Mapping(target = "identifier.database", ignore = true) - }) - Database databaseDtoToDatabase(DatabaseDto data); - @Mappings({ @Mapping(target = "internalName", expression = "java(nameToInternalName(data.getName()) + \"_\" + RandomStringUtils.randomAlphabetic(4).toLowerCase())"), }) Database databaseCreateDtoToDatabase(DatabaseCreateDto data); + AccessType accessTypeDtoToAccessType(AccessTypeDto data); + + AccessTypeDto accessTypeToAccessTypeDto(AccessType data); + + DatabaseAccessDto databaseAccessToDatabaseAccessDto(DatabaseAccess data); + default PreparedStatement userToRawCreateUserQuery(Connection connection, User data) throws QueryMalformedException { if (data.getMariadbPassword() == null) { log.error("Failed to map create user query: attribute 'mariadb_password' is empty"); @@ -122,6 +114,19 @@ public interface DatabaseMapper { } } + default PreparedStatement databaseToDatabaseMetadata(Connection connection, Database database) throws QueryMalformedException { + final StringBuilder statement = new StringBuilder("SELECT t.`TABLE_NAME`, t.`TABLE_TYPE`, t.`TABLE_ROWS`, t.`AVG_ROW_LENGTH`, t.`DATA_LENGTH`, t.`MAX_DATA_LENGTH`, COALESCE(t.`CREATE_TIME`, NOW()) as `CREATE_TIME`, t.`UPDATE_TIME`, v.`VIEW_DEFINITION` FROM information_schema.TABLES t LEFT JOIN information_schema.VIEWS v ON t.`TABLE_NAME` = v.`TABLE_NAME` WHERE t.`TABLE_SCHEMA` = '") + .append(database.getInternalName()) + .append("' AND t.`TABLE_TYPE` IN ('BASE TABLE', 'SYSTEM VERSIONED', 'VIEW') AND t.`TABLE_NAME` NOT IN ('qs_queries', '_tmp') AND t.`TABLE_NAME` NOT LIKE 'hs_%'"); + log.trace("statement={}", statement); + try { + return connection.prepareStatement(statement.toString()); + } catch (SQLException e) { + log.error("Failed to prepare statement {}, reason: {}", statement, e.getMessage()); + throw new QueryMalformedException("Failed to prepare statement", e); + } + } + default PreparedStatement userToRawDropUserQuery(Connection connection, String username) throws QueryMalformedException { final StringBuilder statement = new StringBuilder("DROP USER IF EXISTS `") .append(username) @@ -143,7 +148,7 @@ public interface DatabaseMapper { try { return connection.prepareStatement(statement.toString()); } catch (SQLException e) { - log.error("Failed to prepare statement {}, reason: {}", statement, e.getMessage()); + log.error("Failed to prepare statement {}: {}", statement, e.getMessage()); throw new QueryMalformedException("Failed to prepare statement", e); } } @@ -262,41 +267,4 @@ public interface DatabaseMapper { return principal; } - default DatabaseAccess defaultCreatorAccess(Database database, UUID userId) { - final DatabaseAccess access = DatabaseAccess.builder() - .hdbid(database.getId()) - .huserid(userId) - .type(AccessType.WRITE_ALL) - .build(); - log.debug("give default owner access to database with id {} to user with id {}", database.getId(), userId); - return access; - } - - AccessType accessTypeDtoToAccessType(AccessTypeDto data); - - AccessTypeDto accessTypeToAccessTypeDto(AccessType data); - - DatabaseAccessDto databaseAccessToDatabaseAccessDto(DatabaseAccess data); - - default DatabaseAccess databaseGiveAccessDtoToDatabaseAccess(Database database, UUID id, - DatabaseGiveAccessDto data) { - final DatabaseAccess access = DatabaseAccess.builder() - .hdbid(database.getId()) - .huserid(id) - .type(accessTypeDtoToAccessType(data.getType())) - .build(); - log.debug("mapped database access {} to database access {}", data, access); - return access; - } - - default DatabaseAccess databaseModifyAccessDtoToDatabaseAccess(Database database, User user, DatabaseModifyAccessDto data) { - final DatabaseAccess access = DatabaseAccess.builder() - .hdbid(database.getId()) - .huserid(user.getId()) - .type(accessTypeDtoToAccessType(data.getType())) - .build(); - log.debug("mapped database access {} to database access {}", data, access); - return access; - } - } diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/IdentifierMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/IdentifierMapper.java index d23a7c7ddb4d1667409a6f6a7d6461240e5d1806..fa051e37dbd2f9208d5eec15c1fc790d28528b23 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/IdentifierMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/IdentifierMapper.java @@ -7,7 +7,7 @@ import org.mapstruct.Mapping; import org.mapstruct.Mappings; import org.mapstruct.Named; -@Mapper(componentModel = "spring") +@Mapper(componentModel = "spring", uses = {DatabaseMapper.class}) public interface IdentifierMapper { Identifier identifierDtoToIdentifier(IdentifierDto data); @@ -15,7 +15,7 @@ public interface IdentifierMapper { IdentifierBriefDto identifierToIdentifierBriefDto(Identifier data); @Mappings({ - @Mapping(target = "database.identifier", ignore = true), + @Mapping(target = "database.identifiers", ignore = true), }) IdentifierDto identifierToIdentifierDto(Identifier data); @@ -51,11 +51,13 @@ public interface IdentifierMapper { default String identifierToLocationUrl(String baseUrl, Identifier data) { if (data.getType().equals(IdentifierType.SUBSET)) { - return baseUrl + "/database/" + data.getDatabase().getId() + "/query/" + data.getQueryId(); + return baseUrl + "/database/" + data.getDatabase().getId() + "/query/" + data.getQueryId()+ "/info?pid=" + data.getId(); } else if (data.getType().equals(IdentifierType.DATABASE)) { - return baseUrl + "/database/" + data.getDatabase().getId(); + return baseUrl + "/database/" + data.getDatabase().getId() + "/info?pid=" + data.getId(); } else if (data.getType().equals(IdentifierType.VIEW)) { - return baseUrl + "/database/" + data.getDatabase().getId() + "/view/" + data.getViewId(); + return baseUrl + "/database/" + data.getDatabase().getId() + "/view/" + data.getViewId()+ "/info?pid=" + data.getId(); + } else if (data.getType().equals(IdentifierType.TABLE)) { + return baseUrl + "/database/" + data.getDatabase().getId() + "/table/" + data.getTableId()+ "/info?pid=" + data.getId(); } else { return null; } diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/QueryMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/QueryMapper.java index 3672082da6ca91345b20a71a668a40f335ed76b7..09839e09f2a18c44c0d818d6504bc081b35aa271 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/QueryMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/QueryMapper.java @@ -6,7 +6,6 @@ import at.tuwien.api.database.query.QueryDto; import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.api.database.table.TableCsvDeleteDto; import at.tuwien.api.database.table.TableCsvDto; -import at.tuwien.api.database.table.TableCsvUpdateDto; import at.tuwien.api.database.table.TableHistoryDto; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.View; @@ -18,6 +17,12 @@ import at.tuwien.exception.QueryMalformedException; import at.tuwien.exception.QueryStoreException; import at.tuwien.exception.TableMalformedException; import at.tuwien.querystore.Query; +import net.sf.jsqlparser.JSQLParserException; +import net.sf.jsqlparser.parser.CCJSqlParserManager; +import net.sf.jsqlparser.schema.Column; +import net.sf.jsqlparser.statement.select.*; +import net.sf.jsqlparser.statement.select.PlainSelect; +import net.sf.jsqlparser.statement.select.Select; import net.sf.jsqlparser.statement.select.SelectItem; import org.apache.commons.codec.binary.Hex; import org.apache.commons.io.FileUtils; @@ -30,6 +35,7 @@ import org.springframework.transaction.annotation.Transactional; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.io.StringReader; import java.math.BigInteger; import java.sql.Date; import java.sql.*; @@ -37,12 +43,10 @@ import java.text.Normalizer; import java.time.*; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; -import java.time.temporal.ChronoField; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; -import java.util.stream.Stream; @Mapper(componentModel = "spring") public interface QueryMapper { @@ -106,7 +110,7 @@ public interface QueryMapper { } final int[] idx = new int[]{0}; final List<Map<String, Integer>> headers = columns.stream() - .map(c -> (Map<String, Integer>) new LinkedHashMap<String, Integer>(){{ + .map(c -> (Map<String, Integer>) new LinkedHashMap<String, Integer>() {{ put(c.getAlias() != null ? c.getAlias() : c.getInternalName(), idx[0]++); }}) .toList(); @@ -510,82 +514,6 @@ public interface QueryMapper { } } - default PreparedStatement tableCsvDtoToRawUpdateQuery(Connection connection, Table table, TableCsvUpdateDto data) - throws TableMalformedException, ImageNotSupportedException, QueryMalformedException { - log.trace("mapping table csv to update query, table={}, data={}", table, data); - int i = 1; - if (table.getColumns().size() == 0) { - log.error("Column size is zero"); - throw new TableMalformedException("Columns are not known"); - } - /* check image */ - if (!table.getDatabase().getContainer().getImage().getName().equals("mariadb")) { - log.error("Currently only MariaDB is supported"); - throw new ImageNotSupportedException("Image not supported."); - } - /* parameterized query for prepared statement */ - final StringBuilder statement = new StringBuilder("UPDATE `") - .append(table.getInternalName()) - .append("` SET "); - final int[] idx = new int[]{0}; - data.getData() - .forEach((key, value) -> { - statement.append(idx[0]++ == 0 ? "" : ", ") - .append("`") - .append(key) - .append("` = ?"); - }); - statement.append(" WHERE "); - final int[] jdx = new int[]{0}; - data.getKeys() - .forEach((key, value) -> { - statement.append(jdx[0] == 0 ? "" : ", ") - .append("`") - .append(key) - .append("` "); - if (value == null) { - statement.append(" IS NULL"); - } else { - statement.append(" = '") - .append(value) - .append("'"); - } - jdx[0]++; - }); - statement.append(";"); - try { - final PreparedStatement pstmt = connection.prepareStatement(statement.toString()); - for (Map.Entry<String, Object> entry : data.getData().entrySet()) { - if (entry.getValue() == null) { - log.trace("entry is null, preparing null"); - pstmt.setNull(i++, Types.NULL); - } else if (entry.getValue().equals(true) || entry.getValue().equals(false)) { - log.trace("entry is not null, preparing boolean"); - pstmt.setBoolean(i++, Boolean.parseBoolean(String.valueOf(entry.getValue()))); - } else { - log.trace("entry is not null, preparing string"); - pstmt.setString(i++, String.valueOf(entry.getValue())); - } - } - log.trace("mapped update query {} to prepared statement {}", statement, pstmt); - return pstmt; - } catch (SQLException e) { - log.error("failed to prepare statement {}, reason: {}", statement, e.getMessage()); - throw new QueryMalformedException("Failed to prepare statement", e); - } - } - - default String tableColumnsToSelection(List<TableColumn> data) { - final StringBuilder selection = new StringBuilder(); - final int[] idx = {0}; - data.forEach(column -> selection.append(idx[0]++ == 0 ? "" : ", ") - .append("`") - .append(column.getInternalName()) - .append("`")); - log.trace("mapped columns {} to selection {}", data, selection); - return selection.toString(); - } - default String tableToRawCountAllQuery(Table table, Instant timestamp) throws ImageNotSupportedException { log.trace("mapping table to raw count query, table={}, timestamp={}", table, timestamp); @@ -734,10 +662,170 @@ public interface QueryMapper { log.trace("mapped find all from history view query [{}]", statement); try { final PreparedStatement pstmt = connection.prepareStatement(statement.toString()); - log.trace("mapped select history query {} to prepared statement {}", statement, pstmt); + log.trace("mapped select history query {} to prepared statement", statement); return pstmt; } catch (SQLException e) { - log.error("Failed to prepare statement {} reason: {}", statement, e.getMessage()); + log.error("Failed to prepare statement {}: {}", statement, e.getMessage()); + throw new QueryMalformedException("Failed to prepare statement", e); + } + } + + /** + * Parses the stored columns from a given query. + * + * @param query The query. + * @param database The database that contains the list of tables with list of columns. + * @return List of columns in the order they are referenced in the query. + * @throws JSQLParserException The columns could not be extracted from the query. + */ + @Transactional(readOnly = true) + default List<TableColumn> parseColumns(String query, Database database) throws JSQLParserException { + final List<TableColumn> columns = new ArrayList<>(); + final CCJSqlParserManager parserRealSql = new CCJSqlParserManager(); + final net.sf.jsqlparser.statement.Statement statement = parserRealSql.parse(new StringReader(query)); + log.debug("parse columns from query: {}", query); + /* check */ + if (!(statement instanceof Select)) { + log.error("Query attempts to update the dataset, not a SELECT statement"); + throw new JSQLParserException("Query attempts to update the dataset"); + } + /* start parsing */ + final Select selectStatement = (Select) statement; + final PlainSelect ps = (PlainSelect) selectStatement.getSelectBody(); + final List<SelectItem> clauses = ps.getSelectItems(); + log.trace("columns referenced in the from-clause: {}", clauses); + /* Parse all tables */ + final List<FromItem> tablesOrViews = new ArrayList<>(); + tablesOrViews.add(ps.getFromItem()); + if (ps.getJoins() != null && ps.getJoins().size() > 0) { + log.trace("query contains join items: {}", ps.getJoins()); + for (net.sf.jsqlparser.statement.select.Join j : ps.getJoins()) { + if (j.getRightItem() != null) { + tablesOrViews.add(j.getRightItem()); + } + } + } + final List<TableColumn> allColumns = database.getTables() + .stream() + .map(Table::getColumns) + .flatMap(List::stream) + .toList(); + log.trace("columns referenced in the from-clause and join-clause(s): {}", clauses); + /* Checking if all tables or views exist */ + log.trace("table(s) or view(s) referenced in the statement: {}", tablesOrViews.stream().map(t -> ((net.sf.jsqlparser.schema.Table) t).getName()).collect(Collectors.toList())); + /* Checking if all columns exist */ + for (SelectItem clause : clauses) { + final SelectExpressionItem item = (SelectExpressionItem) clause; + final Column column = (Column) item.getExpression(); + final Optional<net.sf.jsqlparser.schema.Table> optionalTableOrView = tablesOrViews.stream() + .map(t -> (net.sf.jsqlparser.schema.Table) t) + .filter(t -> { + if (column.getTable() == null) { + /* column does not reference a specific table, so there is only one table */ + final String tableName = ((net.sf.jsqlparser.schema.Table) tablesOrViews.get(0)).getName().replace("`", ""); + return tableOptionalAliasMatches(t, tableName); + } + final String tableName = column.getTable().getName().replace("`", ""); + return tableOptionalAliasMatches(t, tableName); + }) + .findFirst(); + if (optionalTableOrView.isEmpty()) { + log.error("Failed to find table or view with alias {}", column.getTable().getAlias()); + throw new JSQLParserException("Failed to find table or view with alias " + column.getTable().getAlias()); + } + final Optional<TableColumn> optionalColumn = allColumns.stream() + .filter(c -> c.getInternalName().equals(column.getColumnName().replace("`", ""))) + .filter(c -> columnMatches(c, optionalTableOrView.get().getName().replace("`", ""))) + .findFirst(); + if (optionalColumn.isEmpty()) { + log.error("Failed to find column with name {} in {}", column.getColumnName(), allColumns.stream().map(TableColumn::getInternalName).toList()); + throw new JSQLParserException("Failed to find column with name " + column.getColumnName() + " in " + allColumns.stream().map(TableColumn::getInternalName).toList()); + } + final TableColumn aliasColumn = optionalColumn.get(); + if (item.getAlias() != null) { + aliasColumn.setAlias(item.getAlias().getName()); + } + log.trace("found column with internal name {} and alias {}", aliasColumn.getInternalName(), aliasColumn.getAlias()); + columns.add(aliasColumn); + } + return columns; + } + + default boolean tableOptionalAliasMatches(net.sf.jsqlparser.schema.Table table, String tableName) { + if (table.getAlias() == null) { + /* table is non-aliased */ + final String otherTableName = table.getName() + .trim() + .replace("`", ""); + log.trace("table {} has no alias", otherTableName); + return otherTableName.equals(tableName); + } + /* has alias */ + final String alias = table.getAlias() + .getName() + .trim() + .replace("`", ""); + log.trace("table {} has alias {}", table.getName(), alias); + return alias.equals(tableName); + } + + @Transactional(readOnly = true) + default boolean columnMatches(TableColumn column, String tableOrView) { + if (column.getTable().getInternalName().equals(tableOrView)) { + /* matches table name */ + return true; + } + if (column.getViews() == null) { + return false; + } + /* maybe matches one of the views */ + return column.getViews() + .stream() + .anyMatch(v -> v.getInternalName().equals(tableOrView)); + } + + default PreparedStatement obtainTableMetadataRawQuery(Connection connection, String databaseName, String tableName) throws QueryMalformedException { + final StringBuilder statement = new StringBuilder("SELECT `ORDINAL_POSITION`, `COLUMN_DEFAULT`, `IS_NULLABLE`, `DATA_TYPE`, `CHARACTER_MAXIMUM_LENGTH`, `NUMERIC_PRECISION`, `NUMERIC_SCALE`, `COLUMN_TYPE`, `COLUMN_KEY`, `COLUMN_NAME` FROM `information_schema`.`COLUMNS` WHERE `TABLE_SCHEMA` = '") + .append(databaseName) + .append("' AND `TABLE_NAME` = '") + .append(tableName) + .append("'"); + log.trace("mapped obtain table metadata statement {} to prepared statement", statement); + try { + return connection.prepareStatement(statement.toString()); + } catch (SQLException e) { + log.error("Failed to prepare statement {}: {}", statement, e.getMessage()); + throw new QueryMalformedException("Failed to prepare statement", e); + } + } + + default PreparedStatement databaseToDatabaseConstraintMetadata(Connection connection, String databaseName, String tableName) throws QueryMalformedException { + final StringBuilder statement = new StringBuilder("SELECT tc.`CONSTRAINT_TYPE`, cc.`CONSTRAINT_NAME`, cc.`LEVEL`, cc.`CHECK_CLAUSE`, rc.`UNIQUE_CONSTRAINT_NAME`, rc.`REFERENCED_TABLE_NAME` FROM information_schema.`TABLE_CONSTRAINTS` tc LEFT JOIN information_schema.`CHECK_CONSTRAINTS` cc ON tc.`CONSTRAINT_SCHEMA` = cc.`CONSTRAINT_SCHEMA` AND tc.`TABLE_NAME` = cc.`TABLE_NAME` AND tc.`CONSTRAINT_TYPE` = 'CHECK' LEFT JOIN information_schema.`REFERENTIAL_CONSTRAINTS` rc ON tc.`CONSTRAINT_SCHEMA` = rc.`CONSTRAINT_SCHEMA` AND tc.`TABLE_NAME` = rc.`TABLE_NAME` AND tc.`CONSTRAINT_TYPE` = 'FOREIGN KEY' WHERE tc.`TABLE_SCHEMA` = '") + .append(databaseName) + .append("' AND tc.`TABLE_NAME` = '") + .append(tableName) + .append("'"); + log.trace("statement={}", statement); + try { + return connection.prepareStatement(statement.toString()); + } catch (SQLException e) { + log.error("Failed to prepare statement {}, reason: {}", statement, e.getMessage()); + throw new QueryMalformedException("Failed to prepare statement", e); + } + } + + default PreparedStatement tableEnableSystemVersioning(Connection connection, String databaseName, String tableName) + throws QueryMalformedException { + final StringBuilder statement = new StringBuilder("ALTER TABLE `") + .append(databaseName) + .append("`.`") + .append(tableName) + .append("` ADD SYSTEM VERSIONING;"); + log.trace("mapped enable system-versioning statement {} to prepared statement", statement); + try { + return connection.prepareStatement(statement.toString()); + } catch (SQLException e) { + log.error("Failed to prepare statement {}: {}", statement, e.getMessage()); throw new QueryMalformedException("Failed to prepare statement", e); } } diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/S3Mapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/S3Mapper.java new file mode 100644 index 0000000000000000000000000000000000000000..87e68ef389cfa15b7ec9f8170d2f36efda645a5d --- /dev/null +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/S3Mapper.java @@ -0,0 +1,28 @@ +package at.tuwien.mapper; + +import io.minio.GetObjectArgs; +import org.mapstruct.Mapper; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; + +import java.util.Collections; + +@Mapper(componentModel = "spring") +public interface S3Mapper { + + org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(S3Mapper.class); + + default GetObjectArgs s3ArgsToObjectArgs(String bucketName, String key) { + return s3ArgsToObjectArgs(bucketName, key, null); + } + + default GetObjectArgs s3ArgsToObjectArgs(String bucketName, String key, Long length) { + final GetObjectArgs.Builder builder = GetObjectArgs.builder() + .bucket(bucketName) + .object(key); + if (length != null) { + builder.length(length); + } + return builder.build(); + } +} diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/StoreMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/StoreMapper.java index 2307371f21d62b3c6d75288a1bc774c1c6512050..e65a3d9e01166532b5951b40f5ef04e016bde9e4 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/StoreMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/StoreMapper.java @@ -1,7 +1,6 @@ package at.tuwien.mapper; import at.tuwien.api.database.query.ExecuteStatementDto; -import at.tuwien.api.user.UserDto; import at.tuwien.entities.user.User; import at.tuwien.exception.QueryStoreException; import at.tuwien.exception.TableMalformedException; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/TableMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/TableMapper.java index d5fe384b3475a444aaf7e6497140014d564786a8..3e7ce40092cb571330ca8dffbb1ebf6e4dcf28bf 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/TableMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/TableMapper.java @@ -2,7 +2,6 @@ package at.tuwien.mapper; import at.tuwien.api.database.table.TableBriefDto; import at.tuwien.api.database.table.TableCreateDto; -import at.tuwien.api.database.table.TableCreateRawQuery; import at.tuwien.api.database.table.TableDto; import at.tuwien.api.database.table.columns.ColumnCreateDto; import at.tuwien.api.database.table.columns.ColumnDto; @@ -18,6 +17,7 @@ import at.tuwien.api.semantics.EntityDto; import at.tuwien.entities.container.image.ContainerImage; import at.tuwien.entities.container.image.ContainerImageDate; import at.tuwien.entities.database.Database; +import at.tuwien.entities.database.View; import at.tuwien.entities.database.table.Table; import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.entities.database.table.columns.TableColumnConcept; @@ -31,16 +31,14 @@ import at.tuwien.entities.database.table.constraints.unique.Unique; import at.tuwien.exception.ImageNotSupportedException; import at.tuwien.exception.QueryMalformedException; import at.tuwien.exception.TableMalformedException; -import at.tuwien.repository.mdb.TableRepository; +import org.apache.commons.codec.digest.DigestUtils; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.Mappings; import org.mapstruct.Named; +import org.springframework.transaction.annotation.Transactional; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.sql.Statement; +import java.sql.*; import java.text.Normalizer; import java.util.*; import java.util.regex.Pattern; @@ -63,8 +61,7 @@ public interface TableMapper { @Mapping(target = "internalName", expression = "java(data.getInternalName())"), @Mapping(target = "queueName", expression = "java(data.getQueueName())"), @Mapping(target = "routingKey", expression = "java(data.getRoutingKey())"), - @Mapping(source = "description", target = "description"), - @Mapping(source = "database.isPublic", target = "isPublic"), + @Mapping(source = "description", target = "description") }) TableDto tableToTableDto(Table data); @@ -133,26 +130,32 @@ public interface TableMapper { ReferenceType referenceTypeDtoToReferenceType(ReferenceTypeDto dto); - default ForeignKey foreignKeyCreateDtoToForeignKey(TableRepository repo, Table table, ForeignKeyCreateDto data) throws TableMalformedException { - final Optional<Table> referencedTable = repo.findByTdbidAndInternalName(table.getDatabase().getId(), nameToInternalName(data.getReferencedTable())); - if (referencedTable.isEmpty()) { - log.error("Failed to find referenced table with database id {} and internal name {}", table.getDatabase().getId(), nameToInternalName(data.getReferencedTable())); - throw new TableMalformedException("Failed to find referenced table with database id " + table.getDatabase().getId() + " and internal name " + nameToInternalName(data.getReferencedTable())); + @Transactional(readOnly = true) + default ForeignKey foreignKeyCreateDtoToForeignKey(Table table, ForeignKeyCreateDto data) throws TableMalformedException { + final String referencedTableInternalName = nameToInternalName(data.getReferencedTable()); + final Optional<Table> optional = table.getDatabase() + .getTables() + .stream() + .filter(t -> t.getInternalName().equals(referencedTableInternalName)) + .findFirst(); + if (optional.isEmpty()) { + log.error("Failed to find referenced table with internal name {} in database with id {}", referencedTableInternalName, table.getDatabase().getId()); + throw new TableMalformedException("Failed to find referenced table with internal name " + referencedTableInternalName + " in database with id " + table.getDatabase().getId()); } final ForeignKey.ForeignKeyBuilder builder = ForeignKey.builder() .table(table) .onUpdate(referenceTypeDtoToReferenceType(data.getOnUpdate())) .onDelete(referenceTypeDtoToReferenceType(data.getOnDelete())) - .referencedTable(referencedTable.get()); + .referencedTable(optional.get()); final List<TableColumn> columns = columnNameListToTableColumn(table, data.getColumns()); - final List<TableColumn> referencedColumns = columnNameListToTableColumn(referencedTable.get(), data.getReferencedColumns()); + final List<TableColumn> referencedColumns = columnNameListToTableColumn(optional.get(), data.getReferencedColumns()); if (columns.isEmpty()) { - log.error("Foreign key does not have any columns."); - throw new TableMalformedException("Foreign key does not have any columns."); + log.error("Foreign key does not have any referenced columns"); + throw new TableMalformedException("Foreign key does not have any referenced columns"); } if (columns.size() != referencedColumns.size()) { - log.error("There have to be equally as many columns and referenced columns in a foreign key."); - throw new TableMalformedException("There have to be equally as many columns and referenced columns in a foreign key."); + log.error("There have to be equally as many columns and referenced columns in a foreign key"); + throw new TableMalformedException("There have to be equally as many columns and referenced columns in a foreign key"); } final List<ForeignKeyReference> references = new ArrayList<>(); final ForeignKey foreignKey = builder.references(references).build(); @@ -191,13 +194,12 @@ public interface TableMapper { return dto; } - default Constraints constraintsCreateDtoToConstraints(TableRepository repo, Table table, ConstraintsCreateDto data) throws TableMalformedException { + default Constraints constraintsCreateDtoToConstraints(Table table, ConstraintsCreateDto data) + throws TableMalformedException { if (data == null) { return null; } - Constraints.ConstraintsBuilder builder = Constraints.builder(); - if (data.getUniques() != null) { List<Unique> uniques = new ArrayList<>(); for (List<String> columns : data.getUniques()) { @@ -208,7 +210,7 @@ public interface TableMapper { if (data.getForeignKeys() != null) { List<ForeignKey> foreignKeys = new ArrayList<>(); for (ForeignKeyCreateDto foreignKeyData : data.getForeignKeys()) { - foreignKeys.add(foreignKeyCreateDtoToForeignKey(repo, table, foreignKeyData)); + foreignKeys.add(foreignKeyCreateDtoToForeignKey(table, foreignKeyData)); } builder.foreignKeys(foreignKeys); } @@ -494,4 +496,113 @@ public interface TableMapper { } } + @Transactional(readOnly = true) + default List<Table> resultListToTableList(ResultSet resultSet, Database database) throws SQLException { + final List<Table> tables = new LinkedList<>(); + while (resultSet.next()) { + final String tableType = resultSet.getString(2); + if (!List.of("SYSTEM VERSIONED", "BASE TABLE").contains(tableType)) { + log.trace("table is not of type system versioned or base table: {}", tableType); + continue; + } + final Table table = Table.builder() + .name(resultSet.getString(1)) + .internalName(resultSet.getString(1)) + .isVersioned(resultSet.getString(2).equals("SYSTEM VERSIONED")) + .numRows(resultSet.getLong(3)) + .avgRowLength(resultSet.getLong(4)) + .dataLength(resultSet.getLong(5)) + .maxDataLength(resultSet.getLong(6)) + .database(database) + .tdbid(database.getId()) + .queueName("dbrepo") + .routingKey("dbrepo." + database.getInternalName() + "." + resultSet.getString(1)) + .creator(database.getOwner()) + .createdBy(database.getOwner().getId()) + .owner(database.getOwner()) + .ownedBy(database.getOwner().getId()) + .build(); + if (resultSet.getString(7) != null && !resultSet.getString(7).isEmpty()) { + table.setCreated(Timestamp.valueOf(resultSet.getString(7)) + .toInstant()); + } + if (resultSet.getString(8) != null && !resultSet.getString(8).isEmpty()) { + table.setLastModified(Timestamp.valueOf(resultSet.getString(8)) + .toInstant()); + } + log.trace("mapped result set to table {}", table); + tables.add(table); + } + return tables; + } + + @Transactional(readOnly = true) + default List<View> resultListToViewList(ResultSet resultSet, Database database) throws SQLException { + final List<View> views = new LinkedList<>(); + while (resultSet.next()) { + final String tableType = resultSet.getString(2); + if (!tableType.equals("VIEW")) { + log.trace("table is not of type view: {}", tableType); + continue; + } + final View view = View.builder() + .name(resultSet.getString(1)) + .internalName(resultSet.getString(1)) + .database(database) + .vdbid(database.getId()) + .createdBy(database.getOwner().getId()) + .isInitialView(false) + .isPublic(database.getIsPublic()) + .query(resultSet.getString(9)) + .queryHash(new DigestUtils("SHA-256").digestAsHex(resultSet.getString(9))) + .build(); + if (resultSet.getString(7) != null && !resultSet.getString(7).isEmpty()) { + view.setCreated(Timestamp.valueOf(resultSet.getString(7)) + .toInstant()); + } + if (resultSet.getString(8) != null && !resultSet.getString(8).isEmpty()) { + view.setLastModified(Timestamp.valueOf(resultSet.getString(8)) + .toInstant()); + } + log.trace("mapped result set to view {}", view); + views.add(view); + } + return views; + } + + default Table resultSetTableToObtainedMetadata(ResultSet resultSet, + Table data, + ContainerImageDate defaultDateFormat, + ContainerImageDate defaultTimestampFormat) throws SQLException { + final List<TableColumn> columns = new LinkedList<>(); + while (resultSet.next()) { + final TableColumn column = TableColumn.builder() + .table(data) + .ordinalPosition(resultSet.getInt(1) - 1) /* start at zero */ +// .default() + .autoGenerated(resultSet.getString(2) != null && resultSet.getString(2).startsWith("nextval")) + .isNullAllowed(resultSet.getString(3).equals("YES")) + .columnType(TableColumnType.valueOf(resultSet.getString(4).toUpperCase())) + .d(resultSet.getString(7) != null ? resultSet.getLong(7) : null) + .isPrimaryKey(resultSet.getString(9) != null && resultSet.getString(9).equals("PRI")) + .name(resultSet.getString(10)) + .internalName(resultSet.getString(10)) + .build(); + if (resultSet.getString(5) != null) { + column.setSize(resultSet.getLong(5)); + } else if (resultSet.getString(6) != null) { + column.setSize(resultSet.getLong(6)); + } + if (column.getColumnType().equals(TableColumnType.TIMESTAMP) || column.getColumnType().equals(TableColumnType.DATETIME)) { + column.setDateFormat(defaultTimestampFormat); + } else if (column.getColumnType().equals(TableColumnType.DATE)) { + column.setDateFormat(defaultDateFormat); + } + log.trace("mapped result set to column {}", column); + columns.add(column); + } + data.setColumns(columns); + return data; + } + } diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/UserMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/UserMapper.java index d838c748261f43c5c74f9a960cd02a9f144b6bb7..41f34ac51b88d2eadd12aa61a467ead66f814193 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/UserMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/UserMapper.java @@ -4,7 +4,6 @@ import at.tuwien.api.auth.SignupRequestDto; import at.tuwien.api.auth.TokenIntrospectDto; import at.tuwien.api.keycloak.*; import at.tuwien.api.user.*; -import at.tuwien.api.user.UserAttributesDto; import at.tuwien.api.user.UserDto; import at.tuwien.entities.user.User; import org.mapstruct.Mapper; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ViewMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ViewMapper.java index ad8ee0e23eee9139485fcf9b014a11082cd040c6..e8b12e3c38b326dd59124176735f076f935c3891 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ViewMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ViewMapper.java @@ -1,9 +1,13 @@ package at.tuwien.mapper; +import at.tuwien.api.database.DatabaseDto; import at.tuwien.api.database.ViewBriefDto; import at.tuwien.api.database.ViewCreateDto; import at.tuwien.api.database.ViewDto; +import at.tuwien.api.identifier.IdentifierDto; +import at.tuwien.entities.database.Database; import at.tuwien.entities.database.View; +import at.tuwien.entities.identifier.Identifier; import at.tuwien.exception.QueryMalformedException; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -17,14 +21,14 @@ import java.text.Normalizer; import java.util.Locale; import java.util.regex.Pattern; -@Mapper(componentModel = "spring", uses = {ContainerMapper.class, UserMapper.class, IdentifierMapper.class}) +@Mapper(componentModel = "spring", uses = {ContainerMapper.class, UserMapper.class, TableMapper.class}) public interface ViewMapper { org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ViewMapper.class); - @Named("internalMapping") + @Named("internalNameMapping") default String nameToInternalName(String data) { - if (data == null || data.length() == 0) { + if (data == null || data.isEmpty()) { return data; } final Pattern NONLATIN = Pattern.compile("[^\\w-]"); @@ -36,7 +40,10 @@ public interface ViewMapper { } @Mappings({ - @Mapping(target = "database.container", ignore = true) + @Mapping(target = "database.container", ignore = true), + @Mapping(target = "database.views", ignore = true), + @Mapping(target = "database.tables", ignore = true), + @Mapping(target = "database.identifiers", ignore = true), }) ViewDto viewToViewDto(View data); diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ConceptRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ConceptRepository.java deleted file mode 100644 index 03b1d43b354250a24fae71fbefec9fd06622d632..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ConceptRepository.java +++ /dev/null @@ -1,20 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.table.columns.TableColumnConcept; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -public interface ConceptRepository extends JpaRepository<TableColumnConcept, Long> { - - /** - * Retrieve a column concept by URI. - * - * @param uri The URI. - * @return Optional table column concept. - */ - Optional<TableColumnConcept> findByUri(String uri); - -} diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java index 39a041738c73ed8ff3dd899cf6ea6d2a0e8b5c98..5114992eb48d88236f1f81b605cd9792f0449f0f 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java @@ -1,6 +1,7 @@ package at.tuwien.repository.mdb; import at.tuwien.entities.container.Container; +import at.tuwien.entities.container.image.ContainerImageDate; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -11,4 +12,8 @@ public interface ContainerRepository extends JpaRepository<Container, Long> { Optional<Container> findByInternalName(String internalName); + Optional<ContainerImageDate> findDefaultTimestampFormat(); + + Optional<ContainerImageDate> findDefaultDateFormat(); + } diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/CreatorRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/CreatorRepository.java deleted file mode 100644 index 916417563bae82eac6b43e2c070cc284e3a449cd..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/CreatorRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.identifier.Creator; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface CreatorRepository extends JpaRepository<Creator, Long> { - -} diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java deleted file mode 100644 index 7daa9ee981d1bf7b4e728308d6458e897576e608..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java +++ /dev/null @@ -1,36 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.database.DatabaseAccessKey; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Optional; -import java.util.UUID; - -@Repository -public interface DatabaseAccessRepository extends JpaRepository<DatabaseAccess, DatabaseAccessKey> { - - void deleteByHdbidAndHuserid(Long databaseId, UUID userId); - - /** - * Finds all database access definitions for a database with given id. - * - * @param id The database id. - * @return The list of database access definitions. - */ - List<DatabaseAccess> findByDatabaseId(Long id); - - /** - * Finds a specific database access definition for a database with given id and user id. - * - * @param databaseId The database id. - * @param userId The user id. - * @return The access definition, if successful. - */ - Optional<DatabaseAccess> findByDatabaseIdAndUserId(Long databaseId, UUID userId); - -} diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java index 40912365ffe08e77478b3a8153f67c4f2e613b51..b9123993280c00c79b72e80ff57c88441afbef38 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java @@ -17,6 +17,8 @@ public interface DatabaseRepository extends JpaRepository<Database, Long> { List<Database> findConfigureAccess(UUID id); + List<Long> findAllOnlyIds(); + Optional<Database> findPublicOrMine(Long databaseId, UUID id); Optional<Database> findPublic(Long databaseId); diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/IdentifierDescriptionRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/IdentifierDescriptionRepository.java deleted file mode 100644 index 7c93a9b27fb29edd1b67366b4d225b8e97fcd0ad..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/IdentifierDescriptionRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.identifier.IdentifierDescription; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface IdentifierDescriptionRepository extends JpaRepository<IdentifierDescription, Long> { -} diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java index 33d7eaa2cc3d68d0cc6101211a9ea3d44efe8052..0f0e2a56a3bc9c86b965bd76fdb3e90e31e529db 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java @@ -19,14 +19,6 @@ public interface IdentifierRepository extends JpaRepository<Identifier, Long> { */ List<Identifier> findByDatabaseId(Long databaseId); - /** - * Finds identifiers by given query id. - * - * @param queryId The query id. - * @return List of matching identifiers. - */ - List<Identifier> findByQueryId(Long queryId); - /** * Finds identifiers by given database id and query id. * @@ -36,30 +28,9 @@ public interface IdentifierRepository extends JpaRepository<Identifier, Long> { */ List<Identifier> findByDatabaseIdAndQueryId(Long databaseId, Long queryId); - /** - * Checks if an identifier exists by given database id and identifier type. - * - * @param databaseId The database id. - * @param type The identifier type. - * @return True if identifier exists, false otherwise. - */ - Boolean existsByDatabaseIdAndType(Long databaseId, IdentifierType type); - - /** - * Checks if an identifier exists by given database id, query id and identifier type. - * - * @param databaseId The database id. - * @param queryId The query id. - * @param type The identifier type. - * @return True if identifier exists, false otherwise. - */ - Boolean existsByDatabaseIdAndQueryIdAndType(Long databaseId, Long queryId, IdentifierType type); - - Optional<Identifier> findByDatabaseIdAndType(Long databaseId, IdentifierType type); - - Optional<Identifier> findDatabaseIdentifier(Long databaseId); + List<Identifier> findDatabaseIdentifier(Long databaseId); - Optional<Identifier> findSubsetIdentifier(Long databaseId, Long queryId); + List<Identifier> findSubsetIdentifier(Long databaseId, Long queryId); List<Identifier> findAllDatabaseIdentifiers(); diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/IdentifierTitleRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/IdentifierTitleRepository.java deleted file mode 100644 index fbb52dc3564e42cf003c4afe9c36b4146b3e5fae..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/IdentifierTitleRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.identifier.IdentifierTitle; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface IdentifierTitleRepository extends JpaRepository<IdentifierTitle, Long> { -} diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ImageDateRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ImageDateRepository.java deleted file mode 100644 index 889144818dacc9b5728c13a0e84a4fb6ec39e807..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ImageDateRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.container.image.ContainerImageDate; -import at.tuwien.entities.container.image.ContainerImageDateKey; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ImageDateRepository extends JpaRepository<ContainerImageDate, ContainerImageDateKey> { - -} diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java index 6bda3e96dfaf783096f8875aa7673e734095bf5b..273abd68af4cb7ffb7899c49339a02a18462f09b 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java @@ -4,6 +4,11 @@ import at.tuwien.entities.semantics.Ontology; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface OntologyRepository extends JpaRepository<Ontology, Long> { + + List<Ontology> findAllProcessable(); + } diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableColumnConceptRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableColumnConceptRepository.java deleted file mode 100644 index 63fe90eea77e37867fe917dc896ee3b96498ae85..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableColumnConceptRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.table.columns.TableColumnConcept; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface TableColumnConceptRepository extends JpaRepository<TableColumnConcept, String> { - -} diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java deleted file mode 100644 index 5ba1538e240b4e081cae65c1f3008c4da61a4b2e..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java +++ /dev/null @@ -1,14 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.table.columns.TableColumn; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.List; - -@Repository -public interface TableColumnRepository extends JpaRepository<TableColumn, Long> { - - List<TableColumn> findAllByDatabaseId(Long databaseId); - -} diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableColumnUnitRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableColumnUnitRepository.java deleted file mode 100644 index ef80b22e06e31c795a3d1d5cc37d2d719cb1db88..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableColumnUnitRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.table.columns.TableColumnUnit; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface TableColumnUnitRepository extends JpaRepository<TableColumnUnit, String> { - -} diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableRepository.java deleted file mode 100644 index 4ee22add4f56a40ea89428b060e1223324ae7bb0..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableRepository.java +++ /dev/null @@ -1,58 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.table.Table; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Optional; - -@Repository -public interface TableRepository extends JpaRepository<Table, Long> { - - @Query(value = "select t from Table t where t.database.id = :databaseId and t.id = :tableId") - Optional<Table> find(@Param("databaseId") Long databaseId, @Param("tableId") Long tableId); - - Optional<Table> findByDatabaseIdAndId(Long databaseId, Long tableId); - - /** - * Finds all tables by database. - * - * @param database The database. - * @return List of tables. - */ - List<Table> findByDatabaseOrderByCreatedDesc(Database database); - - List<Table> findByInternalName(String internalName); - - /** - * Finds a table with given database and internal name. - * - * @param database The database. - * @param internalName The internal name. - * @return Optional table that matches this filter. - */ - Optional<Table> findByDatabaseAndInternalName(Database database, String internalName); - - /** - * Finds a table with database id and internal name. - * - * @param tdbid The database id. - * @param internalName The internal name. - * @return Optional table that matches this filter. - */ - Optional<Table> findByTdbidAndInternalName(Long tdbid, String internalName); - - /** - * Finds a table with database id and table id. - * - * @param database The database id. - * @param tableId The table id. - * @return Optional table that matches this filter. - */ - Optional<Table> findByDatabaseAndId(Database database, Long tableId); - -} diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/UnitRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/UnitRepository.java deleted file mode 100644 index 403bb5378691de2a252be79ac8a88df22d2403fa..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/UnitRepository.java +++ /dev/null @@ -1,20 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.table.columns.TableColumnUnit; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -public interface UnitRepository extends JpaRepository<TableColumnUnit, Long> { - - /** - * Finds a semantic unit by URI. - * - * @param uri The URI. - * @return Optional semantic unit that matches this filter. - */ - Optional<TableColumnUnit> findByUri(String uri); - -} diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ViewRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ViewRepository.java deleted file mode 100644 index 46600d244e6699100348ec04cc76e0cfc00cd735..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ViewRepository.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.View; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Optional; -import java.util.UUID; - -@Repository -public interface ViewRepository extends JpaRepository<View, Long> { - - List<View> findAllPublicByDatabaseId(Long databaseId); - - List<View> findAllPublicOrMineByDatabaseId(Long databaseId, UUID userId); - - Optional<View> findPublicByDatabaseIdAndId(Long databaseId, Long id); - - Optional<View> findPublicOrMineByDatabaseIdAndId(Long databaseId, Long id, UUID userId); - -} - diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/ConceptIdxRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/ConceptIdxRepository.java deleted file mode 100644 index a311002ac39720e119e81a050b0655cdb107aa36..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/ConceptIdxRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.database.table.columns.concepts.ConceptDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ConceptIdxRepository extends ElasticsearchRepository<ConceptDto, String> { -} \ No newline at end of file diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java deleted file mode 100644 index 45e42d1515bbc6f94001363ce647a5d8472c9f6c..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.identifier.IdentifierDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface IdentifierIdxRepository extends ElasticsearchRepository<IdentifierDto, Long> { -} \ No newline at end of file diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java deleted file mode 100644 index d05a03a7b1c09a4917824b66ab4402e43c818057..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.database.table.columns.ColumnDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; - -public interface TableColumnIdxRepository extends ElasticsearchRepository<ColumnDto, Long> { -} \ No newline at end of file diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java deleted file mode 100644 index e9a69076c0caf10685f549853e4f7e88ea647e21..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.database.table.TableDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface TableIdxRepository extends ElasticsearchRepository<TableDto, Long> { -} \ No newline at end of file diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/UnitIdxRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/UnitIdxRepository.java deleted file mode 100644 index 5b7301819e945ea130bb868f90ef0fcb03474266..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/UnitIdxRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.database.table.columns.concepts.UnitDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface UnitIdxRepository extends ElasticsearchRepository<UnitDto, String> { -} \ No newline at end of file diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/UserIdxRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/UserIdxRepository.java deleted file mode 100644 index 8f22ea7fe5e692a94a09799d74ae144605cd7bf3..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/UserIdxRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.user.UserDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -import java.util.UUID; - -@Repository -public interface UserIdxRepository extends ElasticsearchRepository<UserDto, UUID> { -} \ No newline at end of file diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/ViewIdxRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/ViewIdxRepository.java deleted file mode 100644 index da608f39eb1959c0971cd42e8fc8535e1e7f70f4..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/ViewIdxRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.database.ViewDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ViewIdxRepository extends ElasticsearchRepository<ViewDto, Long> { -} \ No newline at end of file diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java index d3c26da5659dd1f6c84141a74854c76972c69c79..1c9ade9d90a6ad7d7cb4a809fc64a33f23b2905b 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java @@ -151,7 +151,7 @@ public class AccessEndpoint { }) public ResponseEntity<DatabaseAccessDto> find(@NotBlank @PathVariable("id") Long databaseId, @NotNull Principal principal) throws NotAllowedException, - AccessDeniedException { + AccessDeniedException, DatabaseNotFoundException { log.debug("endpoint check access to database, databaseId={}, {}", databaseId, PrincipalUtil.formatForDebug(principal)); final DatabaseAccess access = accessService.find(databaseId, UserUtil.getId(principal)); final DatabaseAccessDto dto = databaseMapper.databaseAccessToDatabaseAccessDto(access); diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java index e81247931d562290a34bad3591988f79de3b61d0..04f49f65b80f1361bef8689f62306e60521b9fba 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java @@ -10,10 +10,7 @@ import at.tuwien.exception.ContainerNotFoundException; import at.tuwien.exception.ImageNotFoundException; import at.tuwien.mapper.ContainerMapper; import at.tuwien.service.ContainerService; -import at.tuwien.service.UserService; -import at.tuwien.service.impl.ContainerServiceImpl; import at.tuwien.utils.PrincipalUtil; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java index bcd669c573f37062f918a69d66e166b16141a220..57b62ef6699fc6443f72709392a3ab67d671dac2 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java @@ -9,11 +9,9 @@ import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.mapper.DatabaseMapper; -import at.tuwien.repository.mdb.DatabaseAccessRepository; import at.tuwien.service.*; import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.UserUtil; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; @@ -44,27 +42,24 @@ import java.util.stream.Collectors; public class DatabaseEndpoint { private final UserService userService; + private final RabbitConfig rabbitConfig; private final AccessService accessService; private final DatabaseMapper databaseMapper; - private final RabbitConfig rabbitMqConfig; private final DatabaseService databaseService; private final QueryStoreService queryStoreService; private final MessageQueueService messageQueueService; - private final DatabaseAccessRepository databaseAccessRepository; @Autowired - public DatabaseEndpoint(DatabaseMapper databaseMapper, UserService userService, RabbitConfig rabbitMqConfig, + public DatabaseEndpoint(DatabaseMapper databaseMapper, UserService userService, RabbitConfig rabbitConfig, DatabaseService databaseService, QueryStoreService queryStoreService, - AccessService accessService, MessageQueueService messageQueueService, - DatabaseAccessRepository databaseAccessRepository) { + AccessService accessService, MessageQueueService messageQueueService) { this.userService = userService; - this.rabbitMqConfig = rabbitMqConfig; + this.rabbitConfig = rabbitConfig; this.accessService = accessService; this.databaseMapper = databaseMapper; this.databaseService = databaseService; this.queryStoreService = queryStoreService; this.messageQueueService = messageQueueService; - this.databaseAccessRepository = databaseAccessRepository; } @GetMapping @@ -196,7 +191,9 @@ public class DatabaseEndpoint { final User user = userService.findByUsername(principal.getName()); final Database database = databaseService.create(createDto, principal); queryStoreService.create(database.getId(), principal); - databaseAccessRepository.save(databaseMapper.defaultCreatorAccess(database, UserUtil.getId(principal))); + accessService.create(database.getId(), user.getId(), DatabaseGiveAccessDto.builder() + .type(AccessTypeDto.WRITE_ALL) + .build()); final DatabaseBriefDto dto = databaseMapper.databaseToDatabaseBriefDto(database); log.trace("create database resulted in database {}", dto); return ResponseEntity.status(HttpStatus.CREATED) @@ -313,70 +310,11 @@ public class DatabaseEndpoint { } if (principal != null) { /* extra effort only when logged-in */ - final ExchangeDto exchange = messageQueueService.findExchange(rabbitMqConfig.getExchangeName()); + final ExchangeDto exchange = messageQueueService.findExchange(rabbitConfig.getExchangeName()); dto.setExchangeType(exchange.getType()); } log.trace("find database resulted in dto {}", dto); return ResponseEntity.ok(dto); } - @DeleteMapping("/{id}") - @Transactional(rollbackFor = Exception.class) - @PreAuthorize("hasAuthority('delete-database')") - @Observed(name = "dbr_database_delete") - @Operation(summary = "Delete some database", security = @SecurityRequirement(name = "bearerAuth")) - @ApiResponses(value = { - @ApiResponse(responseCode = "201", - description = "Deleted a database", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = DatabaseBriefDto.class))}), - @ApiResponse(responseCode = "400", - description = "Database delete query is malformed", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - @ApiResponse(responseCode = "404", - description = "Container or database could not be found", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - @ApiResponse(responseCode = "405", - description = "Database delete permission is missing or revoke permissions at broker service failed", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - @ApiResponse(responseCode = "406", - description = "Failed to delete user at broker service or virtual host could not be reached at broker service", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - @ApiResponse(responseCode = "501", - description = "Container image is not supported", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - @ApiResponse(responseCode = "502", - description = "Connection to the container failed", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - @ApiResponse(responseCode = "503", - description = "Connection to the database failed", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - }) - public ResponseEntity<?> delete(@NotNull @PathVariable Long id, Principal principal) - throws DatabaseNotFoundException, ImageNotSupportedException, DatabaseMalformedException, AmqpException, - QueryMalformedException, UserNotFoundException, BrokerVirtualHostGrantException, - DatabaseConnectionException, KeycloakRemoteException, AccessDeniedException, BrokerRemoteException { - log.debug("endpoint delete database, id={}, {}", id, PrincipalUtil.formatForDebug(principal)); - databaseService.findById(id); - final User user = userService.findByUsername(principal.getName()); - databaseService.delete(id, user.getId()); - return ResponseEntity.accepted() - .build(); - } - } diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ExportEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ExportEndpoint.java index 6c58d8509cfc45bd470addd602a291126110848e..666b81b3935952e297412817ae7d6f8f9d22777f 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ExportEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ExportEndpoint.java @@ -9,7 +9,6 @@ import at.tuwien.service.DatabaseService; import at.tuwien.service.QueryService; import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.UserUtil; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java index ef1006ed70994850ee6f8d32fd18b1c54336a09d..e43e5fd4e6cf1c109377d38492b7ae4f16dd9999 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java @@ -5,16 +5,16 @@ import at.tuwien.api.identifier.IdentifierDto; import at.tuwien.api.identifier.IdentifierSaveDto; import at.tuwien.api.identifier.IdentifierTypeDto; import at.tuwien.api.user.external.ExternalMetadataDto; +import at.tuwien.entities.database.Database; +import at.tuwien.entities.database.View; +import at.tuwien.entities.database.table.Table; import at.tuwien.entities.identifier.Identifier; import at.tuwien.exception.*; import at.tuwien.mapper.IdentifierMapper; -import at.tuwien.service.AccessService; -import at.tuwien.service.IdentifierService; -import at.tuwien.service.MetadataService; -import at.tuwien.service.UserService; +import at.tuwien.querystore.Query; +import at.tuwien.service.*; import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.UserUtil; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; @@ -43,15 +43,25 @@ import java.util.stream.Collectors; @RequestMapping("/api/identifier") public class IdentifierEndpoint { + private final ViewService viewService; + private final TableService tableService; + private final StoreService storeService; private final AccessService accessService; + private final DatabaseService databaseService; private final MetadataService metadataService; private final IdentifierMapper identifierMapper; private final IdentifierService identifierService; @Autowired - public IdentifierEndpoint(AccessService accessService, MetadataService metadataService, - IdentifierMapper identifierMapper, IdentifierService identifierService) { + public IdentifierEndpoint(ViewService viewService, TableService tableService, StoreService storeService, + AccessService accessService, DatabaseService databaseService, + MetadataService metadataService, IdentifierMapper identifierMapper, + IdentifierService identifierService) { + this.viewService = viewService; + this.tableService = tableService; + this.storeService = storeService; this.accessService = accessService; + this.databaseService = databaseService; this.metadataService = metadataService; this.identifierMapper = identifierMapper; this.identifierService = identifierService; @@ -71,9 +81,10 @@ public class IdentifierEndpoint { public ResponseEntity<List<IdentifierDto>> list(@RequestParam(required = false) Long dbid, @RequestParam(required = false) Long qid, @RequestParam(required = false) Long vid, + @RequestParam(required = false) Long tid, @RequestParam(required = false) IdentifierTypeDto type) { - log.debug("endpoint find identifiers, dbid={}, qid={}, vid={}, type={}", dbid, qid, vid, type); - final List<IdentifierDto> dto = identifierService.findAll(type, dbid, qid, vid) + log.debug("endpoint find identifiers, dbid={}, qid={}, vid={}, tid={}, type={}", dbid, qid, vid, tid, type); + final List<IdentifierDto> dto = identifierService.findAll(type, dbid, qid, vid, tid) .stream() .map(identifierMapper::identifierToIdentifierDto) .collect(Collectors.toList()); @@ -102,6 +113,11 @@ public class IdentifierEndpoint { content = {@Content( mediaType = "application/json", schema = @Schema(implementation = ApiErrorDto.class))}), + @ApiResponse(responseCode = "404", + description = "Failed to find database, table or view", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), @ApiResponse(responseCode = "405", description = "Creating identifier not permitted", content = {@Content( @@ -128,18 +144,9 @@ public class IdentifierEndpoint { throws IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException, UserNotFoundException, DatabaseNotFoundException, IdentifierRequestException, NotAllowedException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, - ImageNotSupportedException { + ImageNotSupportedException, IdentifierNotFoundException, TableNotFoundException, TableMalformedException, + QueryMalformedException, FileStorageException, DataDbSidecarException { log.debug("endpoint create identifier, data={}, {}", data, PrincipalUtil.formatForDebug(principal)); - if (data.getType().equals(IdentifierTypeDto.SUBSET) && (data.getQueryId() == null || data.getViewId() != null)) { - log.error("Identifier of type subset need to have a qid and not a vid present"); - throw new IdentifierRequestException("Identifier of type subset need to have a qid and not a vid present"); - } else if (data.getType().equals(IdentifierTypeDto.DATABASE) && (data.getQueryId() != null || data.getViewId() != null)) { - log.error("Identifier of type database must not have a qid and not a vid present"); - throw new IdentifierRequestException("Identifier of type database must not have a qid and not a vid present"); - } else if (data.getType().equals(IdentifierTypeDto.VIEW) && data.getQueryId() != null) { - log.error("Identifier of type view must not have a qid present"); - throw new IdentifierRequestException("Identifier of type database must not have a qid present"); - } try { accessService.find(data.getDatabaseId(), UserUtil.getId(principal)); } catch (AccessDeniedException e) { @@ -148,6 +155,52 @@ public class IdentifierEndpoint { throw new NotAllowedException("Failed to create identifier: insufficient access"); } } + final Database database = databaseService.find(data.getDatabaseId()); + switch (data.getType()) { + case VIEW -> { + if (data.getDatabaseId() == null || data.getQueryId() != null || data.getViewId() == null || data.getTableId() != null) { + log.error("Failed to create identifier: only parameters database_id & view_id must be present"); + throw new IdentifierRequestException("Failed to create identifier: only parameters database_id & view_id must be present"); + } + final View view = viewService.findById(data.getViewId()); + if (!database.getOwnedBy().equals(UserUtil.getId(principal)) && !view.getCreatedBy().equals(UserUtil.getId(principal))) { + log.error("Failed to create identifier: insufficient role"); + throw new IdentifierRequestException("Failed to create identifier: insufficient role"); + } + } + case TABLE -> { + if (data.getDatabaseId() == null || data.getQueryId() != null || data.getViewId() != null || data.getTableId() == null) { + log.error("Failed to create identifier: only parameters database_id & table_id must be present"); + throw new IdentifierRequestException("Failed to create identifier: only parameters database_id & table_id must be present"); + } + final Table table = tableService.find(data.getDatabaseId(), data.getTableId()); + if (!database.getOwnedBy().equals(UserUtil.getId(principal)) && !table.getOwnedBy().equals(UserUtil.getId(principal))) { + log.error("Failed to create identifier: insufficient role"); + throw new IdentifierRequestException("Failed to create identifier: insufficient role"); + } + } + case SUBSET -> { + if (data.getDatabaseId() == null || data.getQueryId() == null || data.getViewId() != null || data.getTableId() != null) { + log.error("Failed to create identifier: only parameters database_id & query_id must be present"); + throw new IdentifierRequestException("Failed to create identifier: only parameters database_id & query_id must be present"); + } + final Query query = storeService.findOne(data.getDatabaseId(), data.getQueryId(), principal); + if (!database.getOwnedBy().equals(UserUtil.getId(principal)) && !query.getCreatedBy().equals(UserUtil.getId(principal).toString())) { + log.error("Failed to create identifier: insufficient role"); + throw new IdentifierRequestException("Failed to create identifier: insufficient role"); + } + } + case DATABASE -> { + if (data.getDatabaseId() == null || data.getQueryId() != null || data.getViewId() != null || data.getTableId() != null) { + log.error("Failed to create identifier: only parameters database_id must be present"); + throw new IdentifierRequestException("Failed to create identifier: only parameters database_id must be present"); + } + if (!database.getOwnedBy().equals(UserUtil.getId(principal))) { + log.error("Failed to create identifier: insufficient role"); + throw new IdentifierRequestException("Failed to create identifier: insufficient role"); + } + } + } final Identifier identifier = identifierService.create(data, principal); return ResponseEntity.status(HttpStatus.CREATED) .body(identifierMapper.identifierToIdentifierDto(identifier)); diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java index 6b98c6fb38b28f103d9c96495783d437a8c94182..e1290d84fc071a042adc47e5f50ff5d863e91100 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java @@ -13,7 +13,6 @@ import at.tuwien.exception.UserNotFoundException; import at.tuwien.mapper.ImageMapper; import at.tuwien.service.impl.ImageServiceImpl; import at.tuwien.utils.PrincipalUtil; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java index c7ad83c5f19ac25bec2cd86bdcbe5a311c0f06c4..ff5fe1f8f67998e2946754900444719050951dea 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java @@ -3,7 +3,6 @@ package at.tuwien.endpoints; import at.tuwien.api.database.LicenseDto; import at.tuwien.mapper.LicenseMapper; import at.tuwien.service.LicenseService; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MetadataEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MetadataEndpoint.java index 6790db5c78df4a33c8b2fdbd2d1878c407efec16..de700f7aa77f5b8a818ce025389c14d97b705238 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MetadataEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MetadataEndpoint.java @@ -5,7 +5,6 @@ import at.tuwien.oaipmh.OaiErrorType; import at.tuwien.oaipmh.OaiListIdentifiersParameters; import at.tuwien.oaipmh.OaiRecordParameters; import at.tuwien.service.MetadataService; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -15,14 +14,12 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import lombok.extern.log4j.Log4j2; -import org.apache.commons.lang3.math.NumberUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; -import java.util.stream.Stream; @Log4j2 @CrossOrigin(origins = "*") diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/OntologyEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/OntologyEndpoint.java index dab0740a04654dcc86f18c5c99e8a56988e4a103..649c51dfe11c924bc24ea8108892022be2b80fb5 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/OntologyEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/OntologyEndpoint.java @@ -8,7 +8,6 @@ import at.tuwien.mapper.OntologyMapper; import at.tuwien.service.EntityService; import at.tuwien.service.OntologyService; import at.tuwien.utils.PrincipalUtil; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; @@ -187,12 +186,17 @@ public class OntologyEndpoint { content = {@Content( mediaType = "application/json", schema = @Schema(implementation = ApiErrorDto.class))}), + @ApiResponse(responseCode = "422", + description = "Ontology does not have rdf or sparql endpoint", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), }) public ResponseEntity<List<EntityDto>> find(@NotNull @PathVariable("id") Long id, @RequestParam(name = "label", required = false) String label, @RequestParam(name = "uri", required = false) String uri) throws OntologyNotFoundException, QueryMalformedException, UriMalformedException, - FilterBadRequestException { + FilterBadRequestException, OntologyInvalidException { log.debug("endpoint find entities by uri, id={}, label={}, uri={}", id, label, uri); final Ontology ontology = ontologyService.find(id); /* check */ diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/PersistenceEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/PersistenceEndpoint.java index 0cd22a58a3c9ab11881d3372adb48c57d4c87665..dda30b78d036ffe4ad6b7334de795410135d172a 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/PersistenceEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/PersistenceEndpoint.java @@ -3,15 +3,11 @@ package at.tuwien.endpoints; import at.tuwien.api.error.ApiErrorDto; import at.tuwien.api.identifier.BibliographyTypeDto; import at.tuwien.api.identifier.IdentifierDto; -import at.tuwien.api.identifier.IdentifierSaveDto; import at.tuwien.config.EndpointConfig; import at.tuwien.entities.identifier.Identifier; import at.tuwien.exception.*; import at.tuwien.mapper.IdentifierMapper; -import at.tuwien.service.AccessService; import at.tuwien.service.IdentifierService; -import at.tuwien.utils.UserUtil; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -41,15 +37,13 @@ import java.util.regex.Pattern; @RequestMapping("/api/pid") public class PersistenceEndpoint { - private final AccessService accessService; private final EndpointConfig endpointConfig; private final IdentifierMapper identifierMapper; private final IdentifierService identifierService; @Autowired - public PersistenceEndpoint(AccessService accessService, EndpointConfig endpointConfig, - IdentifierMapper identifierMapper, IdentifierService identifierService) { - this.accessService = accessService; + public PersistenceEndpoint(EndpointConfig endpointConfig, IdentifierMapper identifierMapper, + IdentifierService identifierService) { this.endpointConfig = endpointConfig; this.identifierMapper = identifierMapper; this.identifierService = identifierService; @@ -150,62 +144,6 @@ public class PersistenceEndpoint { .build(); } - @PutMapping("/{id}") - @Transactional - @Observed(name = "dbr_pid_update") - @PreAuthorize("hasAuthority('modify-identifier-metadata')") - @Operation(summary = "Update some identifier", security = @SecurityRequirement(name = "bearerAuth")) - @ApiResponses(value = { - @ApiResponse(responseCode = "202", - description = "Updated identifier", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = IdentifierDto.class))}), - @ApiResponse(responseCode = "400", - description = "Identifier data is not valid to the form", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - @ApiResponse(responseCode = "404", - description = "Identifier or user could not be found", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - @ApiResponse(responseCode = "405", - description = "Updating identifier not permitted", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - @ApiResponse(responseCode = "406", - description = "Updating identifier not allowed", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - }) - public ResponseEntity<IdentifierDto> update(@NotNull @PathVariable("id") Long id, - @NotNull @Valid @RequestBody IdentifierSaveDto data, - @NotNull Principal principal) - throws IdentifierNotFoundException, IdentifierRequestException, UserNotFoundException, NotAllowedException, - QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, QueryStoreException, - DatabaseConnectionException, ImageNotSupportedException { - log.debug("endpoint update identifier, id={}, data={}", id, data); - final Identifier identifier = identifierService.find(id); - try { - accessService.find(identifier.getDatabase().getId(), UserUtil.getId(principal)); - } catch (AccessDeniedException e) { - if (!UserUtil.hasRole(principal, "modify-identifier-metadata")) { - log.error("Failed to update identifier: insufficient access"); - throw new NotAllowedException("Failed to update identifier: insufficient access"); - } - } - /* check */ - final IdentifierDto dto = identifierMapper.identifierToIdentifierDto(identifierService.update(id, data, principal)); - log.info("Update identifier with pid: {}", dto.getId()); - log.trace("updated identifier: {}", dto); - return ResponseEntity.accepted() - .body(dto); - } - @DeleteMapping("/{id}") @Transactional @Observed(name = "dbr_pid_delete") @@ -216,7 +154,7 @@ public class PersistenceEndpoint { description = "Deleted identifier", content = {@Content}), @ApiResponse(responseCode = "404", - description = "Identifier could not be found", + description = "Identifier or database could not be found", content = {@Content( mediaType = "application/json", schema = @Schema(implementation = ApiErrorDto.class))}), @@ -227,7 +165,7 @@ public class PersistenceEndpoint { schema = @Schema(implementation = ApiErrorDto.class))}) }) public ResponseEntity<?> delete(@NotNull @PathVariable("id") Long id) - throws IdentifierNotFoundException, NotAllowedException { + throws IdentifierNotFoundException, NotAllowedException, DatabaseNotFoundException { log.debug("endpoint delete identifier, id={}", id); final Identifier identifier = identifierService.find(id); if (identifier.getDoi() != null) { diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/QueryEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/QueryEndpoint.java index 2eceec710136d91ddb996dee7d42c17a2b94bdba..612ad08e75e619937e2bac2383caaf46cb7f1abb 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/QueryEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/QueryEndpoint.java @@ -7,14 +7,12 @@ import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.entities.database.Database; import at.tuwien.exception.*; import at.tuwien.querystore.Query; -import at.tuwien.service.AccessService; import at.tuwien.service.DatabaseService; import at.tuwien.service.QueryService; import at.tuwien.service.StoreService; import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.UserUtil; import at.tuwien.validation.EndpointValidator; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; @@ -64,7 +62,7 @@ public class QueryEndpoint { @RequestParam(required = false) String sortColumn) throws DatabaseNotFoundException, ImageNotSupportedException, QueryStoreException, QueryMalformedException, ColumnParseException, UserNotFoundException, TableMalformedException, DatabaseConnectionException, - SortException, PaginationException, NotAllowedException, KeycloakRemoteException, AccessDeniedException { + SortException, PaginationException, NotAllowedException, KeycloakRemoteException, AccessDeniedException, QueryNotFoundException { log.debug("endpoint execute query, databaseId={}, data={}, page={}, size={}, sortDirection={}, sortColumn={}, {}", databaseId, data, page, size, sortDirection, sortColumn, PrincipalUtil.formatForDebug(principal)); /* check */ @@ -100,7 +98,7 @@ public class QueryEndpoint { log.debug("endpoint re-execute query, databaseId={}, queryId={}, page={}, size={}, sortDirection={}, sortColumn={}, {}", databaseId, queryId, page, size, sortDirection, sortColumn, PrincipalUtil.formatForDebug(principal)); endpointValidator.validateDataParams(page, size, sortDirection, sortColumn); - endpointValidator.validateOnlyAccessOrPublic(databaseId, queryId, principal); + endpointValidator.validateOnlyAccessOrPublic(databaseId, principal); /* execute */ final Query query = storeService.findOne(databaseId, queryId, principal); final QueryResultDto result = queryService.reExecute(databaseId, query, page, size, sortDirection, sortColumn, @@ -122,7 +120,7 @@ public class QueryEndpoint { QueryMalformedException, TableMalformedException, ColumnParseException, NotAllowedException, DatabaseConnectionException, UserNotFoundException, AccessDeniedException { log.debug("endpoint re-execute query count, databaseId={}, queryId={}, {}", databaseId, queryId, PrincipalUtil.formatForDebug(principal)); - endpointValidator.validateOnlyAccessOrPublic(databaseId, queryId, principal); + endpointValidator.validateOnlyAccessOrPublic(databaseId, principal); /* execute */ final Query query = storeService.findOne(databaseId, queryId, principal); final Long result = queryService.reExecuteCount(databaseId, query, principal); diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/SemanticsEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/SemanticsEndpoint.java index f210fe1e527dd5822c0abb00a3e9f0a9d6f3307f..1fb5b883e6481cfbf5eacc56eb1281c82f271cfc 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/SemanticsEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/SemanticsEndpoint.java @@ -1,21 +1,14 @@ package at.tuwien.endpoints; import at.tuwien.api.database.table.columns.concepts.ConceptDto; -import at.tuwien.api.database.table.columns.concepts.ConceptSaveDto; import at.tuwien.api.database.table.columns.concepts.UnitDto; -import at.tuwien.api.database.table.columns.concepts.UnitSaveDto; import at.tuwien.api.error.ApiErrorDto; import at.tuwien.api.semantics.EntityDto; import at.tuwien.api.semantics.TableColumnEntityDto; -import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.TableColumnNotFoundException; -import at.tuwien.exception.TableNotFoundException; -import at.tuwien.mapper.OntologyMapper; +import at.tuwien.exception.*; import at.tuwien.mapper.SemanticMapper; import at.tuwien.service.EntityService; import at.tuwien.service.SemanticService; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; @@ -24,7 +17,6 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.security.SecurityRequirement; -import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; @@ -42,15 +34,13 @@ import java.util.List; public class SemanticsEndpoint { private final SemanticMapper semanticMapper; - private final OntologyMapper ontologyMapper; private final SemanticService semanticService; private final EntityService entityService; @Autowired - public SemanticsEndpoint(SemanticMapper semanticMapper, OntologyMapper ontologyMapper, - SemanticService semanticService, EntityService entityService) { + public SemanticsEndpoint(SemanticMapper semanticMapper, SemanticService semanticService, + EntityService entityService) { this.semanticMapper = semanticMapper; - this.ontologyMapper = ontologyMapper; this.semanticService = semanticService; this.entityService = entityService; } @@ -77,26 +67,6 @@ public class SemanticsEndpoint { .body(dtos); } - @PostMapping("/concept") - @Transactional - @PreAuthorize("hasAuthority('create-semantic-concept')") - @Observed(name = "dbr_semantic_concepts_save") - @Operation(summary = "Create or update a semantic concept", security = @SecurityRequirement(name = "bearerAuth")) - @ApiResponses(value = { - @ApiResponse(responseCode = "202", - description = "Saved a semantic concept", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ConceptDto.class))}), - }) - public ResponseEntity<ConceptDto> saveConcept(@NotNull @Valid @RequestBody ConceptSaveDto data) { - log.debug("endpoint save concept, data={}", data); - final ConceptDto dto = ontologyMapper.tableColumnConceptToConceptDto(semanticService.saveConcept(data)); - log.trace("save concept resulted in dto {}", dto); - return ResponseEntity.accepted() - .body(dto); - } - @GetMapping("/unit") @Transactional(readOnly = true) @Observed(name = "dbr_semantic_units_findall") @@ -119,26 +89,6 @@ public class SemanticsEndpoint { .body(dtos); } - @PostMapping("/unit") - @Transactional - @PreAuthorize("hasAuthority('create-semantic-unit')") - @Observed(name = "dbr_semantic_units_save") - @Operation(summary = "Save a semantic unit", security = @SecurityRequirement(name = "bearerAuth")) - @ApiResponses(value = { - @ApiResponse(responseCode = "202", - description = "Saved a semantic unit", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = UnitDto.class))}), - }) - public ResponseEntity<UnitDto> saveUnit(@NotNull @Valid @RequestBody UnitSaveDto data) { - log.debug("endpoint save or update unit, data={}", data); - final UnitDto dto = ontologyMapper.tableColumnUnitToUnitDto(semanticService.saveUnit(data)); - log.trace("save unit resulted in dto {}", dto); - return ResponseEntity.accepted() - .body(dto); - } - @GetMapping("/database/{databaseId}/table/{tableId}") @Transactional(readOnly = true) @PreAuthorize("hasAuthority('table-semantic-analyse')") @@ -160,10 +110,15 @@ public class SemanticsEndpoint { content = {@Content( mediaType = "application/json", schema = @Schema(implementation = ApiErrorDto.class))}), + @ApiResponse(responseCode = "422", + description = "Ontology does not have rdf or sparql endpoint", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), }) public ResponseEntity<List<EntityDto>> analyseTable(@NotNull @PathVariable("databaseId") Long databaseId, @NotNull @PathVariable("tableId") Long tableId) - throws TableNotFoundException, QueryMalformedException, DatabaseNotFoundException { + throws TableNotFoundException, QueryMalformedException, DatabaseNotFoundException, OntologyInvalidException { log.debug("endpoint analyse table semantics, databaseId={}, tableId={}", databaseId, tableId); final List<EntityDto> dtos = entityService.suggestTableSemantics(databaseId, tableId); log.trace("analyse table semantics resulted in dtos {}", dtos); @@ -192,11 +147,17 @@ public class SemanticsEndpoint { content = {@Content( mediaType = "application/json", schema = @Schema(implementation = ApiErrorDto.class))}), + @ApiResponse(responseCode = "422", + description = "Ontology does not have rdf or sparql endpoint", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), }) public ResponseEntity<List<TableColumnEntityDto>> analyseTableColumn(@NotNull @PathVariable("databaseId") Long databaseId, @NotNull @PathVariable("tableId") Long tableId, @NotNull @PathVariable("columnId") Long columnId) - throws QueryMalformedException, TableColumnNotFoundException { + throws QueryMalformedException, TableColumnNotFoundException, TableNotFoundException, DatabaseNotFoundException, + OntologyInvalidException { log.debug("endpoint analyse table column semantics, databaseId={}, tableId={}, columnId={}", databaseId, tableId, columnId); final List<TableColumnEntityDto> dtos = entityService.suggestTableColumnSemantics(databaseId, tableId, columnId); log.trace("analyse table semantics resulted in dtos {}", dtos); diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/StoreEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/StoreEndpoint.java index 435718e4573037f041d6c98c9ca2671ccfaa1c6e..bb5d1287716605286853b81bcc90a3c36123f753 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/StoreEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/StoreEndpoint.java @@ -18,7 +18,6 @@ import at.tuwien.service.UserService; import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.UserUtil; import at.tuwien.validation.EndpointValidator; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; @@ -119,7 +118,9 @@ public class StoreEndpoint { AccessDeniedException { log.debug("endpoint list queries, databaseId={}, persisted={}, {}", databaseId, persisted, PrincipalUtil.formatForDebug(principal)); endpointValidator.validateOnlyAccessOrPublic(databaseId, principal); + /* find all from data database */ final List<Query> queries = storeService.findAll(databaseId, persisted, principal); + /* add identifiers from metadata database */ final List<IdentifierBriefDto> identifiers = identifierService.findAllSubsetIdentifiers() .stream() .map(identifierMapper::identifierToIdentifierBriefDto) @@ -127,10 +128,10 @@ public class StoreEndpoint { final List<QueryBriefDto> dto = queries.stream() .map(queryMapper::queryToQueryBriefDto) .peek(q -> { - final Optional<IdentifierBriefDto> optional = identifiers.stream() + final List<IdentifierBriefDto> subsetIdentifiers = identifiers.stream() .filter(i -> i.getDatabaseId().equals(databaseId) && i.getQueryId().equals(q.getId())) - .findFirst(); - optional.ifPresent(q::setIdentifier); + .toList(); + q.setIdentifiers(subsetIdentifiers); }) .collect(Collectors.toList()); log.trace("find queries resulted in queries {}", dto); @@ -181,14 +182,16 @@ public class StoreEndpoint { DatabaseConnectionException, KeycloakRemoteException, AccessDeniedException { log.debug("endpoint find query, databaseId={}, queryId={}, {}", databaseId, queryId, PrincipalUtil.formatForDebug(principal)); /* check */ - endpointValidator.validateOnlyAccessOrPublic(databaseId, queryId, principal); + endpointValidator.validateOnlyAccessOrPublic(databaseId, principal); /* find */ final Query query = storeService.findOne(databaseId, queryId, principal); final QueryDto dto = queryMapper.queryToQueryDto(query); dto.setCreator(userMapper.userToUserDto(userService.findByUsername(query.getCreatedBy()))); final List<Identifier> identifiers = identifierService.findByDatabaseIdAndQueryId(databaseId, queryId); if (!identifiers.isEmpty()) { - dto.setIdentifier(identifierMapper.identifierToIdentifierDto(identifiers.get(0))); + dto.setIdentifiers(identifiers.stream() + .map(identifierMapper::identifierToIdentifierDto) + .toList()); } log.trace("find query resulted in query {}", dto); return ResponseEntity.ok(dto); diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableColumnEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableColumnEndpoint.java index 4b515952b62b2193d9ffbcf22fb4fe95dce72f56..3cc440c088ba49caee6d7b5888193c65274125fd 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableColumnEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableColumnEndpoint.java @@ -10,7 +10,6 @@ import at.tuwien.service.TableService; import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.UserUtil; import at.tuwien.validation.EndpointValidator; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableDataEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableDataEndpoint.java index 61fbb537ddf8169a3aedac513c888313b4db2a82..f2e1fb567c74bf3648ea95773c64a0c4cd0410d0 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableDataEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableDataEndpoint.java @@ -5,7 +5,6 @@ import at.tuwien.api.database.query.ImportDto; import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.api.database.table.TableCsvDeleteDto; import at.tuwien.api.database.table.TableCsvDto; -import at.tuwien.api.database.table.TableCsvUpdateDto; import at.tuwien.entities.database.Database; import at.tuwien.exception.*; import at.tuwien.service.DatabaseService; @@ -13,7 +12,6 @@ import at.tuwien.service.QueryService; import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.UserUtil; import at.tuwien.validation.EndpointValidator; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; @@ -68,28 +66,6 @@ public class TableDataEndpoint { .build(); } - @PutMapping - @Transactional - @Deprecated - @PreAuthorize("hasAuthority('insert-table-data')") - @Observed(name = "dbr_table_data_update") - @Operation(summary = "Update data", security = @SecurityRequirement(name = "bearerAuth")) - public ResponseEntity<Void> update(@NotNull @PathVariable("databaseId") Long databaseId, - @NotNull @PathVariable("tableId") Long tableId, - @NotNull @Valid @RequestBody TableCsvUpdateDto data, - @NotNull Principal principal) - throws TableNotFoundException, DatabaseNotFoundException, TableMalformedException, - ImageNotSupportedException, DatabaseConnectionException, QueryMalformedException, - UserNotFoundException, NotAllowedException, AccessDeniedException { - log.debug("endpoint update data, databaseId={}, tableId={}, data={}, {}", databaseId, tableId, data, PrincipalUtil.formatForDebug(principal)); - /* check */ - endpointValidator.validateOnlyWriteOwnOrWriteAllAccess(databaseId, tableId, principal); - /* update */ - queryService.update(databaseId, tableId, data, principal); - return ResponseEntity.accepted() - .build(); - } - @DeleteMapping @Transactional @PreAuthorize("hasAuthority('delete-table-data')") diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java index 0b0b27c16f6be592debe9f1d5e2d3de77776e8d2..f3a8601a8dab6aba00606da01f2160e6582a6982 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java @@ -14,7 +14,6 @@ import at.tuwien.service.TableService; import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.UserUtil; import at.tuwien.validation.EndpointValidator; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; @@ -141,7 +140,7 @@ public class TableEndpoint { @NotNull Principal principal) throws ImageNotSupportedException, DatabaseNotFoundException, TableMalformedException, AmqpException, TableNameExistsException, ContainerNotFoundException, UserNotFoundException, QueryMalformedException, - NotAllowedException, AccessDeniedException { + NotAllowedException, AccessDeniedException, TableNotFoundException { log.debug("endpoint create table, databaseId={}, createDto={}, {}", databaseId, createDto, PrincipalUtil.formatForDebug(principal)); /* checks */ if (createDto.getName().isBlank()) { @@ -189,7 +188,7 @@ public class TableEndpoint { Principal principal) throws TableNotFoundException, DatabaseNotFoundException, QueueNotFoundException, BrokerRemoteException { log.debug("endpoint find table, databaseId={}, tableId={}, {}", databaseId, tableId, PrincipalUtil.formatForDebug(principal)); - final Table table = tableService.findById(databaseId, tableId); + final Table table = tableService.find(databaseId, tableId); final TableDto dto = tableMapper.tableToTableDto(table); if (principal != null) { /* extra effort only when logged-in */ @@ -250,10 +249,17 @@ public class TableEndpoint { NotAllowedException { log.debug("endpoint delete table, databaseId={}, tableId={}, {}", databaseId, tableId, PrincipalUtil.formatForDebug(principal)); final Table table = tableService.find(databaseId, tableId); + /* roles */ if (!table.getOwner().getUsername().equals(principal.getName()) && !UserUtil.hasRole(principal, "delete-foreign-table")) { - log.error("Failed to delete table: not owned by you"); - throw new NotAllowedException("Failed to delete table: not owned by you"); + log.error("Failed to delete table: not owned by user with id {}", UserUtil.getId(principal)); + throw new NotAllowedException("Failed to delete table: not owned by user with id " + UserUtil.getId(principal)); + } + /* check */ + if (!table.getIdentifiers().isEmpty()) { + log.error("Failed to delete table: identifier already associated"); + throw new NotAllowedException("Failed to delete table: identifier already associated"); } + /* delete table */ tableService.deleteTable(databaseId, tableId); return ResponseEntity.accepted() .build(); diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableHistoryEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableHistoryEndpoint.java index 8e8c79d3f41f57f2f0175a8d2cba98f0cce579e2..f3f893fe355f8e78d4e1af28d4a5062bd22ec2c0 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableHistoryEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableHistoryEndpoint.java @@ -5,7 +5,6 @@ import at.tuwien.api.error.ApiErrorDto; import at.tuwien.exception.*; import at.tuwien.service.TableService; import at.tuwien.utils.PrincipalUtil; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java index 9e3f3d71e7b59e91fbc1e318ff49a61d2c47ba20..2d0b400e691058f7385063b7b2da3823335c825e 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java @@ -12,7 +12,6 @@ import at.tuwien.service.MessageQueueService; import at.tuwien.service.UserService; import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.UserUtil; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ViewEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ViewEndpoint.java index 5dbf52cd292dafaf49441a687ac440cdd1758001..cf9ae3a146f444cf0dd29cf2d3925834fcfbabe1 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ViewEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ViewEndpoint.java @@ -15,7 +15,6 @@ import at.tuwien.service.ViewService; import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.UserUtil; import at.tuwien.validation.EndpointValidator; -import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java index 6fa835e4d739ea08dc3d6b01cfa3226af648c17f..448843fc550c80e1f9cf125e22a23be8ac4f31ac 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java @@ -339,6 +339,18 @@ public class ApiExceptionHandler extends ResponseEntityExceptionHandler { return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); } + @Hidden + @ResponseStatus(HttpStatus.NO_CONTENT) + @ExceptionHandler(DatabaseUnchangedException.class) + public ResponseEntity<ApiErrorDto> handle(DatabaseUnchangedException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NO_CONTENT) + .message(e.getLocalizedMessage()) + .code("error.database.unchanged") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + @Hidden @ResponseStatus(HttpStatus.NOT_FOUND) @ExceptionHandler(ExchangeNotFoundException.class) @@ -879,6 +891,18 @@ public class ApiExceptionHandler extends ResponseEntityExceptionHandler { return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); } + @Hidden + @ResponseStatus(HttpStatus.UNPROCESSABLE_ENTITY) + @ExceptionHandler({OntologyInvalidException.class}) + public ResponseEntity<ApiErrorDto> handle(OntologyInvalidException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.UNPROCESSABLE_ENTITY) + .message(e.getLocalizedMessage()) + .code("error.ontology.invalid") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + @Hidden @ResponseStatus(HttpStatus.EXPECTATION_FAILED) @ExceptionHandler({UriMalformedException.class}) diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java index 3176f6327d630e022e1baa489effc539b61119d2..af5c852bfb4037dc0af88d8b06bd069f8a5a778b 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java @@ -10,8 +10,6 @@ import at.tuwien.entities.database.AccessType; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.entities.identifier.VisibilityType; import at.tuwien.exception.*; import at.tuwien.repository.mdb.IdentifierRepository; import at.tuwien.service.AccessService; @@ -161,7 +159,7 @@ public class EndpointValidator { log.error("Access not allowed: no authorization provided"); throw new NotAllowedException("Access not allowed: no authorization provided"); } - final Table table = tableService.findById(databaseId, tableId); + final Table table = tableService.find(databaseId, tableId); log.trace("principal: {}", principal.getName()); log.trace("table creator: {}", table.getCreatedBy()); final DatabaseAccess access = accessService.find(databaseId, UserUtil.getId(principal)); @@ -268,29 +266,6 @@ public class EndpointValidator { log.trace("found access {}", access); } - public void validateOnlyAccessOrPublic(Long databaseId, Long queryId, Principal principal) - throws NotAllowedException, DatabaseNotFoundException, AccessDeniedException { - final Optional<Identifier> optional = identifierRepository.findSubsetIdentifier(databaseId, queryId); - if (optional.isPresent()) { - final Identifier identifier = optional.get(); - log.trace("found identifier for query with id {}", queryId); - if (principal != null && identifier.getVisibility().equals(VisibilityType.SELF)) { - if (identifier.getCreatedBy().equals(UserUtil.getId(principal))) { - return; - } - log.error("Access not allowed: visibility is 'self' and user is not the creator"); - throw new NotAllowedException("Access not allowed: visibility is 'self' and you are not the creator"); - } - if (!identifier.getVisibility().equals(VisibilityType.EVERYONE)) { - log.error("Access not allowed: visibility is not 'everyone'"); - throw new NotAllowedException("Access not allowed: visibility is not 'everyone'"); - } - log.trace("identifier is public, validation passed"); - return; - } - validateOnlyAccessOrPublic(databaseId, principal); - } - public void validateOnlyWriteOwnOrWriteAllAccess(Long databaseId, Long tableId, Principal principal) throws DatabaseNotFoundException, TableNotFoundException, NotAllowedException, AccessDeniedException { final Table table = tableService.find(databaseId, tableId); diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/application-local.yml b/dbrepo-metadata-service/rest-service/src/main/resources/application-local.yml index 001d0734e7f7326876551df690ccb2bd1fbfd005..5db5076f6a90d66395f3803e235b11c2aa10bb8c 100644 --- a/dbrepo-metadata-service/rest-service/src/main/resources/application-local.yml +++ b/dbrepo-metadata-service/rest-service/src/main/resources/application-local.yml @@ -53,10 +53,12 @@ fda: base: https://example.com/pid/ broker: endpoint: http://localhost:15672 - minio: + s3: endpoint: http://localhost:9000 - accessKeyId: minioadmin - secretAccessKey: minioadmin + accessKeyId: seaweedfsadmin + secretAccessKey: seaweedfsadmin + importBucket: dbrepo-upload + exportBucket: dbrepo-download jwt: issuer: http://localhost/api/auth/realms/dbrepo public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB @@ -73,6 +75,9 @@ fda: exchangeName: "dbrepo" routingKey: "dbrepo.#" connectionTimeout: 60000 + mirrorRate: 60 + obtainMetadataRate: 60 + deleteStaleQueriesRate: 60 dbrepo: repository-name: TU Wien Database Repository base-url: https://dbrepo1.ec.tuwien.at/api/oai diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/application.yml b/dbrepo-metadata-service/rest-service/src/main/resources/application.yml index b5b7291016f2db218706f62b0940d498b0d37a1b..341ba025441566c796dd29d1bd945ffc1b344774 100644 --- a/dbrepo-metadata-service/rest-service/src/main/resources/application.yml +++ b/dbrepo-metadata-service/rest-service/src/main/resources/application.yml @@ -66,10 +66,12 @@ fda: base: "${PID_BASE}" broker: endpoint: "${BROKER_ENDPOINT}" - minio: + s3: endpoint: "${S3_STORAGE_ENDPOINT}" accessKeyId: "${S3_ACCESS_KEY_ID}" secretAccessKey: "${S3_SECRET_ACCESS_KEY}" + importBucket: "${S3_IMPORT_BUCKET}" + exportBucket: "${S3_EXPORT_BUCKET}" jwt: issuer: "${JWT_ISSUER}" public_key: "${JWT_PUBKEY}" @@ -86,6 +88,9 @@ fda: exchangeName: "${EXCHANGE_NAME}" routingKey: "${ROUTING_KEY}" connectionTimeout: ${CONNECTION_TIMEOUT} + mirrorRate: "${MIRROR_RATE}" + obtainMetadataRate: "${OBTAIN_METADATA_RATE}" + deleteStaleQueriesRate: "${DELETE_STALE_QUERIES_RATE}" dbrepo: repository-name: "${REPOSITORY_NAME}" base-url: "${BASE_URL}" diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/init/querystore.sql b/dbrepo-metadata-service/rest-service/src/main/resources/init/querystore.sql index a9042e9c08a66a07233fdb02cc42f52e74632793..7f70144d38e6dd048b770da4d8e78588e4ac3bd7 100644 --- a/dbrepo-metadata-service/rest-service/src/main/resources/init/querystore.sql +++ b/dbrepo-metadata-service/rest-service/src/main/resources/init/querystore.sql @@ -1,5 +1,5 @@ CREATE SEQUENCE `qs_queries_seq` NOCACHE; CREATE TABLE `qs_queries` ( `id` bigint not null primary key default nextval(`qs_queries_seq`), `created` datetime not null default now(), `executed` datetime not null default now(), `created_by` varchar(255) not null, `query` text not null, `query_normalized` text not null, `is_persisted` boolean not null, `query_hash` varchar(255) not null, `result_hash` varchar(255), `result_number` bigint ); CREATE PROCEDURE hash_table(IN name VARCHAR(255), OUT hash VARCHAR(255), OUT count BIGINT) BEGIN DECLARE _sql TEXT; SELECT CONCAT('SELECT SHA2(GROUP_CONCAT(CONCAT_WS(\'\',', GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name), ') SEPARATOR \',\'), 256) AS hash, COUNT(*) AS count FROM `', name, '` INTO @hash, @count;') FROM `information_schema`.`columns` WHERE `table_schema` = DATABASE() AND `table_name` = name INTO _sql; PREPARE stmt FROM _sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET hash = @hash; SET count = @count; END; -CREATE PROCEDURE store_query(IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) BEGIN DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); DECLARE _username varchar(255) DEFAULT REGEXP_REPLACE(current_user(), '@.*', ''); DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash, @count); IF @hash IS NULL THEN INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); ELSE INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; END; -CREATE DEFINER = 'root' PROCEDURE _store_query(IN _username VARCHAR(255), IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) BEGIN DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash, @count); IF @hash IS NULL THEN INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); ELSE INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; END; \ No newline at end of file +CREATE PROCEDURE store_query(IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) BEGIN DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); DECLARE _username varchar(255) DEFAULT REGEXP_REPLACE(current_user(), '@.*', ''); DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash, @count); IF @hash IS NULL THEN INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); ELSE INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; DROP TABLE IF EXISTS `_tmp`; END; +CREATE DEFINER = 'root' PROCEDURE _store_query(IN _username VARCHAR(255), IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) BEGIN DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash, @count); IF @hash IS NULL THEN INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); ELSE INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; DROP TABLE IF EXISTS `_tmp`; END; \ No newline at end of file diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/init/querystore_manual.sql b/dbrepo-metadata-service/rest-service/src/main/resources/init/querystore_manual.sql index f4885b924c5e49aacb15eb88179057a6523e041e..54053e098df898f1f4c26f2b29ec2d822662ceb2 100644 --- a/dbrepo-metadata-service/rest-service/src/main/resources/init/querystore_manual.sql +++ b/dbrepo-metadata-service/rest-service/src/main/resources/init/querystore_manual.sql @@ -50,6 +50,7 @@ BEGIN WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; + DROP TABLE IF EXISTS `_tmp`; END; $$ DELIMITER $$ @@ -72,6 +73,7 @@ BEGIN WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; + DROP TABLE IF EXISTS `_tmp`; END; $$ DELIMITER ; \ No newline at end of file diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/annotations/MockListeners.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/annotations/MockListeners.java new file mode 100644 index 0000000000000000000000000000000000000000..e5b7427ad085326da95a4c0e5335703823756cf7 --- /dev/null +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/annotations/MockListeners.java @@ -0,0 +1,17 @@ +package at.tuwien.annotations; + +import at.tuwien.listener.DatabaseListener; +import at.tuwien.listener.MirrorListener; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.boot.test.mock.mockito.MockBeans; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +@MockBeans({@MockBean(DatabaseListener.class), @MockBean(MirrorListener.class)}) +public @interface MockListeners { +} diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/annotations/MockOpensearch.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/annotations/MockOpensearch.java index 6e9580aab7d68ffbff7d339afef3edcadd1d4339..943c3cc0a62496ae87310d2d8ab64090511e246c 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/annotations/MockOpensearch.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/annotations/MockOpensearch.java @@ -1,12 +1,9 @@ package at.tuwien.annotations; import at.tuwien.repository.sdb.*; -import org.mockito.Mock; -import org.opensearch.client.sniff.OpenSearchNodesSniffer; import org.opensearch.client.sniff.Sniffer; import org.opensearch.spring.boot.autoconfigure.OpenSearchRestClientAutoConfiguration; import org.opensearch.spring.boot.autoconfigure.OpenSearchRestHighLevelClientAutoConfiguration; -import org.opensearch.spring.boot.autoconfigure.data.OpenSearchDataAutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.boot.test.mock.mockito.MockBeans; @@ -18,9 +15,7 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) -@MockBeans({@MockBean(DatabaseIdxRepository.class), @MockBean(UnitIdxRepository.class), @MockBean(ConceptIdxRepository.class), - @MockBean(TableIdxRepository.class), @MockBean(TableColumnIdxRepository.class), @MockBean(UserIdxRepository.class), - @MockBean(ViewIdxRepository.class), @MockBean(IdentifierIdxRepository.class), @MockBean(Sniffer.class)}) +@MockBeans({@MockBean(DatabaseIdxRepository.class), @MockBean(Sniffer.class)}) @EnableAutoConfiguration(exclude = {OpenSearchRestClientAutoConfiguration.class, OpenSearchRestHighLevelClientAutoConfiguration.class}) public @interface MockOpensearch { } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/MinioConfig.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/MinioConfig.java deleted file mode 100644 index 50740579d2cdff4b6f5dd317a299b8b927c40bee..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/MinioConfig.java +++ /dev/null @@ -1,62 +0,0 @@ -package at.tuwien.config; - -import io.minio.MakeBucketArgs; -import io.minio.MinioClient; -import io.minio.UploadObjectArgs; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.io.IOException; - -@Slf4j -@Configuration -public class MinioConfig { - - @Value("${fda.minio.endpoint}") - private String minioEndpoint; - - @Value("${fda.minio.accessKeyId}") - private String minioAccessKeyId; - - @Value("${fda.minio.secretAccessKey}") - private String minioSecretAccessKey; - - @Bean - public MinioClient minioClient() { - return MinioClient.builder() - .endpoint(minioEndpoint) - .credentials(minioAccessKeyId, minioSecretAccessKey) - .build(); - } - - public void makeBuckets(String... buckets) throws IOException { - for (String bucket : buckets) { - try { - minioClient().makeBucket(MakeBucketArgs.builder() - .bucket(bucket) - .build()); - log.debug("created bucket {}", bucket); - } catch (Exception e) { - log.error("Failed to make bucket {}", bucket); - throw new IOException("Failed to make bucket: " + e.getMessage()); - } - } - } - - public void uploadFile(String bucket, String filename, String key) throws IOException { - try { - minioClient().uploadObject(UploadObjectArgs.builder() - .bucket(bucket) - .filename(filename) - .object(key) - .build()); - log.debug("uploaded file into bucket {} with key {}", bucket, key); - } catch (Exception e) { - log.error("Failed to upload file into bucket {}", bucket); - throw new IOException("Failed to upload file into bucket: " + e.getMessage()); - } - } - -} diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/S3Config.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/S3Config.java new file mode 100644 index 0000000000000000000000000000000000000000..98ed8d5a219b848a54bcfcf197dc164736806076 --- /dev/null +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/S3Config.java @@ -0,0 +1,100 @@ +package at.tuwien.config; + +import io.minio.BucketExistsArgs; +import io.minio.MakeBucketArgs; +import io.minio.MinioClient; +import io.minio.UploadObjectArgs; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.file.Files; + +@Slf4j +@Getter +@Configuration +public class S3Config { + + @Value("${fda.s3.endpoint}") + private String s3Endpoint; + + @Value("${fda.s3.accessKeyId}") + private String s3AccessKeyId; + + @Value("${fda.s3.secretAccessKey}") + private String s3SecretAccessKey; + + @Value("${fda.s3.importBucket}") + private String s3ImportBucket; + + @Value("${fda.s3.exportBucket}") + private String s3ExportBucket; + + @Bean + public MinioClient minioClient() { + return MinioClient.builder() + .endpoint(s3Endpoint) + .credentials(s3AccessKeyId, s3SecretAccessKey) + .build(); + } + + public void makeBuckets(String... buckets) throws IOException { + for (String bucket : buckets) { + if (this.bucketExists(bucket)) { + continue; + } + try { + minioClient().makeBucket(MakeBucketArgs.builder() + .bucket(bucket) + .build()); + log.debug("created bucket {}", bucket); + } catch (Exception e) { + log.error("Failed to make bucket {}", bucket); + throw new IOException("Failed to make bucket: " + e.getMessage()); + } + } + } + + public boolean bucketExists(String bucket) throws IOException { + try { + final boolean result = minioClient().bucketExists(BucketExistsArgs.builder() + .bucket(bucket) + .build()); + log.trace("bucket {} does {}exist", bucket, result ? "" : "not"); + return result; + } catch (Exception e) { + log.error("Failed to check bucket {} existence", bucket); + throw new IOException("Failed to check bucket " + bucket + "existence: " + e.getMessage()); + } + } + + public void uploadFile(String bucket, String filepath, String filename) throws IOException { + final File file = new File(filepath); + if (!file.exists()) { + log.error("Failed to upload file at path {}: does not exist", filepath); + throw new IOException("Failed to upload file at path " + filepath + ": does not exist"); + } + if (!file.isFile()) { + log.error("Failed to upload file at path {}: is not a file", filepath); + throw new IOException("Failed to upload file at path " + filepath + ": is not a file"); + } + try { + minioClient().uploadObject(UploadObjectArgs.builder() + .bucket(bucket) + .filename(filepath) + .object(filename) + .build()); + log.debug("uploaded file into bucket {} with key {}", bucket, filename); + } catch (Exception e) { + log.error("Failed to upload file into bucket {}: {}", bucket, e.getMessage()); + throw new IOException("Failed to upload file into bucket " + bucket + ": " + e.getMessage()); + } + } + +} diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/AccessEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/AccessEndpointUnitTest.java index ecfdf29c8236eb0afddf498dad831cf014d391ba..7f3be6d6d59b0cf7aa9848a6566367f07573e7ff 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/AccessEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/AccessEndpointUnitTest.java @@ -108,7 +108,8 @@ public class AccessEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"check-database-access"}) - public void find_hasRoleHasAccess_succeeds() throws NotAllowedException, AccessDeniedException { + public void find_hasRoleHasAccess_succeeds() throws NotAllowedException, AccessDeniedException, + DatabaseNotFoundException { /* test */ generic_find(DATABASE_1_ID, DATABASE_1, DATABASE_1_USER_1_READ_ACCESS, USER_1_ID, USER_1_PRINCIPAL); @@ -181,7 +182,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"delete-database-access"}) public void revoke_succeeds() throws UserNotFoundException, QueryMalformedException, DatabaseNotFoundException, - DatabaseMalformedException, NotAllowedException, KeycloakRemoteException, AccessDeniedException { + DatabaseMalformedException, NotAllowedException, AccessDeniedException { /* mock */ doNothing() @@ -225,7 +226,8 @@ public class AccessEndpointUnitTest extends BaseUnitTest { } protected void generic_find(Long databaseId, Database database, DatabaseAccess access, UUID userId, - Principal principal) throws NotAllowedException, AccessDeniedException { + Principal principal) throws NotAllowedException, AccessDeniedException, + DatabaseNotFoundException { /* mock */ when(databaseRepository.findById(databaseId)) @@ -281,7 +283,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest { protected void generic_revoke(Long databaseId, DatabaseAccess access, UUID userId, Principal principal) throws NotAllowedException, UserNotFoundException, QueryMalformedException, DatabaseNotFoundException, - DatabaseMalformedException, AccessDeniedException, KeycloakRemoteException { + DatabaseMalformedException, AccessDeniedException { /* mock */ if (access != null) { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointIntegrationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..221cc92b70bd35d53d41f434511d60bf9a8d481d --- /dev/null +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointIntegrationTest.java @@ -0,0 +1,107 @@ +package at.tuwien.endpoints; + +import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; +import at.tuwien.api.database.*; +import at.tuwien.config.MariaDbContainerConfig; +import at.tuwien.exception.*; +import at.tuwien.repository.mdb.ContainerRepository; +import at.tuwien.repository.mdb.ImageRepository; +import at.tuwien.repository.mdb.UserRepository; +import dasniko.testcontainers.keycloak.KeycloakContainer; +import lombok.extern.log4j.Log4j2; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.testcontainers.containers.MariaDBContainer; +import org.testcontainers.containers.RabbitMQContainer; +import org.testcontainers.images.PullPolicy; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.*; + +@Log4j2 +@SpringBootTest +@ExtendWith(SpringExtension.class) +@Testcontainers +@MockAmqp +@MockOpensearch +public class DatabaseEndpointIntegrationTest extends BaseUnitTest { + + @Autowired + private ImageRepository imageRepository; + + @Autowired + private ContainerRepository containerRepository; + + @Autowired + private UserRepository userRepository; + + @Autowired + private DatabaseEndpoint databaseEndpoint; + + @Container + private static final RabbitMQContainer rabbitContainer = new RabbitMQContainer("rabbitmq:3-management") + .withUser(USER_1_USERNAME, USER_1_PASSWORD, Set.of("administrator")) + .withVhost("dbrepo"); + + @Container + private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer(); + + @Container + private static KeycloakContainer keycloakContainer = new KeycloakContainer("quay.io/keycloak/keycloak:21.0") + .withImagePullPolicy(PullPolicy.alwaysPull()) + .withAdminUsername("fda") + .withAdminPassword("fda") + .withRealmImportFile("./dbrepo-realm.json") + .withEnv("KC_HOSTNAME_STRICT_HTTPS", "false"); + + @DynamicPropertySource + static void keycloakProperties(DynamicPropertyRegistry registry) { + registry.add("fda.keycloak.endpoint", () -> "http://localhost:" + keycloakContainer.getMappedPort(8080)); + registry.add("fda.broker.endpoint", rabbitContainer::getHttpUrl); + registry.add("spring.rabbitmq.host", rabbitContainer::getHost); + registry.add("spring.rabbitmq.port", rabbitContainer::getAmqpPort); + registry.add("spring.rabbitmq.username", rabbitContainer::getAdminUsername); + registry.add("spring.rabbitmq.password", rabbitContainer::getAdminPassword); + } + + @BeforeEach + public void beforeEach() { + imageRepository.save(IMAGE_1); + containerRepository.save(CONTAINER_1); + userRepository.save(USER_1); + } + + @Test + @WithMockUser(username = USER_1_USERNAME, authorities = {"create-database"}) + public void create_succeeds() throws UserNotFoundException, BrokerVirtualHostGrantException, + DatabaseNameExistsException, NotAllowedException, ContainerConnectionException, DatabaseMalformedException, + QueryStoreException, DatabaseConnectionException, QueryMalformedException, DatabaseNotFoundException, + ImageNotSupportedException, AmqpException, BrokerVirtualHostModificationException, ContainerNotFoundException, + KeycloakRemoteException, AccessDeniedException, BrokerRemoteException { + final DatabaseCreateDto request = DatabaseCreateDto.builder() + .cid(CONTAINER_1_ID) + .name(DATABASE_1_NAME) + .isPublic(DATABASE_1_PUBLIC) + .build(); + + /* test */ + final ResponseEntity<DatabaseBriefDto> response = databaseEndpoint.create(request, USER_1_PRINCIPAL); + assertEquals(HttpStatus.CREATED, response.getStatusCode()); + assertNotNull(response.getBody()); + } + +} diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java index 3d023a50e8c051d1ddf9f8d47a5139f821702314..2b6b480b598ef1116d6fa962470a9a675d6dd5c4 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java @@ -6,11 +6,8 @@ import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.*; import at.tuwien.entities.container.Container; import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.gateway.KeycloakGateway; -import at.tuwien.repository.mdb.DatabaseAccessRepository; import at.tuwien.repository.mdb.IdentifierRepository; import at.tuwien.repository.mdb.UserRepository; import at.tuwien.repository.sdb.DatabaseIdxRepository; @@ -20,13 +17,11 @@ import at.tuwien.service.MessageQueueService; import at.tuwien.service.QueryStoreService; import at.tuwien.service.impl.MariaDbServiceImpl; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.test.context.support.WithAnonymousUser; @@ -37,7 +32,6 @@ import java.security.Principal; import java.util.List; import java.util.Optional; import java.util.UUID; -import java.util.stream.Collectors; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; @@ -71,9 +65,6 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { @MockBean private DatabaseIdxRepository databaseIdxRepository; - @MockBean - private DatabaseAccessRepository databaseAccessRepository; - @MockBean private IdentifierRepository identifierRepository; @@ -140,8 +131,6 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { doNothing() .when(queryStoreService) .create(DATABASE_1_ID, USER_1_PRINCIPAL); - when(databaseAccessRepository.save(any(DatabaseAccess.class))) - .thenReturn(DATABASE_1_USER_1_WRITE_ALL_ACCESS); when(keycloakGateway.findByUsername(USER_1_USERNAME)) .thenReturn(USER_1_KEYCLOAK_DTO); when(userRepository.findByUsername(USER_1_USERNAME)) @@ -418,37 +407,6 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { assertEquals(2, accessList.size()); } - @Test - @WithAnonymousUser - public void delete_anonymous_fails() { - - /* test */ - assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - delete_generic(DATABASE_1_ID, DATABASE_1, null); - }); - } - - @Test - @WithMockUser(username = USER_1_USERNAME) - public void delete_noRole_fails() { - - /* test */ - assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - delete_generic(DATABASE_1_ID, DATABASE_1, USER_1_PRINCIPAL); - }); - } - - @Test - @Disabled - @WithMockUser(username = USER_2_USERNAME, authorities = {"delete-database"}) - public void delete_hasRole_succeeds() throws UserNotFoundException, BrokerVirtualHostGrantException, - DatabaseConnectionException, QueryMalformedException, DatabaseNotFoundException, ImageNotSupportedException, - AmqpException, DatabaseMalformedException, KeycloakRemoteException, AccessDeniedException, BrokerRemoteException { - - /* test */ - delete_generic(DATABASE_2_ID, DATABASE_2, USER_2_PRINCIPAL); - } - /* ################################################################################################### */ /* ## GENERIC TEST CASES ## */ /* ################################################################################################### */ @@ -509,8 +467,6 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { doNothing() .when(messageQueueService) .setVirtualHostPermissions(username); - when(databaseAccessRepository.save(any(DatabaseAccess.class))) - .thenReturn(DATABASE_1_USER_1_WRITE_ALL_ACCESS); /* test */ final ResponseEntity<DatabaseBriefDto> response = databaseEndpoint.create(data, principal); @@ -568,24 +524,4 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { return body; } - public void delete_generic(Long databaseId, Database database, Principal principal) - throws DatabaseNotFoundException, UserNotFoundException, DatabaseConnectionException, - QueryMalformedException, ImageNotSupportedException, AmqpException, DatabaseMalformedException, - BrokerVirtualHostGrantException, KeycloakRemoteException, AccessDeniedException, BrokerRemoteException { - - /* mock */ - if (database != null) { - when(databaseService.findById(databaseId)) - .thenReturn(database); - } else { - doThrow(DatabaseNotFoundException.class) - .when(databaseService) - .findById(databaseId); - } - - /* test */ - final ResponseEntity<?> response = databaseEndpoint.delete(databaseId, principal); - assertEquals(HttpStatus.ACCEPTED, response.getStatusCode()); - assertNull(response.getBody()); - } } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ExportEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ExportEndpointUnitTest.java index 115129991025b0146d9add251530991c851fbd15..53a91d996ed9be62ffd8a7055b8375388e42a726 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ExportEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ExportEndpointUnitTest.java @@ -7,8 +7,6 @@ import at.tuwien.annotations.MockOpensearch; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.exception.*; -import at.tuwien.repository.mdb.DatabaseAccessRepository; -import at.tuwien.repository.mdb.TableRepository; import at.tuwien.service.DatabaseService; import at.tuwien.service.QueryService; import lombok.extern.log4j.Log4j2; @@ -30,7 +28,6 @@ import java.io.IOException; import java.security.Principal; import java.time.Instant; import java.time.temporal.ChronoUnit; -import java.util.Optional; import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; @@ -49,12 +46,6 @@ public class ExportEndpointUnitTest extends BaseUnitTest { @MockBean private DatabaseService databaseService; - @MockBean - private DatabaseAccessRepository databaseAccessRepository; - - @MockBean - private TableRepository tableRepository; - @Autowired private ExportEndpoint exportEndpoint; @@ -182,15 +173,6 @@ public class ExportEndpointUnitTest extends BaseUnitTest { /* mock */ when(databaseService.find(databaseId)) .thenReturn(database); - if (access == null) { - when(databaseAccessRepository.findByDatabaseIdAndUserId(databaseId, userId)) - .thenReturn(Optional.empty()); - } else { - when(databaseAccessRepository.findByDatabaseIdAndUserId(databaseId, userId)) - .thenReturn(Optional.of(access)); - } - when(tableRepository.find(databaseId, tableId)) - .thenReturn(Optional.of(TABLE_1)); when(queryService.tableFindAll(databaseId, tableId, timestamp, principal)) .thenReturn(resource); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointIntegrationTest.java index eb0a099bc0b97535fc5931dabe8cb0108c7bfdec..fb903aa1f017125356c8b4df32f3e99812b27fef 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointIntegrationTest.java @@ -7,7 +7,7 @@ import at.tuwien.api.identifier.IdentifierDescriptionDto; import at.tuwien.api.identifier.IdentifierDto; import at.tuwien.api.identifier.IdentifierTitleDto; import at.tuwien.api.identifier.IdentifierTypeDto; -import at.tuwien.exception.AccessDeniedException; +import at.tuwien.entities.database.Database; import at.tuwien.exception.NotAllowedException; import at.tuwien.repository.mdb.*; import lombok.extern.log4j.Log4j2; @@ -36,12 +36,6 @@ import static org.junit.jupiter.api.Assertions.*; @MockOpensearch public class IdentifierEndpointIntegrationTest extends BaseUnitTest { - @Autowired - private TableRepository tableRepository; - - @Autowired - private IdentifierRepository identifierRepository; - @Autowired private UserRepository userRepository; @@ -62,13 +56,20 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() { + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + TABLE_5.setColumns(TABLE_5_COLUMNS); + TABLE_6.setColumns(TABLE_6_COLUMNS); + TABLE_7.setColumns(TABLE_7_COLUMNS); + TABLE_8.setColumns(TABLE_8_COLUMNS); + /* metadata database */ imageRepository.save(IMAGE_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4)); licenseRepository.save(LICENSE_1); - containerRepository.saveAll(List.of(CONTAINER_1_SIMPLE, CONTAINER_2_SIMPLE, CONTAINER_3_SIMPLE, CONTAINER_4_SIMPLE)); - databaseRepository.saveAll(List.of(DATABASE_1_SIMPLE, DATABASE_2_SIMPLE, DATABASE_3_SIMPLE, DATABASE_4_SIMPLE)); - TABLE_2.setColumns(TABLE_2_COLUMNS); - tableRepository.save(TABLE_2); + containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2, CONTAINER_3, CONTAINER_4)); + databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2, DATABASE_3, DATABASE_4)); } @Test @@ -76,12 +77,9 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { @WithAnonymousUser public void list_anonymous_succeeds() { - /* mock */ - identifierRepository.save(IDENTIFIER_1); - /* test */ - final List<IdentifierDto> response = generic_list(null, null, null, null); - assertEquals(1, response.size()); + final List<IdentifierDto> response = generic_list(null, null, null, null, null); + assertEquals(7, response.size()); final IdentifierDto identifier = response.get(0); assertEquals(IDENTIFIER_1_ID, identifier.getId()); final List<IdentifierTitleDto> titles = identifier.getTitles(); @@ -106,12 +104,9 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { @WithMockUser(username = USER_1_USERNAME, authorities = {"list-identifiers"}) public void list_hasRole_succeeds() { - /* mock */ - identifierRepository.save(IDENTIFIER_1); - /* test */ - final List<IdentifierDto> response = generic_list(null, null, null, null); - assertEquals(1, response.size()); + final List<IdentifierDto> response = generic_list(null, null, null, null, null); + assertEquals(7, response.size()); final IdentifierDto identifier = response.get(0); assertEquals(IDENTIFIER_1_ID, identifier.getId()); final List<IdentifierTitleDto> titles = identifier.getTitles(); @@ -136,12 +131,9 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { @WithMockUser(username = USER_4_USERNAME) public void list_noRole_succeeds() { - /* mock */ - identifierRepository.save(IDENTIFIER_1); - /* test */ - final List<IdentifierDto> response = generic_list(null, null, null, null); - assertEquals(1, response.size()); + final List<IdentifierDto> response = generic_list(null, null, null, null, null); + assertEquals(7, response.size()); final IdentifierDto identifier = response.get(0); final List<IdentifierTitleDto> titles = identifier.getTitles(); assertEquals(2, titles.size()); @@ -165,12 +157,9 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { @WithMockUser(username = USER_1_USERNAME) public void list_databaseId_succeeds() { - /* mock */ - identifierRepository.save(IDENTIFIER_1); - /* test */ - final List<IdentifierDto> response = generic_list(DATABASE_1_ID, null, null, null); - assertEquals(1, response.size()); + final List<IdentifierDto> response = generic_list(DATABASE_1_ID, null, null, null, null); + assertEquals(4, response.size()); final IdentifierDto identifier = response.get(0); final List<IdentifierTitleDto> titles = identifier.getTitles(); assertEquals(2, titles.size()); @@ -193,11 +182,8 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { @WithMockUser(username = USER_1_USERNAME) public void list_viewId_succeeds() { - /* mock */ - identifierRepository.saveAll(List.of(IDENTIFIER_1_SIMPLE, IDENTIFIER_2_SIMPLE, IDENTIFIER_3_SIMPLE, IDENTIFIER_4_SIMPLE, IDENTIFIER_5_SIMPLE, IDENTIFIER_6_SIMPLE)); - /* test */ - final List<IdentifierDto> reponse = generic_list(null, null, VIEW_1_ID, null); + final List<IdentifierDto> reponse = generic_list(null, null, VIEW_1_ID, null, null); assertEquals(1, reponse.size()); } @@ -205,11 +191,8 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { @WithMockUser(username = USER_1_USERNAME) public void list_viewType_succeeds() { - /* mock */ - identifierRepository.saveAll(List.of(IDENTIFIER_1_SIMPLE, IDENTIFIER_2_SIMPLE, IDENTIFIER_3_SIMPLE, IDENTIFIER_4_SIMPLE, IDENTIFIER_5_SIMPLE, IDENTIFIER_6_SIMPLE)); - /* test */ - final List<IdentifierDto> reponse = generic_list(null, null, null, IdentifierTypeDto.VIEW); + final List<IdentifierDto> reponse = generic_list(null, null, null, null, IdentifierTypeDto.VIEW); assertEquals(1, reponse.size()); } @@ -217,11 +200,8 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { @WithMockUser(username = USER_1_USERNAME) public void list_databaseIdAndType_succeeds() { - /* mock */ - identifierRepository.save(IDENTIFIER_1); - /* test */ - final List<IdentifierDto> response = generic_list(DATABASE_1_ID, null, null, IdentifierTypeDto.DATABASE); + final List<IdentifierDto> response = generic_list(DATABASE_1_ID, null, null, null, IdentifierTypeDto.DATABASE); assertEquals(1, response.size()); final IdentifierDto identifier = response.get(0); assertEquals(0, identifier.getTitles().size()); @@ -233,11 +213,8 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { @WithMockUser(username = USER_1_USERNAME) public void list_subsetIdAndType_succeeds() { - /* mock */ - identifierRepository.save(IDENTIFIER_1); - /* test */ - final List<IdentifierDto> response = generic_list(DATABASE_1_ID, QUERY_1_ID, null, IdentifierTypeDto.DATABASE); + final List<IdentifierDto> response = generic_list(DATABASE_1_ID, null, null, null, IdentifierTypeDto.DATABASE); assertEquals(1, response.size()); final IdentifierDto identifier = response.get(0); final List<IdentifierTitleDto> titles = identifier.getTitles(); @@ -264,7 +241,7 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { /* test */ assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - identifierEndpoint.create(IDENTIFIER_2_DTO_REQUEST, USER_4_PRINCIPAL); + identifierEndpoint.create(IDENTIFIER_5_DTO_REQUEST, USER_4_PRINCIPAL); }); } @@ -274,12 +251,12 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { public void create_accessNotExists_fails() { /* mock */ - containerRepository.save(CONTAINER_3_SIMPLE); - databaseRepository.save(DATABASE_3_SIMPLE); + containerRepository.save(CONTAINER_3); + databaseRepository.save(DATABASE_3); /* test */ assertThrows(NotAllowedException.class, () -> { - identifierEndpoint.create(IDENTIFIER_3_DTO_REQUEST, USER_1_PRINCIPAL); + identifierEndpoint.create(IDENTIFIER_6_DTO_REQUEST, USER_1_PRINCIPAL); }); } @@ -287,10 +264,10 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { /* ## GENERIC TEST CASES ## */ /* ################################################################################################### */ - protected List<IdentifierDto> generic_list(Long databaseId, Long queryId, Long viewId, IdentifierTypeDto type) { + protected List<IdentifierDto> generic_list(Long databaseId, Long queryId, Long viewId, Long tableId, IdentifierTypeDto type) { /* test */ - final ResponseEntity<List<IdentifierDto>> response = identifierEndpoint.list(databaseId, queryId, viewId, type); + final ResponseEntity<List<IdentifierDto>> response = identifierEndpoint.list(databaseId, queryId, viewId, tableId, type); assertEquals(HttpStatus.OK, response.getStatusCode()); assertNotNull(response.getBody()); return response.getBody(); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointUnitTest.java index c496b3fa0364239f365a67a24d80e00f12f8e5e5..f2a7d6d332c727515c189f0ff0a3d2b9a676f456 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointUnitTest.java @@ -9,15 +9,13 @@ import at.tuwien.entities.database.Database; import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.entities.identifier.Identifier; import at.tuwien.exception.*; -import at.tuwien.repository.mdb.DatabaseAccessRepository; import at.tuwien.repository.mdb.DatabaseRepository; import at.tuwien.repository.mdb.IdentifierRepository; -import at.tuwien.repository.sdb.IdentifierIdxRepository; import at.tuwien.service.AccessService; import at.tuwien.service.IdentifierService; -import at.tuwien.service.QueryService; import at.tuwien.service.StoreService; import org.apache.commons.io.FileUtils; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -60,18 +58,9 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { @MockBean private AccessService accessService; - @MockBean - private DatabaseAccessRepository accessRepository; - @MockBean private StoreService storeService; - @MockBean - private QueryService queryService; - - @MockBean - private IdentifierIdxRepository identifierIdxRepository; - @Autowired private IdentifierEndpoint identifierEndpoint; @@ -81,6 +70,11 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { @Autowired private EndpointConfig endpointConfig; + @BeforeEach + public void beforeEach() { + IDENTIFIER_1.setDatabase(DATABASE_1); + } + @Test @WithAnonymousUser public void find_json_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, @@ -157,8 +151,8 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { final ResponseEntity<?> response = generic_find(null, null, null); assertEquals(HttpStatus.MOVED_PERMANENTLY, response.getStatusCode()); assertNotNull(response.getHeaders().get("Location")); - assertEquals(endpointConfig.getWebsiteUrl() + "/database/" - + IDENTIFIER_1_DATABASE_ID, response.getHeaders().getFirst("Location")); + assertEquals(endpointConfig.getWebsiteUrl() + "/database/" + IDENTIFIER_1_DATABASE_ID + "/info?pid=" + IDENTIFIER_1_DATABASE_ID, + response.getHeaders().getFirst("Location")); } @Test @@ -177,11 +171,9 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { UserNotFoundException, QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, IdentifierPublishingNotAllowedException, IdentifierRequestException, NotAllowedException, ViewNotFoundException, at.tuwien.exception.AccessDeniedException, QueryStoreException, - DatabaseConnectionException, ImageNotSupportedException { - - /* mock */ - when(accessRepository.findByDatabaseIdAndUserId(DATABASE_1_ID, USER_1_ID)) - .thenReturn(Optional.of(DATABASE_1_USER_1_READ_ACCESS)); + DatabaseConnectionException, ImageNotSupportedException, IdentifierNotFoundException, + TableNotFoundException, TableMalformedException, QueryMalformedException, FileStorageException, + DataDbSidecarException { /* test */ generic_create(DATABASE_1_ID, DATABASE_1, DATABASE_1_USER_1_READ_ACCESS, IDENTIFIER_1_DTO_REQUEST, IDENTIFIER_1, USER_1_PRINCIPAL, USER_1_ID); @@ -203,7 +195,7 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { /* test */ assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - generic_create(DATABASE_2_ID, DATABASE_2, null, IDENTIFIER_2_DTO_REQUEST, IDENTIFIER_2, null, null); + generic_create(DATABASE_2_ID, DATABASE_2, null, IDENTIFIER_5_DTO_REQUEST, IDENTIFIER_5, null, null); }); } @@ -213,10 +205,12 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { UserNotFoundException, QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, IdentifierPublishingNotAllowedException, IdentifierRequestException, NotAllowedException, at.tuwien.exception.AccessDeniedException, ViewNotFoundException, QueryStoreException, - DatabaseConnectionException, ImageNotSupportedException { + DatabaseConnectionException, ImageNotSupportedException, IdentifierNotFoundException, + TableNotFoundException, TableMalformedException, QueryMalformedException, FileStorageException, + DataDbSidecarException { /* test */ - generic_create(DATABASE_2_ID, DATABASE_2, DATABASE_2_USER_1_READ_ACCESS, IDENTIFIER_2_DTO_REQUEST, IDENTIFIER_2, USER_2_PRINCIPAL, USER_2_ID); + generic_create(DATABASE_2_ID, DATABASE_2, DATABASE_2_USER_1_READ_ACCESS, IDENTIFIER_5_DTO_REQUEST, IDENTIFIER_5, USER_2_PRINCIPAL, USER_2_ID); } @Test @@ -230,7 +224,7 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { .relatedIdentifiers(List.of()) .publicationMonth(IDENTIFIER_1_PUBLICATION_MONTH) .publicationYear(IDENTIFIER_1_PUBLICATION_YEAR) - .creators(List.of(IDENTIFIER_2_CREATOR_1_CREATE_DTO, IDENTIFIER_2_CREATOR_2_CREATE_DTO)) + .creators(List.of(IDENTIFIER_5_CREATOR_1_CREATE_DTO, IDENTIFIER_5_CREATOR_2_CREATE_DTO)) .publisher(IDENTIFIER_1_PUBLISHER) .type(IdentifierTypeDto.SUBSET) .build(); @@ -245,16 +239,16 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { @WithMockUser(username = USER_1_USERNAME, authorities = {"create-identifier"}) public void create_invalidDatabase_fails() { final IdentifierSaveDto request = IdentifierSaveDto.builder() - .queryId(IDENTIFIER_1_QUERY_ID) // <-- + .queryId(1L) // <-- .databaseId(IDENTIFIER_1_DATABASE_ID) .descriptions(List.of(IDENTIFIER_1_DESCRIPTION_1_CREATE_DTO)) .titles(List.of(IDENTIFIER_1_TITLE_1_CREATE_DTO)) - .relatedIdentifiers(List.of(IDENTIFIER_1_RELATED_IDENTIFIER_2_CREATE_DTO)) - .publicationDay(IDENTIFIER_2_PUBLICATION_DAY) - .publicationMonth(IDENTIFIER_2_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR) - .creators(List.of(IDENTIFIER_2_CREATOR_1_CREATE_DTO, IDENTIFIER_2_CREATOR_2_CREATE_DTO)) - .publisher(IDENTIFIER_2_PUBLISHER) + .relatedIdentifiers(List.of(IDENTIFIER_1_RELATED_IDENTIFIER_5_CREATE_DTO)) + .publicationDay(IDENTIFIER_5_PUBLICATION_DAY) + .publicationMonth(IDENTIFIER_5_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_5_PUBLICATION_YEAR) + .creators(List.of(IDENTIFIER_5_CREATOR_1_CREATE_DTO, IDENTIFIER_5_CREATOR_2_CREATE_DTO)) + .publisher(IDENTIFIER_5_PUBLISHER) .type(IdentifierTypeDto.DATABASE) .build(); @@ -270,7 +264,7 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { /* test */ assertThrows(NotAllowedException.class, () -> { - generic_create(DATABASE_2_ID, DATABASE_2, null, IDENTIFIER_2_DTO_REQUEST, IDENTIFIER_2, USER_1_PRINCIPAL, USER_1_ID); + generic_create(DATABASE_2_ID, DATABASE_2, null, IDENTIFIER_5_DTO_REQUEST, IDENTIFIER_5, USER_1_PRINCIPAL, USER_1_ID); }); } @@ -283,7 +277,8 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { throws QueryNotFoundException, RemoteUnavailableException, IdentifierAlreadyExistsException, UserNotFoundException, DatabaseNotFoundException, IdentifierPublishingNotAllowedException, IdentifierRequestException, NotAllowedException, at.tuwien.exception.AccessDeniedException, - ViewNotFoundException, QueryStoreException, DatabaseConnectionException, ImageNotSupportedException { + ViewNotFoundException, QueryStoreException, DatabaseConnectionException, ImageNotSupportedException, + IdentifierNotFoundException, TableNotFoundException, TableMalformedException, QueryMalformedException, FileStorageException, DataDbSidecarException { /* mock */ when(databaseRepository.findById(databaseId)) @@ -300,9 +295,6 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { .thenReturn(QUERY_1); when(identifierService.create(data, principal)) .thenReturn(identifier); - when(identifierRepository.save(any(Identifier.class))) - .thenReturn(identifier) - .thenReturn(identifier); /* test */ final ResponseEntity<IdentifierDto> response = identifierEndpoint.create(data, principal); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ImageEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ImageEndpointUnitTest.java index e017b10fad706371fbb635a1e736645ba54699b4..0ac4a3b76cfacd6a43bd542b85e96791c5b396ee 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ImageEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ImageEndpointUnitTest.java @@ -24,7 +24,6 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import java.security.Principal; import java.util.List; -import java.util.Optional; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/LicenseEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/LicenseEndpointUnitTest.java index ca411ddd75bc10828b0de3843110a4399f272801..cf271ea8e541ff9c27222b5be465df3d15ca851f 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/LicenseEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/LicenseEndpointUnitTest.java @@ -5,8 +5,6 @@ import at.tuwien.annotations.MockAmqp; import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.LicenseDto; import at.tuwien.repository.mdb.LicenseRepository; -import at.tuwien.repository.sdb.DatabaseIdxRepository; -import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MaintenanceEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MaintenanceEndpointUnitTest.java index 1ba27a097ea4e1a4a74b859fca92465e8f796505..584d23f26546df09bce0104320e7d145974eb2b9 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MaintenanceEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MaintenanceEndpointUnitTest.java @@ -8,7 +8,6 @@ import at.tuwien.api.maintenance.BannerMessageCreateDto; import at.tuwien.api.maintenance.BannerMessageDto; import at.tuwien.api.maintenance.BannerMessageUpdateDto; import at.tuwien.entities.maintenance.BannerMessage; -import at.tuwien.exception.AccessDeniedException; import at.tuwien.exception.BannerMessageNotFoundException; import at.tuwien.service.BannerMessageService; import lombok.extern.log4j.Log4j2; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointComponentTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointComponentTest.java index cadfa802f668db6b5649b0e35ce7e1b0b1aca0b4..9db11e5c7c23b215aa8199541e9afdfc53927922 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointComponentTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointComponentTest.java @@ -12,6 +12,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.servlet.MockMvc; @@ -23,6 +24,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @Log4j2 @ExtendWith(SpringExtension.class) +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @AutoConfigureMockMvc @SpringBootTest @MockAmqp @@ -47,21 +49,24 @@ public class MetadataEndpointComponentTest extends BaseUnitTest { @Autowired private DatabaseRepository databaseRepository; - @Autowired - private IdentifierRepository identifierRepository; - @Autowired private UserRepository userRepository; @BeforeEach public void beforeEach() { + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + TABLE_5.setColumns(TABLE_5_COLUMNS); + TABLE_6.setColumns(TABLE_6_COLUMNS); + TABLE_7.setColumns(TABLE_7_COLUMNS); /* metadata database */ - imageRepository.save(IMAGE_1_SIMPLE); + imageRepository.save(IMAGE_1); userRepository.saveAll(List.of(USER_1, USER_2)); licenseRepository.save(LICENSE_1); - containerRepository.saveAll(List.of(CONTAINER_1_SIMPLE, CONTAINER_2_SIMPLE)); - databaseRepository.saveAll(List.of(DATABASE_1_SIMPLE, DATABASE_2_SIMPLE)); - identifierRepository.saveAll(List.of(IDENTIFIER_1, IDENTIFIER_2)); + containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2)); + databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2)); } @Test @@ -105,7 +110,10 @@ public class MetadataEndpointComponentTest extends BaseUnitTest { .andExpect(content().contentType("text/xml;charset=UTF-8")) .andExpect(xpath("//request[@verb='ListIdentifiers']").exists()) .andExpect(xpath("//header[1]/identifier").string("oai:" + IDENTIFIER_1_ID)) - .andExpect(xpath("//header[2]/identifier").string("doi:" + IDENTIFIER_2_DOI)) + .andExpect(xpath("//header[2]/identifier").string("oai:" + IDENTIFIER_2_ID)) + .andExpect(xpath("//header[3]/identifier").string("oai:" + IDENTIFIER_3_ID)) + .andExpect(xpath("//header[4]/identifier").string("oai:" + IDENTIFIER_4_ID)) + .andExpect(xpath("//header[5]/identifier").string("doi:" + IDENTIFIER_5_DOI)) .andExpect(status().isOk()); } @@ -136,12 +144,12 @@ public class MetadataEndpointComponentTest extends BaseUnitTest { public void getRecord_doi_succeeds() throws Exception { /* test */ - this.mockMvc.perform(get("/api/oai?verb=GetRecord&identifier=doi:" + IDENTIFIER_2_DOI)) + this.mockMvc.perform(get("/api/oai?verb=GetRecord&identifier=doi:" + IDENTIFIER_5_DOI)) .andDo(print()) .andExpect(content().contentType("text/xml;charset=UTF-8")) .andExpect(xpath("//request[@verb='GetRecord']").exists()) - .andExpect(xpath("//request[@identifier='doi:" + IDENTIFIER_2_DOI + "']").exists()) - .andExpect(xpath("//header/identifier").string("doi:" + IDENTIFIER_2_DOI)) + .andExpect(xpath("//request[@identifier='doi:" + IDENTIFIER_5_DOI + "']").exists()) + .andExpect(xpath("//header/identifier").string("doi:" + IDENTIFIER_5_DOI)) .andExpect(status().isOk()); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/OntologyEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/OntologyEndpointUnitTest.java index a6c682ca2c554d5c2b801906705ff28500b71ecd..5ee45769cca5784dd87268478100ead221bb70ae 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/OntologyEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/OntologyEndpointUnitTest.java @@ -245,7 +245,7 @@ public class OntologyEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"execute-semantic-query"}) public void find_hasRoleLabel_succeeds() throws UriMalformedException, QueryMalformedException, - OntologyNotFoundException, FilterBadRequestException { + OntologyNotFoundException, FilterBadRequestException, OntologyInvalidException { final EntityDto entityDto = EntityDto.builder() .label("Apache Jena") .uri("http://www.wikidata.org/entity/Q1686799") @@ -261,7 +261,7 @@ public class OntologyEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"execute-semantic-query"}) public void find_hasRoleUri_succeeds() throws UriMalformedException, QueryMalformedException, - OntologyNotFoundException, FilterBadRequestException { + OntologyNotFoundException, FilterBadRequestException, OntologyInvalidException { final EntityDto entityDto = EntityDto.builder() .label("Apache Jena") .uri("http://www.wikidata.org/entity/Q1686799") @@ -379,7 +379,7 @@ public class OntologyEndpointUnitTest extends BaseUnitTest { } public List<EntityDto> find_generic(Long ontologyId, String label, String uri, Ontology ontology, EntityDto entityDto) - throws OntologyNotFoundException, QueryMalformedException, UriMalformedException, FilterBadRequestException { + throws OntologyNotFoundException, QueryMalformedException, UriMalformedException, FilterBadRequestException, OntologyInvalidException { /* mock */ if (ontology != null) { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/PersistenceEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/PersistenceEndpointUnitTest.java index 0f01a366fb69dd83d9512afe2336bdb6b0126262..ad4347d2db4d8d3de0910b2d4235a2b4dc480640 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/PersistenceEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/PersistenceEndpointUnitTest.java @@ -16,6 +16,7 @@ import at.tuwien.service.UserService; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -59,6 +60,13 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Autowired private PersistenceEndpoint persistenceEndpoint; + @BeforeEach + public void beforeEach() { + IDENTIFIER_1.setDatabase(DATABASE_1); + IDENTIFIER_5.setDatabase(DATABASE_2); + IDENTIFIER_6.setDatabase(DATABASE_3); + } + @Test @WithAnonymousUser public void find_json0_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, @@ -69,11 +77,11 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { final IdentifierDto compare = objectMapper.readValue(FileUtils.readFileToString(new File("src/test/resources/json/metadata0.json"), StandardCharsets.UTF_8), IdentifierDto.class); /* mock */ - when(identifierService.find(IDENTIFIER_4_ID)) - .thenReturn(IDENTIFIER_4); + when(identifierService.find(IDENTIFIER_7_ID)) + .thenReturn(IDENTIFIER_7); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_4_ID, accept, USER_1_PRINCIPAL); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_7_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final IdentifierDto body = (IdentifierDto) response.getBody(); assertNotNull(body); @@ -81,7 +89,6 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { assertEquals(compare.getTitles().size(), body.getTitles().size()); assertEquals(compare.getDescriptions().size(), body.getDescriptions().size()); assertEquals(compare.getDescriptions(), body.getDescriptions()); - assertEquals(compare.getDatabase().getId(), body.getDatabase().getId()); assertEquals(compare.getCreated(), body.getCreated()); assertEquals(compare.getLastModified(), body.getLastModified()); assertEquals(compare.getDoi(), body.getDoi()); @@ -122,7 +129,6 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { assertEquals(compare.getDescriptions().get(0).getDescription(), body.getDescriptions().get(0).getDescription()); assertEquals(compare.getDescriptions().get(0).getLanguage(), body.getDescriptions().get(0).getLanguage()); assertEquals(compare.getDescriptions().get(0).getDescriptionType(), body.getDescriptions().get(0).getDescriptionType()); - assertEquals(compare.getDatabase().getId(), body.getDatabase().getId()); assertEquals(compare.getCreated(), body.getCreated()); assertEquals(compare.getLastModified(), body.getLastModified()); assertEquals(compare.getDoi(), body.getDoi()); @@ -249,13 +255,13 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { StandardCharsets.UTF_8); /* mock */ - when(identifierService.exportBibliography(IDENTIFIER_4_ID, BibliographyTypeDto.APA)) + when(identifierService.exportBibliography(IDENTIFIER_7_ID, BibliographyTypeDto.APA)) .thenReturn(compare); - when(identifierService.find(IDENTIFIER_4_ID)) - .thenReturn(IDENTIFIER_4); + when(identifierService.find(IDENTIFIER_7_ID)) + .thenReturn(IDENTIFIER_7); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_4_ID, accept, USER_1_PRINCIPAL); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_7_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -297,13 +303,13 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { StandardCharsets.UTF_8); /* mock */ - when(identifierService.exportBibliography(IDENTIFIER_2_ID, BibliographyTypeDto.APA)) + when(identifierService.exportBibliography(IDENTIFIER_5_ID, BibliographyTypeDto.APA)) .thenReturn(compare); - when(identifierService.find(IDENTIFIER_2_ID)) - .thenReturn(IDENTIFIER_2); + when(identifierService.find(IDENTIFIER_5_ID)) + .thenReturn(IDENTIFIER_5); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_2_ID, accept, USER_1_PRINCIPAL); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_5_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -321,13 +327,13 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { StandardCharsets.UTF_8); /* mock */ - when(identifierService.exportBibliography(IDENTIFIER_3_ID, BibliographyTypeDto.APA)) + when(identifierService.exportBibliography(IDENTIFIER_6_ID, BibliographyTypeDto.APA)) .thenReturn(compare); - when(identifierService.find(IDENTIFIER_3_ID)) - .thenReturn(IDENTIFIER_3); + when(identifierService.find(IDENTIFIER_6_ID)) + .thenReturn(IDENTIFIER_6); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_3_ID, accept, USER_1_PRINCIPAL); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_6_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -369,13 +375,13 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { StandardCharsets.UTF_8); /* mock */ - when(identifierService.exportBibliography(IDENTIFIER_4_ID, BibliographyTypeDto.IEEE)) + when(identifierService.exportBibliography(IDENTIFIER_7_ID, BibliographyTypeDto.IEEE)) .thenReturn(compare); - when(identifierService.find(IDENTIFIER_4_ID)) - .thenReturn(IDENTIFIER_4); + when(identifierService.find(IDENTIFIER_7_ID)) + .thenReturn(IDENTIFIER_7); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_4_ID, accept, USER_1_PRINCIPAL); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_7_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -417,13 +423,13 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { StandardCharsets.UTF_8); /* mock */ - when(identifierService.exportBibliography(IDENTIFIER_2_ID, BibliographyTypeDto.IEEE)) + when(identifierService.exportBibliography(IDENTIFIER_5_ID, BibliographyTypeDto.IEEE)) .thenReturn(compare); - when(identifierService.find(IDENTIFIER_2_ID)) - .thenReturn(IDENTIFIER_2); + when(identifierService.find(IDENTIFIER_5_ID)) + .thenReturn(IDENTIFIER_5); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_2_ID, accept, USER_1_PRINCIPAL); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_5_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -465,13 +471,13 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { StandardCharsets.UTF_8); /* mock */ - when(identifierService.exportBibliography(IDENTIFIER_4_ID, BibliographyTypeDto.BIBTEX)) + when(identifierService.exportBibliography(IDENTIFIER_7_ID, BibliographyTypeDto.BIBTEX)) .thenReturn(compare); - when(identifierService.find(IDENTIFIER_4_ID)) - .thenReturn(IDENTIFIER_4); + when(identifierService.find(IDENTIFIER_7_ID)) + .thenReturn(IDENTIFIER_7); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_4_ID, accept, USER_1_PRINCIPAL); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_7_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -513,13 +519,13 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { StandardCharsets.UTF_8); /* mock */ - when(identifierService.exportBibliography(IDENTIFIER_2_ID, BibliographyTypeDto.BIBTEX)) + when(identifierService.exportBibliography(IDENTIFIER_5_ID, BibliographyTypeDto.BIBTEX)) .thenReturn(compare); - when(identifierService.find(IDENTIFIER_2_ID)) - .thenReturn(IDENTIFIER_2); + when(identifierService.find(IDENTIFIER_5_ID)) + .thenReturn(IDENTIFIER_5); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_2_ID, accept, USER_1_PRINCIPAL); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_5_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -550,51 +556,6 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { assertEquals(compare, body); } - @Test - @WithAnonymousUser - public void update_anonymous_fails() { - - /* test */ - assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - generic_update(IDENTIFIER_3_ID, IDENTIFIER_3, IDENTIFIER_3_DTO_UPDATE_REQUEST, null, null, null); - }); - } - - @Test - @WithMockUser(username = USER_4_USERNAME, authorities = {}) - public void update_noRole_fails() { - - /* test */ - assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - generic_update(IDENTIFIER_3_ID, IDENTIFIER_3, IDENTIFIER_3_DTO_UPDATE_REQUEST, USER_4_USERNAME, USER_4, USER_4_PRINCIPAL); - }); - } - - @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"modify-identifier-metadata"}) - public void update_hasRoleNoAccess_succeeds() throws UserNotFoundException, NotAllowedException, - IdentifierNotFoundException, IdentifierRequestException, QueryNotFoundException, DatabaseNotFoundException, - RemoteUnavailableException, QueryStoreException, DatabaseConnectionException, ImageNotSupportedException { - - /* test */ - generic_update(IDENTIFIER_3_ID, IDENTIFIER_3, IDENTIFIER_3_DTO_UPDATE_REQUEST, USER_3_USERNAME, USER_3, USER_3_PRINCIPAL); - } - - @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"modify-identifier-metadata"}) - public void update_hasRoleHasAccess_succeeds() throws IdentifierNotFoundException, IdentifierRequestException, - UserNotFoundException, at.tuwien.exception.AccessDeniedException, NotAllowedException, - QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, QueryStoreException, - DatabaseConnectionException, ImageNotSupportedException { - - /* mock */ - when(accessService.find(IDENTIFIER_3_DATABASE_ID, USER_3_ID)) - .thenReturn(DATABASE_3_USER_3_READ_ACCESS); - - /* test */ - generic_update(IDENTIFIER_3_ID, IDENTIFIER_3, IDENTIFIER_3_DTO_UPDATE_REQUEST, USER_3_USERNAME, USER_3, USER_3_PRINCIPAL); - } - @Test @WithAnonymousUser public void delete_anonymous_fails() { @@ -617,7 +578,8 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_2_USERNAME, authorities = {"delete-identifier"}) - public void delete_hasRole_succeeds() throws NotAllowedException, IdentifierNotFoundException { + public void delete_hasRole_succeeds() throws NotAllowedException, IdentifierNotFoundException, + DatabaseNotFoundException { /* test */ this.generic_delete(IDENTIFIER_1_ID, IDENTIFIER_1); @@ -631,50 +593,8 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { return IOUtils.toString(inputStream, StandardCharsets.UTF_8); } - protected void generic_update(Long id, Identifier identifier, IdentifierSaveDto data, String username, User user, - Principal principal) throws IdentifierNotFoundException, IdentifierRequestException, - UserNotFoundException, NotAllowedException, QueryNotFoundException, DatabaseNotFoundException, - RemoteUnavailableException, QueryStoreException, DatabaseConnectionException, ImageNotSupportedException { - - /* mock */ - if (identifier != null) { - when(identifierService.update(id, data, principal)) - .thenReturn(identifier); - when(identifierService.find(id)) - .thenReturn(identifier); - } else { - doThrow(IdentifierNotFoundException.class) - .when(identifierService) - .find(id); - } - if (user != null) { - when(userService.findByUsername(username)) - .thenReturn(user); - } else { - doThrow(UserNotFoundException.class) - .when(userService) - .findByUsername(username); - } - - /* test */ - final ResponseEntity<IdentifierDto> response = persistenceEndpoint.update(id, data, principal); - assertEquals(HttpStatus.ACCEPTED, response.getStatusCode()); - final IdentifierDto body = response.getBody(); - assertNotNull(body); - assertEquals(IDENTIFIER_3_ID, body.getId()); - assertEquals(1, body.getTitles().size()); - assertEquals(IDENTIFIER_3_TITLE_1_TITLE, body.getTitles().get(0).getTitle()); - assertEquals(IDENTIFIER_3_TITLE_1_LANG_DTO, body.getTitles().get(0).getLanguage()); - assertEquals(1, body.getDescriptions().size()); - assertEquals(IDENTIFIER_3_DESCRIPTION_1_DESCRIPTION, body.getDescriptions().get(0).getDescription()); - assertEquals(IDENTIFIER_3_DESCRIPTION_1_LANG_DTO, body.getDescriptions().get(0).getLanguage()); - assertEquals(IDENTIFIER_3_QUERY, body.getQuery()); - assertEquals(IDENTIFIER_3_QUERY_HASH, body.getQueryHash()); - assertEquals(IDENTIFIER_3_RESULT_NUMBER, body.getResultNumber()); - assertEquals(IDENTIFIER_3_RESULT_HASH, body.getResultHash()); - } - - protected void generic_delete(Long id, Identifier identifier) throws IdentifierNotFoundException, NotAllowedException { + protected void generic_delete(Long id, Identifier identifier) throws IdentifierNotFoundException, + NotAllowedException, DatabaseNotFoundException { /* mock */ when(identifierService.find(id)) diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/QueryEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/QueryEndpointUnitTest.java index d953670719df3a05c90457b75dc09ba1d7f6b828..662c12a02aab1010ad9ae82daa46126ab91631b6 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/QueryEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/QueryEndpointUnitTest.java @@ -12,7 +12,6 @@ import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.exception.*; import at.tuwien.querystore.Query; import at.tuwien.repository.mdb.ContainerRepository; -import at.tuwien.repository.mdb.DatabaseAccessRepository; import at.tuwien.repository.mdb.DatabaseRepository; import at.tuwien.repository.mdb.ImageRepository; import at.tuwien.service.QueryService; @@ -34,6 +33,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import java.io.File; import java.io.IOException; import java.security.Principal; +import java.util.List; import java.util.Optional; import java.util.UUID; @@ -47,9 +47,6 @@ import static org.mockito.Mockito.when; @MockOpensearch public class QueryEndpointUnitTest extends BaseUnitTest { - @MockBean - private DatabaseAccessRepository databaseAccessRepository; - @MockBean private ImageRepository imageRepository; @@ -127,7 +124,7 @@ public class QueryEndpointUnitTest extends BaseUnitTest { public void execute_publicNoAccess_succeeds() throws UserNotFoundException, QueryStoreException, SortException, TableMalformedException, DatabaseConnectionException, NotAllowedException, QueryMalformedException, ColumnParseException, DatabaseNotFoundException, ImageNotSupportedException, PaginationException, - KeycloakRemoteException, at.tuwien.exception.AccessDeniedException { + KeycloakRemoteException, at.tuwien.exception.AccessDeniedException, QueryNotFoundException { /* test */ generic_execute(DATABASE_3_ID, QUERY_4_STATEMENT, null, null, DATABASE_3, null); @@ -138,7 +135,7 @@ public class QueryEndpointUnitTest extends BaseUnitTest { public void execute_publicRead_succeeds() throws UserNotFoundException, QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, ColumnParseException, DatabaseNotFoundException, ImageNotSupportedException, SortException, NotAllowedException, PaginationException, - KeycloakRemoteException, at.tuwien.exception.AccessDeniedException { + KeycloakRemoteException, at.tuwien.exception.AccessDeniedException, QueryNotFoundException { /* test */ generic_execute(DATABASE_3_ID, QUERY_4_STATEMENT, USER_2_ID, USER_2_PRINCIPAL, DATABASE_3, DATABASE_3_USER_2_WRITE_ALL_ACCESS); @@ -149,7 +146,7 @@ public class QueryEndpointUnitTest extends BaseUnitTest { public void execute_publicWriteOwn_succeeds() throws UserNotFoundException, QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, ColumnParseException, DatabaseNotFoundException, ImageNotSupportedException, SortException, NotAllowedException, PaginationException, - KeycloakRemoteException, at.tuwien.exception.AccessDeniedException { + KeycloakRemoteException, at.tuwien.exception.AccessDeniedException, QueryNotFoundException { /* test */ generic_execute(DATABASE_3_ID, QUERY_4_STATEMENT, USER_2_ID, USER_2_PRINCIPAL, DATABASE_3, DATABASE_3_USER_2_WRITE_ALL_ACCESS); @@ -160,7 +157,7 @@ public class QueryEndpointUnitTest extends BaseUnitTest { public void execute_publicWriteAll_succeeds() throws UserNotFoundException, QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, ColumnParseException, DatabaseNotFoundException, ImageNotSupportedException, SortException, NotAllowedException, PaginationException, - KeycloakRemoteException, at.tuwien.exception.AccessDeniedException { + KeycloakRemoteException, at.tuwien.exception.AccessDeniedException, QueryNotFoundException { /* test */ generic_execute(DATABASE_3_ID, QUERY_4_STATEMENT, USER_2_ID, USER_2_PRINCIPAL, DATABASE_3, DATABASE_3_USER_2_WRITE_ALL_ACCESS); @@ -171,7 +168,7 @@ public class QueryEndpointUnitTest extends BaseUnitTest { public void execute_publicOwner_succeeds() throws UserNotFoundException, QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, ColumnParseException, DatabaseNotFoundException, ImageNotSupportedException, SortException, NotAllowedException, PaginationException, - KeycloakRemoteException, at.tuwien.exception.AccessDeniedException { + KeycloakRemoteException, at.tuwien.exception.AccessDeniedException, QueryNotFoundException { /* test */ generic_execute(DATABASE_3_ID, QUERY_4_STATEMENT, USER_2_ID, USER_2_PRINCIPAL, DATABASE_3, DATABASE_3_USER_2_WRITE_ALL_ACCESS); @@ -237,7 +234,7 @@ public class QueryEndpointUnitTest extends BaseUnitTest { public void export_publicRead_succeeds() throws UserNotFoundException, QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, DatabaseNotFoundException, ImageNotSupportedException, QueryNotFoundException, FileStorageException, - IOException, NotAllowedException { + IOException, NotAllowedException { /* test */ export_generic(DATABASE_3_ID, QUERY_3_ID, USER_2_ID, USER_2_PRINCIPAL, DATABASE_3, DATABASE_3_USER_1_READ_ACCESS, null, HttpStatus.OK); @@ -285,7 +282,10 @@ public class QueryEndpointUnitTest extends BaseUnitTest { public void execute_privateRead_succeeds() throws UserNotFoundException, QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, ColumnParseException, DatabaseNotFoundException, ImageNotSupportedException, SortException, NotAllowedException, PaginationException, - KeycloakRemoteException, at.tuwien.exception.AccessDeniedException { + KeycloakRemoteException, at.tuwien.exception.AccessDeniedException, QueryNotFoundException { + + /* mock */ + DATABASE_2.setAccesses(List.of(DATABASE_2_USER_2_READ_ACCESS)); /* test */ generic_execute(DATABASE_2_ID, QUERY_1_STATEMENT, USER_2_ID, USER_2_PRINCIPAL, DATABASE_2, DATABASE_2_USER_1_READ_ACCESS); @@ -296,7 +296,10 @@ public class QueryEndpointUnitTest extends BaseUnitTest { public void execute_privateWriteOwn_succeeds() throws UserNotFoundException, QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, ColumnParseException, DatabaseNotFoundException, ImageNotSupportedException, SortException, NotAllowedException, PaginationException, - KeycloakRemoteException, at.tuwien.exception.AccessDeniedException { + KeycloakRemoteException, at.tuwien.exception.AccessDeniedException, QueryNotFoundException { + + /* mock */ + DATABASE_2.setAccesses(List.of(DATABASE_2_USER_2_WRITE_OWN_ACCESS)); /* test */ generic_execute(DATABASE_2_ID, QUERY_1_STATEMENT, USER_2_ID, USER_2_PRINCIPAL, DATABASE_2, DATABASE_2_USER_1_WRITE_OWN_ACCESS); @@ -307,7 +310,10 @@ public class QueryEndpointUnitTest extends BaseUnitTest { public void execute_privateWriteAll_succeeds() throws UserNotFoundException, QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, ColumnParseException, DatabaseNotFoundException, ImageNotSupportedException, SortException, NotAllowedException, PaginationException, - KeycloakRemoteException, at.tuwien.exception.AccessDeniedException { + KeycloakRemoteException, at.tuwien.exception.AccessDeniedException, QueryNotFoundException { + + /* mock */ + DATABASE_2.setAccesses(List.of(DATABASE_2_USER_2_WRITE_ALL_ACCESS)); /* test */ generic_execute(DATABASE_2_ID, QUERY_1_STATEMENT, USER_2_ID, USER_2_PRINCIPAL, DATABASE_2, DATABASE_2_USER_1_WRITE_ALL_ACCESS); @@ -318,7 +324,10 @@ public class QueryEndpointUnitTest extends BaseUnitTest { public void execute_privateOwner_succeeds() throws UserNotFoundException, QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, ColumnParseException, DatabaseNotFoundException, ImageNotSupportedException, SortException, NotAllowedException, PaginationException, - KeycloakRemoteException, at.tuwien.exception.AccessDeniedException { + KeycloakRemoteException, at.tuwien.exception.AccessDeniedException, QueryNotFoundException { + + /* mock */ + DATABASE_2.setAccesses(List.of(DATABASE_2_USER_1_WRITE_ALL_ACCESS)); /* test */ generic_execute(DATABASE_2_ID, QUERY_1_STATEMENT, USER_1_ID, USER_1_PRINCIPAL, DATABASE_2, DATABASE_2_USER_1_WRITE_ALL_ACCESS); @@ -339,8 +348,11 @@ public class QueryEndpointUnitTest extends BaseUnitTest { @WithMockUser(username = USER_2_USERNAME, authorities = {"execute-query"}) public void reExecute_privateRead_succeeds() throws UserNotFoundException, QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, ColumnParseException, DatabaseNotFoundException, - ImageNotSupportedException, SortException, NotAllowedException, - PaginationException, QueryNotFoundException, at.tuwien.exception.AccessDeniedException { + ImageNotSupportedException, SortException, NotAllowedException, PaginationException, QueryNotFoundException, + at.tuwien.exception.AccessDeniedException { + + /* mock */ + DATABASE_2.setAccesses(List.of(DATABASE_2_USER_2_READ_ACCESS)); /* test */ generic_reExecute(DATABASE_2_ID, QUERY_1_ID, QUERY_1, QUERY_1_RESULT_ID, QUERY_1_RESULT_DTO, @@ -354,6 +366,9 @@ public class QueryEndpointUnitTest extends BaseUnitTest { DatabaseNotFoundException, ImageNotSupportedException, SortException, NotAllowedException, PaginationException, QueryNotFoundException, at.tuwien.exception.AccessDeniedException { + /* mock */ + DATABASE_2.setAccesses(List.of(DATABASE_2_USER_2_WRITE_OWN_ACCESS)); + /* test */ generic_reExecute(DATABASE_2_ID, QUERY_1_ID, QUERY_1, QUERY_1_RESULT_ID, QUERY_1_RESULT_DTO, USER_2_ID, USER_2_PRINCIPAL, DATABASE_2, DATABASE_2_USER_1_WRITE_OWN_ACCESS); @@ -366,6 +381,9 @@ public class QueryEndpointUnitTest extends BaseUnitTest { DatabaseNotFoundException, ImageNotSupportedException, SortException, NotAllowedException, PaginationException, QueryNotFoundException, at.tuwien.exception.AccessDeniedException { + /* mock */ + DATABASE_2.setAccesses(List.of(DATABASE_2_USER_2_WRITE_ALL_ACCESS)); + /* test */ generic_reExecute(DATABASE_2_ID, QUERY_1_ID, QUERY_1, QUERY_1_RESULT_ID, QUERY_1_RESULT_DTO, USER_2_ID, USER_2_PRINCIPAL, DATABASE_2, DATABASE_2_USER_1_WRITE_ALL_ACCESS); @@ -434,7 +452,7 @@ public class QueryEndpointUnitTest extends BaseUnitTest { QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, ColumnParseException, DatabaseNotFoundException, ImageNotSupportedException, SortException, NotAllowedException, PaginationException, KeycloakRemoteException, - at.tuwien.exception.AccessDeniedException { + at.tuwien.exception.AccessDeniedException, QueryNotFoundException { final ExecuteStatementDto request = ExecuteStatementDto.builder() .statement(statement) .build(); @@ -447,15 +465,6 @@ public class QueryEndpointUnitTest extends BaseUnitTest { when(databaseRepository.findById(databaseId)) .thenReturn(Optional.of(database)); log.trace("mock database for container database id {}", databaseId); - if (access == null) { - when(databaseAccessRepository.findByDatabaseIdAndUserId(databaseId, userId)) - .thenReturn(Optional.empty()); - log.trace("mock no access for database with id {} and username {}", databaseId, userId); - } else { - when(databaseAccessRepository.findByDatabaseIdAndUserId(databaseId, userId)) - .thenReturn(Optional.of(access)); - log.trace("mock access {} for database with id {} and username {}", access.getType(), databaseId, userId); - } when(queryService.execute(databaseId, request, principal, page, size, sortDirection, sortColumn)) .thenReturn(QUERY_1_RESULT_DTO); log.trace("mock query service for container database with id {}", databaseId); @@ -487,13 +496,6 @@ public class QueryEndpointUnitTest extends BaseUnitTest { .thenReturn(Optional.of(database)); when(storeService.findOne(databaseId, queryId, principal)) .thenReturn(query); - if (access == null) { - when(databaseAccessRepository.findByDatabaseIdAndUserId(databaseId, userId)) - .thenReturn(Optional.empty()); - } else { - when(databaseAccessRepository.findByDatabaseIdAndUserId(databaseId, userId)) - .thenReturn(Optional.of(access)); - } when(queryService.reExecute(databaseId, query, page, size, sortDirection, sortColumn, principal)) .thenReturn(result); @@ -518,13 +520,6 @@ public class QueryEndpointUnitTest extends BaseUnitTest { /* mock */ when(databaseRepository.findById(databaseId)) .thenReturn(Optional.of(database)); - if (access == null) { - when(databaseAccessRepository.findByDatabaseIdAndUserId(databaseId, userId)) - .thenReturn(Optional.empty()); - } else { - when(databaseAccessRepository.findByDatabaseIdAndUserId(databaseId, userId)) - .thenReturn(Optional.of(access)); - } when(storeService.findOne(databaseId, queryId, principal)) .thenReturn(QUERY_1); when(queryService.findOne(databaseId, queryId, principal)) diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/SemanticsEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/SemanticsEndpointUnitTest.java index 957825376ee00951ce0bc3eda07a89807ddbc354..72cd34eeb80b2a304dbc87af9117ee5defe6fbea 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/SemanticsEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/SemanticsEndpointUnitTest.java @@ -1,23 +1,17 @@ - package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; import at.tuwien.annotations.MockAmqp; import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.table.columns.concepts.ConceptDto; -import at.tuwien.api.database.table.columns.concepts.ConceptSaveDto; import at.tuwien.api.database.table.columns.concepts.UnitDto; -import at.tuwien.api.database.table.columns.concepts.UnitSaveDto; import at.tuwien.api.semantics.EntityDto; import at.tuwien.api.semantics.TableColumnEntityDto; -import at.tuwien.entities.database.table.columns.TableColumnConcept; -import at.tuwien.entities.database.table.columns.TableColumnUnit; import at.tuwien.exception.*; import at.tuwien.service.EntityService; import at.tuwien.service.SemanticService; import lombok.extern.log4j.Log4j2; import org.apache.jena.sys.JenaSystem; -import org.hibernate.HibernateException; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -33,7 +27,6 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.List; import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.when; @Log4j2 @@ -89,62 +82,6 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest { findAllUnits_generic(); } - @Test - @WithAnonymousUser - public void saveConcept_anonymous_fails() { - - /* test */ - assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - saveConcept_generic(COLUMN_CONCEPT_TEMPERATURE_SAVE_DTO, COLUMN_CONCEPT_TEMPERATURE); - }); - } - - @Test - @WithMockUser(username = USER_4_USERNAME, authorities = {}) - public void saveConcept_noRole_fails() { - - /* test */ - assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - saveConcept_generic(COLUMN_CONCEPT_TEMPERATURE_SAVE_DTO, COLUMN_CONCEPT_TEMPERATURE); - }); - } - - @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-semantic-concept"}) - public void saveConcept_hasRole_succeeds() { - - /* test */ - saveConcept_generic(COLUMN_CONCEPT_TEMPERATURE_SAVE_DTO, COLUMN_CONCEPT_TEMPERATURE); - } - - @Test - @WithAnonymousUser - public void saveUnit_anonymous_fails() { - - /* test */ - assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - saveUnit_generic(UNIT_1_SAVE_DTO, UNIT_1); - }); - } - - @Test - @WithMockUser(username = USER_4_USERNAME, authorities = {}) - public void saveUnit_noRole_fails() { - - /* test */ - assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - saveUnit_generic(UNIT_1_SAVE_DTO, UNIT_1); - }); - } - - @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-semantic-unit"}) - public void saveUnit_hasRole_succeeds() { - - /* test */ - saveUnit_generic(UNIT_1_SAVE_DTO, UNIT_1); - } - @Test @WithAnonymousUser public void analyseTable_anonymous_fails() { @@ -167,7 +104,8 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"table-semantic-analyse"}) - public void findAll_hasRole_succeeds() throws TableNotFoundException, QueryMalformedException, DatabaseNotFoundException { + public void findAll_hasRole_succeeds() throws TableNotFoundException, QueryMalformedException, + DatabaseNotFoundException, OntologyInvalidException { /* test */ analyseTable_generic(DATABASE_1_ID, TABLE_1_ID); @@ -179,7 +117,7 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest { /* test */ assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - analyseTableColumn_generic(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID); + analyseTableColumn_generic(DATABASE_1_ID, TABLE_1_ID, TABLE_1_COLUMNS.get(0).getId()); }); } @@ -189,16 +127,17 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest { /* test */ assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - analyseTableColumn_generic(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID); + analyseTableColumn_generic(DATABASE_1_ID, TABLE_1_ID, TABLE_1_COLUMNS.get(0).getId()); }); } @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"table-semantic-analyse"}) - public void analyseTableColumn_hasRole_succeeds() throws QueryMalformedException, TableColumnNotFoundException { + public void analyseTableColumn_hasRole_succeeds() throws QueryMalformedException, TableColumnNotFoundException, + TableNotFoundException, DatabaseNotFoundException, OntologyInvalidException { /* test */ - analyseTableColumn_generic(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID); + analyseTableColumn_generic(DATABASE_1_ID, TABLE_1_ID, TABLE_1_COLUMNS.get(0).getId()); } /* ################################################################################################### */ @@ -209,7 +148,7 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest { /* mock */ when(semanticService.findAllConcepts()) - .thenReturn(List.of(COLUMN_CONCEPT_TEMPERATURE, COLUMN_CONCEPT_FAIR_DATA)); + .thenReturn(List.of(COLUMN_CONCEPT_PRECIPITATION, COLUMN_CONCEPT_FAIR_DATA)); /* test */ final ResponseEntity<List<ConceptDto>> response = semanticsEndpoint.findAllConcepts(); @@ -223,7 +162,7 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest { /* mock */ when(semanticService.findAllUnits()) - .thenReturn(List.of(UNIT_2, UNIT_1)); + .thenReturn(List.of(UNIT_MILLIMETRE, UNIT_TONNE)); /* test */ final ResponseEntity<List<UnitDto>> response = semanticsEndpoint.findAllUnits(); @@ -233,45 +172,8 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest { assertEquals(2, body.size()); } - public void saveConcept_generic(ConceptSaveDto saveDto, TableColumnConcept concept) { - - /* mock */ - if (concept != null) { - when(semanticService.saveConcept(saveDto)) - .thenReturn(concept); - } else { - doThrow(HibernateException.class) - .when(semanticService) - .saveConcept(saveDto); - } - - /* test */ - final ResponseEntity<ConceptDto> response = semanticsEndpoint.saveConcept(saveDto); - assertEquals(HttpStatus.ACCEPTED, response.getStatusCode()); - final ConceptDto body = response.getBody(); - assertNotNull(body); - } - - public void saveUnit_generic(UnitSaveDto saveDto, TableColumnUnit unit) { - - /* mock */ - if (unit != null) { - when(semanticService.saveUnit(saveDto)) - .thenReturn(unit); - } else { - doThrow(HibernateException.class) - .when(semanticService) - .saveUnit(saveDto); - } - - /* test */ - final ResponseEntity<UnitDto> response = semanticsEndpoint.saveUnit(saveDto); - assertEquals(HttpStatus.ACCEPTED, response.getStatusCode()); - final UnitDto body = response.getBody(); - assertNotNull(body); - } - - public void analyseTable_generic(Long databaseId, Long tableId) throws TableNotFoundException, QueryMalformedException, DatabaseNotFoundException { + public void analyseTable_generic(Long databaseId, Long tableId) throws TableNotFoundException, + QueryMalformedException, DatabaseNotFoundException, OntologyInvalidException { /* mock */ when(entityService.suggestTableSemantics(databaseId, tableId)) @@ -285,7 +187,7 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest { } public void analyseTableColumn_generic(Long databaseId, Long tableId, Long columnId) throws QueryMalformedException, - TableColumnNotFoundException { + TableColumnNotFoundException, TableNotFoundException, DatabaseNotFoundException, OntologyInvalidException { /* mock */ when(entityService.suggestTableColumnSemantics(databaseId, tableId, columnId)) diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/StoreEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/StoreEndpointUnitTest.java index 2be43a9af8188fd4f506065a49dc58627c8518e2..62e2b37824f3d28c731e648e645d6019d7cc5f85 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/StoreEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/StoreEndpointUnitTest.java @@ -14,9 +14,7 @@ import at.tuwien.repository.mdb.UserRepository; import at.tuwien.service.AccessService; import at.tuwien.service.DatabaseService; import at.tuwien.service.impl.StoreServiceImpl; -import jakarta.persistence.Access; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -97,7 +95,7 @@ public class StoreEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_2_USERNAME, authorities = {"list-queries"}) - public void findAll_privateNoAccess_fails() throws AccessDeniedException { + public void findAll_privateNoAccess_fails() throws AccessDeniedException, DatabaseNotFoundException { /* mock */ doThrow(AccessDeniedException.class) diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableColumnEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableColumnEndpointUnitTest.java index 15d59226844ed20de468aebd9ed081459025d9b5..5ed2d91817748146788778f2a9a538a83bb9d312 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableColumnEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableColumnEndpointUnitTest.java @@ -10,14 +10,9 @@ import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.entities.database.table.Table; import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.exception.*; -import at.tuwien.repository.sdb.ConceptIdxRepository; -import at.tuwien.repository.sdb.TableColumnIdxRepository; -import at.tuwien.repository.sdb.TableIdxRepository; -import at.tuwien.repository.sdb.UnitIdxRepository; import at.tuwien.service.AccessService; import at.tuwien.service.DatabaseService; import at.tuwien.service.TableService; -import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -61,30 +56,39 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void update_publicAnonymous_fails() { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .conceptUri(COLUMN_CONCEPT_FAIR_DATA_URI) + .build(); /* test */ assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - generic_update(DATABASE_3_ID, TABLE_8_ID, COLUMN_1_1_ID, DATABASE_3, TABLE_8, null, COLUMN_8_2_SEMANTICS_UPDATE_DTO, null, null, null); + generic_update(DATABASE_3_ID, TABLE_8_ID, TABLE_8_COLUMNS.get(0).getId(), DATABASE_3, TABLE_8, null, request, null, null, null); }); } @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_publicHasRoleNoAccess_fails() { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .conceptUri(COLUMN_CONCEPT_FAIR_DATA_URI) + .build(); /* test */ assertThrows(AccessDeniedException.class, () -> { - generic_update(DATABASE_3_ID, TABLE_8_ID, COLUMN_1_1_ID, DATABASE_3, TABLE_8, null, COLUMN_8_2_SEMANTICS_UPDATE_DTO, USER_1_ID, USER_1_PRINCIPAL, null); + generic_update(DATABASE_3_ID, TABLE_8_ID, TABLE_8_COLUMNS.get(0).getId(), DATABASE_3, TABLE_8, null, request, USER_1_ID, USER_1_PRINCIPAL, null); }); } @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_publicHasRoleHasOnlyReadAccess_fails() { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .conceptUri(COLUMN_CONCEPT_FAIR_DATA_URI) + .build(); /* test */ assertThrows(NotAllowedException.class, () -> { - generic_update(DATABASE_3_ID, TABLE_8_ID, COLUMN_1_1_ID, DATABASE_3, TABLE_8, null, COLUMN_8_2_SEMANTICS_UPDATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_3_USER_1_READ_ACCESS); + generic_update(DATABASE_3_ID, TABLE_8_ID, TABLE_8_COLUMNS.get(0).getId(), DATABASE_3, TABLE_8, null, request, USER_1_ID, USER_1_PRINCIPAL, DATABASE_3_USER_1_READ_ACCESS); }); } @@ -93,38 +97,50 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest { public void update_publicHasRoleHasOwnWriteAccess_succeeds() throws TableNotFoundException, NotAllowedException, TableMalformedException, DatabaseNotFoundException, ContainerNotFoundException, SemanticEntityPersistException, SemanticEntityNotFoundException, QueryMalformedException, at.tuwien.exception.AccessDeniedException { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .unitUri(UNIT_MILLIMETRE_URI) + .build(); /* test */ - generic_update(DATABASE_3_ID, TABLE_8_ID, COLUMN_1_1_ID, DATABASE_3, TABLE_8, COLUMN_8_2_WITH_SEMANTICS, COLUMN_8_2_SEMANTICS_UPDATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_3_USER_1_WRITE_OWN_ACCESS); + generic_update(DATABASE_3_ID, TABLE_8_ID, TABLE_8_COLUMNS.get(0).getId(), DATABASE_3, TABLE_8, TABLE_1_COLUMNS.get(0), request, USER_1_ID, USER_1_PRINCIPAL, DATABASE_3_USER_1_WRITE_OWN_ACCESS); } @Test @WithMockUser(username = USER_2_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_publicHasRoleForeignHasOwnWriteAccess_fails() { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .unitUri(UNIT_MILLIMETRE_URI) + .build(); /* test */ assertThrows(NotAllowedException.class, () -> { - generic_update(DATABASE_3_ID, TABLE_8_ID, COLUMN_1_1_ID, DATABASE_3, TABLE_8, null, COLUMN_8_2_SEMANTICS_UPDATE_DTO, USER_2_ID, USER_2_PRINCIPAL, DATABASE_3_USER_2_WRITE_OWN_ACCESS); + generic_update(DATABASE_3_ID, TABLE_8_ID, TABLE_8_COLUMNS.get(0).getId(), DATABASE_3, TABLE_8, null, request, USER_2_ID, USER_2_PRINCIPAL, DATABASE_3_USER_2_WRITE_OWN_ACCESS); }); } @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_publicDatabaseNotFound_fails() { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .unitUri(UNIT_MILLIMETRE_URI) + .build(); /* test */ assertThrows(DatabaseNotFoundException.class, () -> { - generic_update(DATABASE_3_ID, TABLE_8_ID, COLUMN_1_1_ID, null, TABLE_8, null, COLUMN_8_2_SEMANTICS_UPDATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_3_USER_1_WRITE_OWN_ACCESS); + generic_update(DATABASE_3_ID, TABLE_8_ID, TABLE_8_COLUMNS.get(0).getId(), null, TABLE_8, null, request, USER_1_ID, USER_1_PRINCIPAL, DATABASE_3_USER_1_WRITE_OWN_ACCESS); }); } @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_publicTableNotFound_fails() { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .unitUri(UNIT_MILLIMETRE_URI) + .build(); /* test */ assertThrows(TableNotFoundException.class, () -> { - generic_update(DATABASE_3_ID, TABLE_8_ID, COLUMN_1_1_ID, DATABASE_3, null, null, COLUMN_8_2_SEMANTICS_UPDATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_3_USER_1_WRITE_OWN_ACCESS); + generic_update(DATABASE_3_ID, TABLE_8_ID, TABLE_8_COLUMNS.get(0).getId(), DATABASE_3, null, null, request, USER_1_ID, USER_1_PRINCIPAL, DATABASE_3_USER_1_WRITE_OWN_ACCESS); }); } @@ -134,9 +150,12 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest { NotAllowedException, TableMalformedException, DatabaseNotFoundException, ContainerNotFoundException, SemanticEntityPersistException, SemanticEntityNotFoundException, QueryMalformedException, at.tuwien.exception.AccessDeniedException { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .unitUri(UNIT_MILLIMETRE_URI) + .build(); /* test */ - generic_update(DATABASE_3_ID, TABLE_8_ID, COLUMN_1_1_ID, DATABASE_3, TABLE_8, COLUMN_8_2_WITH_SEMANTICS, COLUMN_8_2_SEMANTICS_UPDATE_DTO, USER_2_ID, USER_2_PRINCIPAL, DATABASE_3_USER_2_WRITE_ALL_ACCESS); + generic_update(DATABASE_3_ID, TABLE_8_ID, TABLE_8_COLUMNS.get(0).getId(), DATABASE_3, TABLE_8, TABLE_8_COLUMNS.get(0), request, USER_2_ID, USER_2_PRINCIPAL, DATABASE_3_USER_2_WRITE_ALL_ACCESS); } /* ################################################################################################### */ @@ -146,30 +165,39 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void update_privateAnonymous_fails() { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .unitUri(UNIT_MILLIMETRE_URI) + .build(); /* test */ assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - generic_update(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID, DATABASE_1, TABLE_1, null, COLUMN_1_4_SEMANTICS_UPDATE_DTO, null, null, null); + generic_update(DATABASE_1_ID, TABLE_1_ID, TABLE_1_COLUMNS.get(0).getId(), DATABASE_1, TABLE_1, null, request, null, null, null); }); } @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_privateHasRoleNoAccess_fails() { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .unitUri(UNIT_MILLIMETRE_URI) + .build(); /* test */ assertThrows(AccessDeniedException.class, () -> { - generic_update(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID, DATABASE_1, TABLE_1, null, COLUMN_1_4_SEMANTICS_UPDATE_DTO, USER_1_ID, USER_1_PRINCIPAL, null); + generic_update(DATABASE_1_ID, TABLE_1_ID, TABLE_1_COLUMNS.get(0).getId(), DATABASE_1, TABLE_1, null, request, USER_1_ID, USER_1_PRINCIPAL, null); }); } @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_privateHasRoleHasOnlyReadAccess_fails() { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .unitUri(UNIT_MILLIMETRE_URI) + .build(); /* test */ assertThrows(NotAllowedException.class, () -> { - generic_update(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID, DATABASE_1, TABLE_1, null, COLUMN_1_4_SEMANTICS_UPDATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_1_USER_1_READ_ACCESS); + generic_update(DATABASE_1_ID, TABLE_1_ID, TABLE_1_COLUMNS.get(0).getId(), DATABASE_1, TABLE_1, null, request, USER_1_ID, USER_1_PRINCIPAL, DATABASE_1_USER_1_READ_ACCESS); }); } @@ -179,38 +207,50 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest { TableMalformedException, DatabaseNotFoundException, ContainerNotFoundException, SemanticEntityPersistException, SemanticEntityNotFoundException, QueryMalformedException, at.tuwien.exception.AccessDeniedException { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .unitUri(UNIT_MILLIMETRE_URI) + .build(); /* test */ - generic_update(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID, DATABASE_1, TABLE_1, COLUMN_1_4_WITH_SEMANTICS, COLUMN_1_4_SEMANTICS_UPDATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_1_USER_1_WRITE_OWN_ACCESS); + generic_update(DATABASE_1_ID, TABLE_1_ID, TABLE_1_COLUMNS.get(0).getId(), DATABASE_1, TABLE_1, TABLE_1_COLUMNS.get(0), request, USER_1_ID, USER_1_PRINCIPAL, DATABASE_1_USER_1_WRITE_OWN_ACCESS); } @Test @WithMockUser(username = USER_2_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_privateHasRoleForeignHasOwnWriteAccess_fails() { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .unitUri(UNIT_MILLIMETRE_URI) + .build(); /* test */ assertThrows(NotAllowedException.class, () -> { - generic_update(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID, DATABASE_1, TABLE_1, null, COLUMN_1_4_SEMANTICS_UPDATE_DTO, USER_2_ID, USER_2_PRINCIPAL, DATABASE_1_USER_2_WRITE_OWN_ACCESS); + generic_update(DATABASE_1_ID, TABLE_1_ID, TABLE_1_COLUMNS.get(0).getId(), DATABASE_1, TABLE_1, null, request, USER_2_ID, USER_2_PRINCIPAL, DATABASE_1_USER_2_WRITE_OWN_ACCESS); }); } @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_privateDatabaseNotFound_fails() { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .unitUri(UNIT_MILLIMETRE_URI) + .build(); /* test */ assertThrows(DatabaseNotFoundException.class, () -> { - generic_update(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID, null, TABLE_1, null, COLUMN_1_4_SEMANTICS_UPDATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_1_USER_1_WRITE_OWN_ACCESS); + generic_update(DATABASE_1_ID, TABLE_1_ID, TABLE_1_COLUMNS.get(0).getId(), null, TABLE_1, null, request, USER_1_ID, USER_1_PRINCIPAL, DATABASE_1_USER_1_WRITE_OWN_ACCESS); }); } @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_privateTableNotFound_fails() { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .unitUri(UNIT_MILLIMETRE_URI) + .build(); /* test */ assertThrows(TableNotFoundException.class, () -> { - generic_update(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID, DATABASE_1, null, null, COLUMN_1_4_SEMANTICS_UPDATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_1_USER_1_WRITE_OWN_ACCESS); + generic_update(DATABASE_1_ID, TABLE_1_ID, TABLE_1_COLUMNS.get(0).getId(), DATABASE_1, null, null, request, USER_1_ID, USER_1_PRINCIPAL, DATABASE_1_USER_1_WRITE_OWN_ACCESS); }); } @@ -220,9 +260,12 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest { NotAllowedException, TableMalformedException, DatabaseNotFoundException, ContainerNotFoundException, SemanticEntityPersistException, SemanticEntityNotFoundException, QueryMalformedException, at.tuwien.exception.AccessDeniedException { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .unitUri(UNIT_MILLIMETRE_URI) + .build(); /* test */ - generic_update(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID, DATABASE_1, TABLE_1, COLUMN_1_4_WITH_SEMANTICS, COLUMN_1_4_SEMANTICS_UPDATE_DTO, USER_2_ID, USER_2_PRINCIPAL, DATABASE_1_USER_2_WRITE_ALL_ACCESS); + generic_update(DATABASE_1_ID, TABLE_1_ID, TABLE_1_COLUMNS.get(0).getId(), DATABASE_1, TABLE_1, TABLE_1_COLUMNS.get(0), request, USER_2_ID, USER_2_PRINCIPAL, DATABASE_1_USER_2_WRITE_ALL_ACCESS); } /* ################################################################################################### */ @@ -247,7 +290,7 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest { .find(databaseId); } if (table != null) { - when(tableService.findById(databaseId, tableId)) + when(tableService.find(databaseId, tableId)) .thenReturn(table); when(tableService.update(databaseId, tableId, columnId, data, "abc")) .thenReturn(column); @@ -257,7 +300,7 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest { .update(databaseId, tableId, columnId, data, "abc"); doThrow(TableNotFoundException.class) .when(tableService) - .findById(databaseId, tableId); + .find(databaseId, tableId); } if (access != null) { when(accessService.find(databaseId, userId)) diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableDataEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableDataEndpointUnitTest.java index 2a61c8b883d7ad3c1e629cfd5a55f3bfe5d12281..cf5b8dd25cee8571cbb3fe2570d235834efd73ed 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableDataEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableDataEndpointUnitTest.java @@ -430,9 +430,12 @@ public class TableDataEndpointUnitTest extends BaseUnitTest { final ImportDto request = ImportDto.builder().location("test:csv/csv_01.csv").build(); /* mock */ - when(databaseService.find(databaseId)).thenReturn(database); - when(tableService.find(databaseId, tableId)).thenReturn(table); - when(accessService.find(databaseId, userId)).thenReturn(access); + when(databaseService.find(databaseId)) + .thenReturn(database); + when(tableService.find(databaseId, tableId)) + .thenReturn(table); + when(accessService.find(databaseId, userId)) + .thenReturn(access); /* test */ final ResponseEntity<?> response = dataEndpoint.importCsv(databaseId, tableId, request, principal); @@ -447,9 +450,12 @@ public class TableDataEndpointUnitTest extends BaseUnitTest { ContainerNotFoundException, AccessDeniedException { /* mock */ - when(databaseService.find(databaseId)).thenReturn(database); - when(tableService.find(databaseId, tableId)).thenReturn(table); - when(accessService.find(databaseId, userId)).thenReturn(access); + when(databaseService.find(databaseId)) + .thenReturn(database); + when(tableService.find(databaseId, tableId)) + .thenReturn(table); + when(accessService.find(databaseId, userId)) + .thenReturn(access); /* test */ final ResponseEntity<?> response = dataEndpoint.insert(databaseId, tableId, data, principal); @@ -465,10 +471,14 @@ public class TableDataEndpointUnitTest extends BaseUnitTest { AccessDeniedException { /* mock */ - when(databaseService.find(databaseId)).thenReturn(database); - when(tableService.find(databaseId, tableId)).thenReturn(table); - when(accessService.find(databaseId, userId)).thenReturn(access); - when(queryService.tableFindAll(databaseId, tableId, timestamp, page, size, principal)).thenReturn(QUERY_1_RESULT_DTO); + when(databaseService.find(databaseId)) + .thenReturn(database); + when(tableService.find(databaseId, tableId)) + .thenReturn(table); + when(accessService.find(databaseId, userId)) + .thenReturn(access); + when(queryService.tableFindAll(databaseId, tableId, timestamp, page, size, principal)) + .thenReturn(QUERY_1_RESULT_DTO); /* test */ final ResponseEntity<QueryResultDto> response = dataEndpoint.getAll(databaseId, tableId, @@ -487,10 +497,14 @@ public class TableDataEndpointUnitTest extends BaseUnitTest { ImageNotSupportedException, AccessDeniedException { /* mock */ - when(databaseService.find(databaseId)).thenReturn(database); - when(tableService.find(databaseId, tableId)).thenReturn(table); - when(accessService.find(databaseId, userId)).thenReturn(access); - when(queryService.tableCount(databaseId, tableId, timestamp, principal)).thenReturn(QUERY_1_RESULT_NUMBER); + when(databaseService.find(databaseId)) + .thenReturn(database); + when(tableService.find(databaseId, tableId)) + .thenReturn(table); + when(accessService.find(databaseId, userId)) + .thenReturn(access); + when(queryService.tableCount(databaseId, tableId, timestamp, principal)) + .thenReturn(QUERY_1_RESULT_NUMBER); /* test */ final ResponseEntity<Long> response = dataEndpoint.getCount(databaseId, tableId, diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointIntegrationTest.java deleted file mode 100644 index 65e7c420e269eccc049bd96f674fecfa64a6aa3d..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointIntegrationTest.java +++ /dev/null @@ -1,79 +0,0 @@ -package at.tuwien.endpoints; - -import at.tuwien.BaseUnitTest; -import at.tuwien.annotations.MockAmqp; -import at.tuwien.annotations.MockOpensearch; -import at.tuwien.config.MariaDbConfig; -import at.tuwien.config.MariaDbContainerConfig; -import at.tuwien.exception.*; -import at.tuwien.repository.mdb.*; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.testcontainers.containers.MariaDBContainer; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; - -import java.sql.SQLException; - -@Log4j2 -@Testcontainers -@EnableAutoConfiguration(exclude = RabbitAutoConfiguration.class) -@SpringBootTest -@ExtendWith(SpringExtension.class) -@MockAmqp -@MockOpensearch -public class TableEndpointIntegrationTest extends BaseUnitTest { - - @Autowired - private ImageRepository imageRepository; - - @Autowired - private ContainerRepository containerRepository; - - @Autowired - private DatabaseRepository databaseRepository; - - @Autowired - private DatabaseAccessRepository accessRepository; - - @Autowired - private TableEndpoint tableEndpoint; - - @Autowired - private UserRepository userRepository; - - @Container - private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer(); - - @BeforeEach - public void beforeEach() throws SQLException { - /* metadata database */ - imageRepository.save(IMAGE_1); - userRepository.save(USER_1); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); - MariaDbConfig.dropAllDatabases(CONTAINER_1); - MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); - } - - @Test - @WithMockUser(username = USER_1_USERNAME, authorities = {"create-table"}) - public void create_hasRoleHasAccess_succeeds() throws UserNotFoundException, TableMalformedException, NotAllowedException, - QueryMalformedException, DatabaseNotFoundException, ImageNotSupportedException, AmqpException, - TableNameExistsException, ContainerNotFoundException, AccessDeniedException { - - /* mock */ - accessRepository.save(DATABASE_1_USER_1_WRITE_OWN_ACCESS); - - /* test */ - tableEndpoint.create(DATABASE_1_ID, TABLE_3_CREATE_DTO, USER_1_PRINCIPAL); - } -} diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointUnitTest.java index 21762fad93390459ccf89d2bc87d4542b7ad6b45..c5501238b39c56a74be2ab1eb122e81e0377ab63 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointUnitTest.java @@ -17,7 +17,6 @@ import at.tuwien.service.DatabaseService; import at.tuwien.service.MessageQueueService; import at.tuwien.service.TableService; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -61,12 +60,6 @@ public class TableEndpointUnitTest extends BaseUnitTest { @Autowired private TableEndpoint tableEndpoint; - @BeforeEach - public void beforeEach() { - DATABASE_1.setTables(List.of(TABLE_1, TABLE_2, TABLE_3, TABLE_7)); - DATABASE_3.setTables(List.of(TABLE_8)); - } - @Test @WithAnonymousUser public void list_publicAnonymous_succeeds() throws NotAllowedException, DatabaseNotFoundException, @@ -113,7 +106,7 @@ public class TableEndpointUnitTest extends BaseUnitTest { /* test */ assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - generic_create(DATABASE_3_ID, DATABASE_3, TABLE_4_CREATE_DTO, null, null, null); + generic_create(DATABASE_3_ID, DATABASE_3, TABLE_5_CREATE_DTO, null, null, null); }); } @@ -123,7 +116,7 @@ public class TableEndpointUnitTest extends BaseUnitTest { /* test */ assertThrows(DatabaseNotFoundException.class, () -> { - generic_create(DATABASE_3_ID, null, TABLE_4_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_3_USER_1_WRITE_OWN_ACCESS); + generic_create(DATABASE_3_ID, null, TABLE_5_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_3_USER_1_WRITE_OWN_ACCESS); }); } @@ -133,7 +126,7 @@ public class TableEndpointUnitTest extends BaseUnitTest { /* test */ assertThrows(AccessDeniedException.class, () -> { - generic_create(DATABASE_3_ID, DATABASE_3, TABLE_4_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, null); + generic_create(DATABASE_3_ID, DATABASE_3, TABLE_5_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, null); }); } @@ -143,7 +136,7 @@ public class TableEndpointUnitTest extends BaseUnitTest { /* test */ assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - generic_create(DATABASE_3_ID, DATABASE_3, TABLE_4_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_3_USER_1_WRITE_OWN_ACCESS); + generic_create(DATABASE_3_ID, DATABASE_3, TABLE_5_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_3_USER_1_WRITE_OWN_ACCESS); }); } @@ -153,7 +146,7 @@ public class TableEndpointUnitTest extends BaseUnitTest { /* test */ assertThrows(NotAllowedException.class, () -> { - generic_create(DATABASE_3_ID, DATABASE_3, TABLE_4_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_3_USER_1_READ_ACCESS); + generic_create(DATABASE_3_ID, DATABASE_3, TABLE_5_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_3_USER_1_READ_ACCESS); }); } @@ -185,8 +178,8 @@ public class TableEndpointUnitTest extends BaseUnitTest { .columns(List.of(ColumnCreateDto.builder() .name("ID") .type(ColumnTypeDto.DECIMAL) - .size(-1) - .d(0) + .size(-1L) + .d(0L) .build())) .constraints(null) .build(); @@ -206,8 +199,8 @@ public class TableEndpointUnitTest extends BaseUnitTest { .columns(List.of(ColumnCreateDto.builder() .name("ID") .type(ColumnTypeDto.DECIMAL) - .size(66) - .d(0) + .size(66L) + .d(0L) .build())) .constraints(null) .build(); @@ -227,8 +220,8 @@ public class TableEndpointUnitTest extends BaseUnitTest { .columns(List.of(ColumnCreateDto.builder() .name("ID") .type(ColumnTypeDto.DECIMAL) - .size(0) - .d(39) + .size(0L) + .d(39L) .build())) .constraints(null) .build(); @@ -248,8 +241,8 @@ public class TableEndpointUnitTest extends BaseUnitTest { .columns(List.of(ColumnCreateDto.builder() .name("ID") .type(ColumnTypeDto.DECIMAL) - .size(9) - .d(10) + .size(9L) + .d(10L) .build())) .constraints(null) .build(); @@ -309,85 +302,6 @@ public class TableEndpointUnitTest extends BaseUnitTest { generic_findById(DATABASE_3_ID, TABLE_8_ID, DATABASE_3, TABLE_8, USER_1_ID, USER_1_PRINCIPAL, null); } - @Test - @WithAnonymousUser - public void delete_publicAnonymous_fails() { - - /* test */ - assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - generic_delete(DATABASE_3_ID, TABLE_8_ID, DATABASE_3, TABLE_3, null); - }); - } - - @Test - @WithMockUser(username = USER_1_USERNAME, authorities = "delete-table") - public void delete_publicHasRoleTableNotFound_fails() throws TableNotFoundException, DatabaseNotFoundException { - - /* mock */ - doThrow(TableNotFoundException.class) - .when(tableService) - .find(DATABASE_3_ID, TABLE_8_ID); - - /* test */ - assertThrows(TableNotFoundException.class, () -> { - generic_delete(DATABASE_3_ID, TABLE_8_ID, DATABASE_3, null, USER_1_PRINCIPAL); - }); - } - - @Test - @WithMockUser(username = USER_1_USERNAME, authorities = "delete-table") - public void delete_publicHasRole_succeeds() throws DatabaseNotFoundException, NotAllowedException, - TableNotFoundException, TableMalformedException, QueryMalformedException, ImageNotSupportedException, - ContainerNotFoundException, DataProcessingException { - - /* mock */ - when(tableService.find(DATABASE_3_ID, TABLE_8_ID)) - .thenReturn(TABLE_8); - - /* test */ - final ResponseEntity<?> response = generic_delete(DATABASE_3_ID, TABLE_8_ID, DATABASE_3, TABLE_8, USER_1_PRINCIPAL); - assertEquals(HttpStatus.ACCEPTED, response.getStatusCode()); - } - - @Test - @WithMockUser(username = USER_1_USERNAME, authorities = "delete-table") - public void delete_privateHasRoleForeignTable_fails() throws DatabaseNotFoundException, TableNotFoundException { - - /* mock */ - when(tableService.find(DATABASE_1_ID, TABLE_2_ID)) - .thenReturn(TABLE_2); - - /* test */ - assertThrows(NotAllowedException.class, () -> { - generic_delete(DATABASE_1_ID, TABLE_2_ID, DATABASE_1, TABLE_2, USER_1_PRINCIPAL); - }); - } - - @Test - @WithMockUser(username = USER_2_USERNAME, authorities = "delete-foreign-table") - public void delete_privateHasRoleForeignTable_succeeds() throws DatabaseNotFoundException, TableNotFoundException, - NotAllowedException, TableMalformedException, QueryMalformedException, ImageNotSupportedException, - ContainerNotFoundException, DataProcessingException { - - /* mock */ - when(tableService.find(DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(TABLE_1); - - /* test */ - final ResponseEntity<?> response = generic_delete(DATABASE_1_ID, TABLE_1_ID, DATABASE_1, TABLE_1, USER_2_PRINCIPAL); - assertEquals(HttpStatus.ACCEPTED, response.getStatusCode()); - } - - @Test - @WithMockUser(username = USER_4_USERNAME) - public void delete_publicNoRole_fails() { - - /* test */ - assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - generic_delete(DATABASE_3_ID, TABLE_8_ID, DATABASE_3, TABLE_8, USER_4_PRINCIPAL); - }); - } - /* ################################################################################################### */ /* ## PRIVATE DATABASES ## */ /* ################################################################################################### */ @@ -441,7 +355,7 @@ public class TableEndpointUnitTest extends BaseUnitTest { /* test */ assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - generic_create(DATABASE_1_ID, DATABASE_1, TABLE_4_CREATE_DTO, null, null, null); + generic_create(DATABASE_1_ID, DATABASE_1, TABLE_5_CREATE_DTO, null, null, null); }); } @@ -451,7 +365,7 @@ public class TableEndpointUnitTest extends BaseUnitTest { /* test */ assertThrows(DatabaseNotFoundException.class, () -> { - generic_create(DATABASE_1_ID, null, TABLE_4_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_1_USER_1_WRITE_OWN_ACCESS); + generic_create(DATABASE_1_ID, null, TABLE_5_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_1_USER_1_WRITE_OWN_ACCESS); }); } @@ -461,7 +375,7 @@ public class TableEndpointUnitTest extends BaseUnitTest { /* test */ assertThrows(AccessDeniedException.class, () -> { - generic_create(DATABASE_1_ID, DATABASE_1, TABLE_4_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, null); + generic_create(DATABASE_1_ID, DATABASE_1, TABLE_5_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, null); }); } @@ -471,7 +385,7 @@ public class TableEndpointUnitTest extends BaseUnitTest { /* test */ assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - generic_create(DATABASE_1_ID, DATABASE_1, TABLE_4_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_1_USER_1_WRITE_OWN_ACCESS); + generic_create(DATABASE_1_ID, DATABASE_1, TABLE_5_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_1_USER_1_WRITE_OWN_ACCESS); }); } @@ -481,7 +395,7 @@ public class TableEndpointUnitTest extends BaseUnitTest { /* test */ assertThrows(NotAllowedException.class, () -> { - generic_create(DATABASE_1_ID, DATABASE_1, TABLE_4_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_1_USER_1_READ_ACCESS); + generic_create(DATABASE_1_ID, DATABASE_1, TABLE_5_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_1_USER_1_READ_ACCESS); }); } @@ -533,59 +447,6 @@ public class TableEndpointUnitTest extends BaseUnitTest { generic_findById(DATABASE_1_ID, TABLE_1_ID, DATABASE_1, TABLE_1, USER_4_ID, USER_4_PRINCIPAL, null); } - @Test - @WithAnonymousUser - public void delete_privateAnonymous_fails() { - - /* test */ - assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - generic_delete(DATABASE_1_ID, TABLE_1_ID, DATABASE_1, TABLE_1, null); - }); - } - - @Test - @WithMockUser(username = USER_1_USERNAME, authorities = "delete-table") - public void delete_privateHasRoleTableNotFound_fails() throws TableNotFoundException, DatabaseNotFoundException { - - doThrow(TableNotFoundException.class) - .when(tableService) - .find(DATABASE_1_ID, TABLE_1_ID); - - /* test */ - assertThrows(TableNotFoundException.class, () -> { - generic_delete(DATABASE_1_ID, TABLE_1_ID, DATABASE_1, null, USER_1_PRINCIPAL); - }); - } - - @Test - @WithMockUser(username = USER_1_USERNAME, authorities = "delete-table") - public void delete_privateHasRoleDatabaseNotFound_fails() throws TableNotFoundException, DatabaseNotFoundException { - - /* mock */ - when(tableService.find(DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(TABLE_1); - - /* test */ - assertThrows(DatabaseNotFoundException.class, () -> { - generic_delete(DATABASE_1_ID, TABLE_1_ID, null, TABLE_1, USER_1_PRINCIPAL); - }); - } - - @Test - @WithMockUser(username = USER_1_USERNAME, authorities = "delete-table") - public void delete_privateHasRole_succeeds() throws DatabaseNotFoundException, NotAllowedException, - TableNotFoundException, TableMalformedException, QueryMalformedException, ImageNotSupportedException, - ContainerNotFoundException, DataProcessingException { - - /* mock */ - when(tableService.find(DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(TABLE_1); - - /* test */ - final ResponseEntity<?> response = generic_delete(DATABASE_1_ID, TABLE_1_ID, DATABASE_1, TABLE_1, USER_1_PRINCIPAL); - assertEquals(HttpStatus.ACCEPTED, response.getStatusCode()); - } - @Test @WithMockUser(username = USER_4_USERNAME) public void delete_privateNoRole_succeeds() throws TableNotFoundException, DatabaseNotFoundException, @@ -635,7 +496,7 @@ public class TableEndpointUnitTest extends BaseUnitTest { UUID userId, Principal principal, DatabaseAccess access) throws DatabaseNotFoundException, NotAllowedException, UserNotFoundException, TableMalformedException, QueryMalformedException, ImageNotSupportedException, AmqpException, TableNameExistsException, - ContainerNotFoundException, at.tuwien.exception.AccessDeniedException { + ContainerNotFoundException, at.tuwien.exception.AccessDeniedException, TableNotFoundException { /* mock */ if (database != null) { @@ -671,14 +532,14 @@ public class TableEndpointUnitTest extends BaseUnitTest { /* mock */ if (table != null) { - when(tableService.findById(databaseId, tableId)) + when(tableService.find(databaseId, tableId)) .thenReturn(table); when(databaseService.find(databaseId)) .thenReturn(database); } else { doThrow(TableNotFoundException.class) .when(tableService) - .findById(databaseId, tableId); + .find(databaseId, tableId); when(tableService.findAll(databaseId)) .thenReturn(List.of()); } @@ -704,26 +565,4 @@ public class TableEndpointUnitTest extends BaseUnitTest { /* test */ return tableEndpoint.findById(databaseId, tableId, principal); } - - protected ResponseEntity<?> generic_delete(Long databaseId, Long tableId, Database database, Table table, Principal principal) throws DatabaseNotFoundException, NotAllowedException, ContainerNotFoundException, TableNotFoundException, TableMalformedException, QueryMalformedException, ImageNotSupportedException, DataProcessingException { - - /* mock */ - if (table != null) { - doNothing() - .when(tableService) - .deleteTable(databaseId, tableId); - } else { - doThrow(TableNotFoundException.class) - .when(tableService) - .deleteTable(databaseId, tableId); - } - if (database == null) { - doThrow(DatabaseNotFoundException.class) - .when(tableService) - .deleteTable(databaseId, tableId); - } - - /* test */ - return tableEndpoint.delete(databaseId, tableId, principal); - } } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableHistoryEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableHistoryEndpointUnitTest.java index edec0b481d3e23959992ceac4dbad64ab740437c..70350969a2c900bba03c6c0e705a979a1719aa55 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableHistoryEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableHistoryEndpointUnitTest.java @@ -8,7 +8,6 @@ import at.tuwien.entities.database.Database; import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.entities.database.table.Table; import at.tuwien.exception.*; -import at.tuwien.repository.mdb.DatabaseAccessRepository; import at.tuwien.service.DatabaseService; import at.tuwien.service.TableService; import lombok.extern.log4j.Log4j2; @@ -25,7 +24,6 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import java.security.Principal; import java.util.List; -import java.util.Optional; import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -42,9 +40,6 @@ public class TableHistoryEndpointUnitTest extends BaseUnitTest { @MockBean private DatabaseService databaseService; - @MockBean - private DatabaseAccessRepository databaseAccessRepository; - @MockBean private TableService tableService; @@ -83,7 +78,7 @@ public class TableHistoryEndpointUnitTest extends BaseUnitTest { QueryStoreException, DatabaseConnectionException, QueryMalformedException, DatabaseNotFoundException { /* test */ - data_generic(DATABASE_2_ID, DATABASE_2, TABLE_4_ID, TABLE_4, USER_1_ID, USER_1_PRINCIPAL, null); + data_generic(DATABASE_2_ID, DATABASE_2, TABLE_5_ID, TABLE_5, USER_1_ID, USER_1_PRINCIPAL, null); } /* ################################################################################################### */ @@ -100,13 +95,6 @@ public class TableHistoryEndpointUnitTest extends BaseUnitTest { .thenReturn(database); when(tableService.find(databaseId, tableId)) .thenReturn(table); - if (access != null) { - when(databaseAccessRepository.findByDatabaseIdAndUserId(databaseId, userId)) - .thenReturn(Optional.of(access)); - } else { - when(databaseAccessRepository.findByDatabaseIdAndUserId(databaseId, userId)) - .thenReturn(Optional.empty()); - } /* test */ final ResponseEntity<List<TableHistoryDto>> response = tableHistoryEndpoint.getAll(databaseId, tableId, principal); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ViewEndpointIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ViewEndpointIntegrationTest.java index 3d3d25dd3c877c1c9457fda9ed642974cc253a05..2b4ae7503f06db8ce63c67bf9f7e9258c4c50053 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ViewEndpointIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ViewEndpointIntegrationTest.java @@ -4,43 +4,28 @@ import at.tuwien.BaseUnitTest; import at.tuwien.annotations.MockAmqp; import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.ViewBriefDto; -import at.tuwien.api.database.ViewCreateDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.database.View; import at.tuwien.exception.*; import at.tuwien.repository.mdb.*; -import at.tuwien.service.AccessService; -import at.tuwien.service.DatabaseService; -import at.tuwien.service.QueryService; -import at.tuwien.service.ViewService; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.security.test.context.support.WithAnonymousUser; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.testcontainers.containers.MariaDBContainer; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; -import java.security.Principal; import java.sql.SQLException; import java.util.List; -import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @@ -53,6 +38,9 @@ public class ViewEndpointIntegrationTest extends BaseUnitTest { @Autowired private ImageRepository imageRepository; + @Autowired + private LicenseRepository licenseRepository; + @Autowired private UserRepository userRepository; @@ -62,15 +50,6 @@ public class ViewEndpointIntegrationTest extends BaseUnitTest { @Autowired private DatabaseRepository databaseRepository; - @Autowired - private TableRepository tableRepository; - - @Autowired - private TableColumnRepository tableColumnRepository; - - @Autowired - private ViewRepository viewRepository; - @Autowired private ViewEndpoint viewEndpoint; @@ -79,15 +58,16 @@ public class ViewEndpointIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() throws SQLException { + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); /* metadata database */ imageRepository.save(IMAGE_1); + licenseRepository.save(LICENSE_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); - tableRepository.saveAll(List.of(TABLE_1_SIMPLE, TABLE_2_SIMPLE, TABLE_3_SIMPLE)); - tableColumnRepository.saveAll(TABLE_1_COLUMNS); - tableColumnRepository.saveAll(TABLE_2_COLUMNS); - tableColumnRepository.saveAll(TABLE_3_COLUMNS); + containerRepository.save(CONTAINER_1); + databaseRepository.save(DATABASE_1); MariaDbConfig.dropAllDatabases(CONTAINER_1); MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); } @@ -102,7 +82,6 @@ public class ViewEndpointIntegrationTest extends BaseUnitTest { assertEquals(HttpStatus.CREATED, response.getStatusCode()); final ViewBriefDto body = response.getBody(); assertNotNull(body); - assertEquals(VIEW_1_ID, body.getId()); assertEquals(VIEW_1_NAME, body.getName()); assertEquals(VIEW_1_INTERNAL_NAME, body.getInternalName()); assertEquals(VIEW_1_QUERY, body.getQuery()); @@ -117,7 +96,6 @@ public class ViewEndpointIntegrationTest extends BaseUnitTest { final String request = "CREATE VIEW `" + VIEW_1_INTERNAL_NAME + "` AS (" + VIEW_1_QUERY + ");"; /* mock */ - viewRepository.save(VIEW_1); MariaDbConfig.execute(DATABASE_1, request); /* test */ diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/ContainerMapperTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/ContainerMapperTest.java index 427d46091de37806f48096f1ce7fb8fde789ffc6..69031d19f9e68f828f825e7d279c9040278a2043 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/ContainerMapperTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/ContainerMapperTest.java @@ -4,15 +4,10 @@ package at.tuwien.mapper; import at.tuwien.BaseUnitTest; import at.tuwien.annotations.MockAmqp; import at.tuwien.annotations.MockOpensearch; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.api.user.UserDto; import at.tuwien.entities.container.Container; -import at.tuwien.exception.QueryMalformedException; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit.jupiter.SpringExtension; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java index d9af373754408138e4ce19ee660c1c7931cd51f2..6bc86970828466f3ded8f0ea37983075333abc7a 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java @@ -4,7 +4,6 @@ import at.tuwien.BaseUnitTest; import at.tuwien.annotations.MockAmqp; import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.user.UserBriefDto; import at.tuwien.api.user.UserDto; import at.tuwien.entities.database.Database; import at.tuwien.entities.user.User; @@ -41,10 +40,10 @@ public class DatabaseMapperTest extends BaseUnitTest { assertEquals(DATABASE_1_DESCRIPTION, response.getDescription()); assertEquals(DATABASE_1_INTERNALNAME, response.getInternalName()); assertEquals(DATABASE_1_CREATED, response.getCreated()); - final UserBriefDto creator = response.getCreator(); + final UserDto creator = response.getCreator(); assertEquals(USER_1_ID, creator.getId()); assertEquals(USER_1_USERNAME, creator.getUsername()); - final UserBriefDto owner = response.getOwner(); + final UserDto owner = response.getOwner(); assertEquals(USER_1_ID, owner.getId()); assertEquals(USER_1_USERNAME, owner.getUsername()); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/PrometheusEndpointMvcTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/PrometheusEndpointMvcTest.java index 95043859e12ab016b3a23f537c909a673f126a3b..680754fd3fd5ef98dda489dbd407a324960c9484 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/PrometheusEndpointMvcTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/PrometheusEndpointMvcTest.java @@ -10,7 +10,7 @@ import at.tuwien.api.database.query.ImportDto; import at.tuwien.api.database.query.QueryPersistDto; import at.tuwien.api.database.table.TableCsvDeleteDto; import at.tuwien.api.database.table.TableCsvDto; -import at.tuwien.api.database.table.TableCsvUpdateDto; +import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; import at.tuwien.config.MetricsConfig; import at.tuwien.endpoints.*; import io.micrometer.observation.tck.TestObservationRegistry; @@ -231,14 +231,9 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest { } catch (Exception e) { /* ignore */ } - try { - databaseEndpoint.delete(DATABASE_1_ID, USER_1_PRINCIPAL); - } catch (Exception e) { - /* ignore */ - } /* test */ - for (String metric : List.of("dbr_database_findall", "dbr_database_count", "dbr_database_create", "dbr_database_visibility", "dbr_database_transfer", "dbr_database_find", "dbr_database_delete")) { + for (String metric : List.of("dbr_database_findall", "dbr_database_count", "dbr_database_create", "dbr_database_visibility", "dbr_database_transfer", "dbr_database_find")) { assertThat(registry) .hasObservationWithNameEqualTo(metric); } @@ -268,7 +263,7 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest { /* mock */ try { - identifierEndpoint.list(DATABASE_1_ID, null, null, IDENTIFIER_1_TYPE_DTO); + identifierEndpoint.list(DATABASE_1_ID, null, null, null, IDENTIFIER_1_TYPE_DTO); } catch (Exception e) { /* ignore */ } @@ -473,11 +468,6 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest { } catch (Exception e) { /* ignore */ } - try { - persistenceEndpoint.update(IDENTIFIER_1_ID, IDENTIFIER_1_DTO_REQUEST, USER_1_PRINCIPAL); - } catch (Exception e) { - /* ignore */ - } try { persistenceEndpoint.delete(IDENTIFIER_1_ID); } catch (Exception e) { @@ -485,7 +475,7 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest { } /* test */ - for (String metric : List.of("dbr_pid_find", "dbr_pid_update", "dbr_pid_delete")) { + for (String metric : List.of("dbr_pid_find", "dbr_pid_delete")) { assertThat(registry) .hasObservationWithNameEqualTo(metric); } @@ -534,34 +524,24 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest { } catch (Exception e) { /* ignore */ } - try { - semanticsEndpoint.saveConcept(COLUMN_CONCEPT_FAIR_DATA_SAVE_DTO); - } catch (Exception e) { - /* ignore */ - } try { semanticsEndpoint.findAllUnits(); } catch (Exception e) { /* ignore */ } - try { - semanticsEndpoint.saveUnit(UNIT_1_SAVE_DTO); - } catch (Exception e) { - /* ignore */ - } try { semanticsEndpoint.analyseTable(DATABASE_1_ID, TABLE_1_ID); } catch (Exception e) { /* ignore */ } try { - semanticsEndpoint.analyseTableColumn(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID); + semanticsEndpoint.analyseTableColumn(DATABASE_1_ID, TABLE_1_ID, TABLE_1_COLUMNS.get(0).getId()); } catch (Exception e) { /* ignore */ } /* test */ - for (String metric : List.of("dbr_semantic_concepts_findall", "dbr_semantic_concepts_save", "dbr_semantic_units_findall", "dbr_semantic_units_save", "dbr_semantic_table_analyse", "dbr_semantic_column_analyse")) { + for (String metric : List.of("dbr_semantic_concepts_findall", "dbr_semantic_units_findall", "dbr_semantic_table_analyse", "dbr_semantic_column_analyse")) { assertThat(registry) .hasObservationWithNameEqualTo(metric); } @@ -598,10 +578,14 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"modify-table-column-semantics", "modify-foreign-table-column-semantics"}) public void prometheusTableColumnEndpoint_succeeds() { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .unitUri(UNIT_MILLIMETRE_URI) + .conceptUri(COLUMN_CONCEPT_PRECIPITATION_URI) + .build(); /* mock */ try { - tableColumnEndpoint.update(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_4_ID, COLUMN_1_4_SEMANTICS_UPDATE_DTO, USER_1_PRINCIPAL, "s3cr3t"); + tableColumnEndpoint.update(DATABASE_1_ID, TABLE_1_ID, TABLE_1_COLUMNS.get(3).getId(), request, USER_1_PRINCIPAL, "s3cr3t"); } catch (Exception e) { /* ignore */ } @@ -621,11 +605,6 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest { } catch (Exception e) { /* ignore */ } - try { - tableDataEndpoint.update(DATABASE_1_ID, TABLE_1_ID, TableCsvUpdateDto.builder().build(), USER_1_PRINCIPAL); - } catch (Exception e) { - /* ignore */ - } try { tableDataEndpoint.delete(DATABASE_1_ID, TABLE_1_ID, TableCsvDeleteDto.builder().build(), USER_1_PRINCIPAL); } catch (Exception e) { @@ -648,7 +627,7 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest { } /* test */ - for (String metric : List.of("dbr_table_data_insert", "dbr_table_data_update", "dbr_table_data_delete", "dbr_table_data_import", "dbr_table_data_findall", "dbr_table_data_countall")) { + for (String metric : List.of("dbr_table_data_insert", "dbr_table_data_delete", "dbr_table_data_import", "dbr_table_data_findall", "dbr_table_data_countall")) { assertThat(registry) .hasObservationWithNameEqualTo(metric); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/DatabaseIdxRepositoryIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/DatabaseIdxRepositoryIntegrationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..71833ece7260d8ad6ae12b91af847c3dbb5a44b5 --- /dev/null +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/DatabaseIdxRepositoryIntegrationTest.java @@ -0,0 +1,429 @@ +package at.tuwien.repository; + +import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.api.database.DatabaseDto; +import at.tuwien.config.MariaDbConfig; +import at.tuwien.config.MariaDbContainerConfig; +import at.tuwien.entities.database.Database; +import at.tuwien.entities.database.View; +import at.tuwien.entities.database.table.Table; +import at.tuwien.entities.user.User; +import at.tuwien.mapper.DatabaseMapper; +import at.tuwien.repository.mdb.*; +import at.tuwien.repository.sdb.DatabaseIdxRepository; +import lombok.extern.log4j.Log4j2; +import org.junit.Rule; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.rules.Timeout; +import org.opensearch.testcontainers.OpensearchContainer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.transaction.annotation.Transactional; +import org.testcontainers.containers.MariaDBContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.utility.DockerImageName; + +import java.sql.SQLException; +import java.time.Instant; +import java.util.List; +import java.util.Optional; + +import static java.time.temporal.ChronoUnit.HOURS; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@Log4j2 +@Testcontainers +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) +@SpringBootTest +@ExtendWith(SpringExtension.class) +@MockAmqp +public class DatabaseIdxRepositoryIntegrationTest extends BaseUnitTest { + + @Autowired + private DatabaseRepository databaseRepository; + + @Autowired + private ImageRepository imageRepository; + + @Autowired + private DatabaseMapper databaseMapper; + + @Autowired + private ContainerRepository containerRepository; + + @Autowired + private DatabaseIdxRepository databaseIdxRepository; + + @Autowired + private UserRepository userRepository; + + @Autowired + private LicenseRepository licenseRepository; + + @Rule + public Timeout globalTimeout = Timeout.seconds(60); + + @Container + private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer(); + + @Container + private static final OpensearchContainer opensearchContainer = new OpensearchContainer(DockerImageName.parse("opensearchproject/opensearch:2.10.0")); + + @DynamicPropertySource + static void openSearchProperties(DynamicPropertyRegistry registry) { + final int idx = opensearchContainer.getHttpHostAddress().lastIndexOf(':'); + registry.add("spring.opensearch.host", () -> "127.0.0.1"); + registry.add("spring.opensearch.port", () -> opensearchContainer.getHttpHostAddress().substring(idx + 1)); + registry.add("spring.opensearch.username", opensearchContainer::getUsername); + registry.add("spring.opensearch.password", opensearchContainer::getPassword); + } + + @BeforeEach + public void beforeEach() throws SQLException { + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + DATABASE_1.setAccesses(List.of(DATABASE_1_USER_1_READ_ACCESS)); + /* prevent multiple representations of the same entity */ + TABLE_1.setDatabase(null); + TABLE_2.setDatabase(null); + TABLE_3.setDatabase(null); + TABLE_4.setDatabase(null); + IDENTIFIER_1.setDatabase(null); + IDENTIFIER_2.setDatabase(null); + IDENTIFIER_3.setDatabase(null); + IDENTIFIER_4.setDatabase(null); + /* metadata database */ + imageRepository.save(IMAGE_1); + licenseRepository.save(LICENSE_1); + userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); + containerRepository.save(CONTAINER_1); + databaseRepository.save(DATABASE_1); + /* data database */ + MariaDbConfig.dropAllDatabases(CONTAINER_1); + MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); + } + + @Test + @Transactional + public void save_succeeds() { + + /* test */ + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(DATABASE_1)); + } + + @Test + @Transactional + public void save_simpleDatabase_succeeds() { + final Database request = Database.builder() + .id(DATABASE_1_ID) + .created(Instant.now().minus(1, HOURS)) + .lastModified(Instant.now()) + .isPublic(DATABASE_1_PUBLIC) + .name(DATABASE_1_NAME) + .description(DATABASE_1_DESCRIPTION) + .cid(CONTAINER_1_ID) + .container(null) + .internalName(DATABASE_1_INTERNALNAME) + .exchangeName(DATABASE_1_EXCHANGE) + .created(DATABASE_1_CREATED) + .lastModified(DATABASE_1_LAST_MODIFIED) + .createdBy(DATABASE_1_CREATOR) + .creator(null) + .ownedBy(DATABASE_1_OWNER) + .owner(null) + .contactPerson(USER_1_ID) + .contact(null) + .tables(List.of()) + .views(List.of()) + .accesses(List.of()) + .build(); + + /* test */ + final Database response = databaseRepository.save(request); + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(response)); + } + + @Test + @Transactional + public void save_databaseWithUsers_succeeds() { + final Database request = Database.builder() + .id(DATABASE_1_ID) + .created(Instant.now().minus(1, HOURS)) + .lastModified(Instant.now()) + .isPublic(DATABASE_1_PUBLIC) + .name(DATABASE_1_NAME) + .description(DATABASE_1_DESCRIPTION) + .cid(CONTAINER_1_ID) + .container(null) + .internalName(DATABASE_1_INTERNALNAME) + .exchangeName(DATABASE_1_EXCHANGE) + .created(DATABASE_1_CREATED) + .lastModified(DATABASE_1_LAST_MODIFIED) + .createdBy(DATABASE_1_CREATOR) + .creator(USER_1) + .ownedBy(DATABASE_1_OWNER) + .owner(USER_1) + .contactPerson(USER_1_ID) + .contact(USER_1) + .tables(List.of()) + .views(List.of()) + .accesses(List.of()) + .build(); + + /* test */ + final Database response = databaseRepository.save(request); + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(response)); + } + + @Test + @Transactional + public void save_databaseWithIdentifier_succeeds() { + final Database request = Database.builder() + .id(DATABASE_1_ID) + .created(Instant.now().minus(1, HOURS)) + .lastModified(Instant.now()) + .isPublic(DATABASE_1_PUBLIC) + .name(DATABASE_1_NAME) + .description(DATABASE_1_DESCRIPTION) + .cid(CONTAINER_1_ID) + .container(null) + .internalName(DATABASE_1_INTERNALNAME) + .exchangeName(DATABASE_1_EXCHANGE) + .created(DATABASE_1_CREATED) + .lastModified(DATABASE_1_LAST_MODIFIED) + .createdBy(DATABASE_1_CREATOR) + .identifiers(List.of(IDENTIFIER_1)) + .creator(USER_1) + .ownedBy(DATABASE_1_OWNER) + .owner(USER_1) + .contactPerson(USER_1_ID) + .contact(USER_1) + .tables(List.of()) + .views(List.of()) + .accesses(List.of()) + .build(); + + /* test */ + final Database response = databaseRepository.save(request); + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(response)); + } + + @Test + @Transactional + public void save_databaseWithContainerAndUsers_succeeds() { + final Database request = Database.builder() + .id(DATABASE_1_ID) + .created(Instant.now().minus(1, HOURS)) + .lastModified(Instant.now()) + .isPublic(DATABASE_1_PUBLIC) + .name(DATABASE_1_NAME) + .description(DATABASE_1_DESCRIPTION) + .cid(CONTAINER_1_ID) + .container(CONTAINER_1) + .internalName(DATABASE_1_INTERNALNAME) + .exchangeName(DATABASE_1_EXCHANGE) + .created(DATABASE_1_CREATED) + .lastModified(DATABASE_1_LAST_MODIFIED) + .createdBy(DATABASE_1_CREATOR) + .creator(USER_1) + .ownedBy(DATABASE_1_OWNER) + .owner(USER_1) + .contactPerson(USER_1_ID) + .contact(USER_1) + .tables(List.of()) + .views(List.of()) + .accesses(List.of()) + .build(); + + /* test */ + final Database response = databaseRepository.save(request); + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(response)); + } + + @Test + @Transactional + public void save_databaseWithSimpleTable_succeeds() { + final Database request = Database.builder() + .id(DATABASE_1_ID) + .created(Instant.now().minus(1, HOURS)) + .lastModified(Instant.now()) + .isPublic(DATABASE_1_PUBLIC) + .name(DATABASE_1_NAME) + .description(DATABASE_1_DESCRIPTION) + .cid(CONTAINER_1_ID) + .container(null) + .internalName(DATABASE_1_INTERNALNAME) + .exchangeName(DATABASE_1_EXCHANGE) + .created(DATABASE_1_CREATED) + .lastModified(DATABASE_1_LAST_MODIFIED) + .createdBy(DATABASE_1_CREATOR) + .creator(null) + .ownedBy(DATABASE_1_OWNER) + .owner(null) + .contactPerson(USER_1_ID) + .contact(null) + .tables(List.of(Table.builder() + .id(TABLE_1_ID) + .tdbid(DATABASE_1_ID) + .database(null) + .created(TABLE_1_CREATED) + .internalName(TABLE_1_INTERNALNAME) + .isVersioned(TABLE_1_VERSIONED) + .description(TABLE_1_DESCRIPTION) + .name(TABLE_1_NAME) + .queueName(TABLE_1_QUEUE_NAME) + .routingKey(TABLE_1_ROUTING_KEY) + .columns(List.of()) + .constraints(null) + .createdBy(USER_1_ID) + .creator(null) + .ownedBy(USER_1_ID) + .owner(null) + .lastModified(TABLE_1_LAST_MODIFIED) + .build())) + .views(List.of()) + .accesses(List.of()) + .build(); + + /* test */ + final Database response = databaseRepository.save(request); + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(response)); + } + + @Test + @Transactional + public void save_databaseWithSimpleTableWithUser_succeeds() { + final Database request = Database.builder() + .id(DATABASE_1_ID) + .created(Instant.now().minus(1, HOURS)) + .lastModified(Instant.now()) + .isPublic(DATABASE_1_PUBLIC) + .name(DATABASE_1_NAME) + .description(DATABASE_1_DESCRIPTION) + .cid(CONTAINER_1_ID) + .container(null) + .internalName(DATABASE_1_INTERNALNAME) + .exchangeName(DATABASE_1_EXCHANGE) + .created(DATABASE_1_CREATED) + .lastModified(DATABASE_1_LAST_MODIFIED) + .createdBy(DATABASE_1_CREATOR) + .creator(USER_1) + .ownedBy(USER_2_ID) + .owner(USER_2) + .contactPerson(USER_2_ID) + .contact(USER_2) + .tables(List.of(Table.builder() + .id(TABLE_1_ID) + .tdbid(DATABASE_1_ID) + .database(null) + .created(TABLE_1_CREATED) + .internalName(TABLE_1_INTERNALNAME) + .isVersioned(TABLE_1_VERSIONED) + .description(TABLE_1_DESCRIPTION) + .name(TABLE_1_NAME) + .queueName(TABLE_1_QUEUE_NAME) + .routingKey(TABLE_1_ROUTING_KEY) + .columns(List.of()) + .constraints(null) + .createdBy(USER_1_ID) + .creator(USER_1) + .ownedBy(USER_2_ID) + .owner(USER_2) + .lastModified(TABLE_1_LAST_MODIFIED) + .build())) + .views(List.of()) + .accesses(List.of()) + .build(); + + /* test */ + final Database response = databaseRepository.save(request); + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(response)); + } + + @Test + @Transactional + public void save_databaseWithContainerAndUsersAndTable_succeeds() { + final Database request = Database.builder() + .id(DATABASE_1_ID) + .created(Instant.now().minus(1, HOURS)) + .lastModified(Instant.now()) + .isPublic(DATABASE_1_PUBLIC) + .name(DATABASE_1_NAME) + .description(DATABASE_1_DESCRIPTION) + .cid(CONTAINER_1_ID) + .container(CONTAINER_1) + .internalName(DATABASE_1_INTERNALNAME) + .exchangeName(DATABASE_1_EXCHANGE) + .created(DATABASE_1_CREATED) + .lastModified(DATABASE_1_LAST_MODIFIED) + .createdBy(DATABASE_1_CREATOR) + .creator(USER_1) + .ownedBy(DATABASE_1_OWNER) + .owner(USER_1) + .contactPerson(USER_1_ID) + .contact(USER_1) + .tables(List.of(_mapTable(TABLE_1_ID))) + .views(List.of()) + .accesses(List.of()) + .build(); + + /* test */ + final Database response = databaseRepository.save(request); + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(response)); + } + + @Test + @Transactional + public void save_databaseWithContainerAndUsersAndView_succeeds() { + final Database request = Database.builder() + .id(DATABASE_1_ID) + .created(Instant.now().minus(1, HOURS)) + .lastModified(Instant.now()) + .isPublic(DATABASE_1_PUBLIC) + .name(DATABASE_1_NAME) + .description(DATABASE_1_DESCRIPTION) + .cid(CONTAINER_1_ID) + .container(CONTAINER_1) + .internalName(DATABASE_1_INTERNALNAME) + .exchangeName(DATABASE_1_EXCHANGE) + .created(DATABASE_1_CREATED) + .lastModified(DATABASE_1_LAST_MODIFIED) + .createdBy(DATABASE_1_CREATOR) + .creator(USER_1) + .ownedBy(DATABASE_1_OWNER) + .owner(USER_1) + .contactPerson(USER_1_ID) + .contact(USER_1) + .tables(List.of()) + .views(List.of(_mapView(VIEW_1_ID))) + .accesses(List.of()) + .build(); + + /* test */ + final Database response = databaseRepository.save(request); + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(response)); + } + + public Table _mapTable(Long id) { + final Optional<Table> optional = DATABASE_1.getTables().stream().filter(t -> t.getId().equals(id)).findFirst(); + assertTrue(optional.isPresent()); + return optional.get(); + } + + public View _mapView(Long id) { + final Optional<View> optional = DATABASE_1.getViews().stream().filter(t -> t.getId().equals(id)).findFirst(); + assertTrue(optional.isPresent()); + return optional.get(); + } + +} diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/DatabaseRepositoryUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/DatabaseRepositoryIntegrationTest.java similarity index 60% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/DatabaseRepositoryUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/DatabaseRepositoryIntegrationTest.java index 0aa05db2101863570e1af102767129ad1b595c9e..0e7473b849b560f28d93feb6705d26c366ab0125 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/DatabaseRepositoryUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/DatabaseRepositoryIntegrationTest.java @@ -24,7 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; @ExtendWith(SpringExtension.class) @MockAmqp @MockOpensearch -public class DatabaseRepositoryUnitTest extends BaseUnitTest { +public class DatabaseRepositoryIntegrationTest extends BaseUnitTest { @Autowired private ImageRepository imageRepository; @@ -39,76 +39,62 @@ public class DatabaseRepositoryUnitTest extends BaseUnitTest { private DatabaseRepository databaseRepository; @Autowired - private DatabaseAccessRepository databaseAccessRepository; + private LicenseRepository licenseRepository; @BeforeEach public void beforeEach() { - imageRepository.save(IMAGE_1_SIMPLE); - userRepository.save(USER_1); - userRepository.save(USER_2); - containerRepository.save(CONTAINER_1_SIMPLE); - containerRepository.save(CONTAINER_2_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); - databaseRepository.save(DATABASE_2_SIMPLE); + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + TABLE_5.setColumns(TABLE_5_COLUMNS); + TABLE_6.setColumns(TABLE_6_COLUMNS); + TABLE_7.setColumns(TABLE_7_COLUMNS); + /* metadata database */ + imageRepository.save(IMAGE_1); + licenseRepository.save(LICENSE_1); + userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); + containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2)); + DATABASE_1.setAccesses(List.of(DATABASE_1_USER_1_READ_ACCESS, DATABASE_1_USER_2_WRITE_OWN_ACCESS)); + DATABASE_2.setAccesses(List.of(DATABASE_2_USER_2_WRITE_ALL_ACCESS, DATABASE_2_USER_3_READ_ACCESS)); + databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2)); } @Test public void findConfigureAccess_noAccess_succeeds() { - /* mock */ - databaseAccessRepository.deleteAll(); - /* test */ final List<Database> response = databaseRepository.findConfigureAccess(USER_1_ID); assertEquals(1, response.size()); - assertEquals(DATABASE_1_ID, response.get(0).getId()); } @Test public void findConfigureAccess_hasReadAccess_succeeds() { - /* mock */ - databaseAccessRepository.deleteAll(); - databaseAccessRepository.save(DATABASE_1_USER_1_READ_ACCESS); - /* test */ final List<Database> response = databaseRepository.findConfigureAccess(USER_1_ID); assertEquals(1, response.size()); - assertEquals(DATABASE_1_ID, response.get(0).getId()); } @Test public void findConfigureAccess_hasWriteOwnAccess_succeeds() { - /* mock */ - databaseAccessRepository.deleteAll(); - databaseAccessRepository.save(DATABASE_1_USER_1_WRITE_OWN_ACCESS); - /* test */ final List<Database> response = databaseRepository.findConfigureAccess(USER_1_ID); assertEquals(1, response.size()); - assertEquals(DATABASE_1_ID, response.get(0).getId()); } @Test public void findConfigureAccess_hasWriteAllAccess_succeeds() { - /* mock */ - databaseAccessRepository.deleteAll(); - databaseAccessRepository.save(DATABASE_1_USER_1_WRITE_ALL_ACCESS); - /* test */ final List<Database> response = databaseRepository.findConfigureAccess(USER_1_ID); assertEquals(1, response.size()); - assertEquals(DATABASE_1_ID, response.get(0).getId()); } @Test public void findWriteAccess_noAccess_fails() { - /* mock */ - databaseAccessRepository.deleteAll(); - /* test */ final List<Database> response = databaseRepository.findWriteAccess(USER_1_ID); assertEquals(0, response.size()); @@ -117,10 +103,6 @@ public class DatabaseRepositoryUnitTest extends BaseUnitTest { @Test public void findWriteAccess_hasReadAccess_succeeds() { - /* mock */ - databaseAccessRepository.deleteAll(); - databaseAccessRepository.save(DATABASE_2_USER_1_READ_ACCESS); - /* test */ final List<Database> response = databaseRepository.findWriteAccess(USER_1_ID); assertEquals(0, response.size()); @@ -129,77 +111,49 @@ public class DatabaseRepositoryUnitTest extends BaseUnitTest { @Test public void findWriteAccess_hasWriteOwnAccess_succeeds() { - /* mock */ - databaseAccessRepository.deleteAll(); - databaseAccessRepository.save(DATABASE_2_USER_1_WRITE_OWN_ACCESS); - /* test */ final List<Database> response = databaseRepository.findWriteAccess(USER_1_ID); - assertEquals(1, response.size()); - assertEquals(DATABASE_2_ID, response.get(0).getId()); + assertEquals(0, response.size()); } @Test public void findWriteAccess_hasWriteAllAccess_succeeds() { - /* mock */ - databaseAccessRepository.deleteAll(); - databaseAccessRepository.save(DATABASE_2_USER_1_WRITE_ALL_ACCESS); - /* test */ final List<Database> response = databaseRepository.findWriteAccess(USER_1_ID); - assertEquals(1, response.size()); - assertEquals(DATABASE_2_ID, response.get(0).getId()); + assertEquals(0, response.size()); } @Test public void findReadAccess_noAccess_fails() { - /* mock */ - databaseAccessRepository.deleteAll(); - /* test */ final List<Database> response = databaseRepository.findReadAccess(USER_1_ID); - assertEquals(0, response.size()); + assertEquals(1, response.size()); } @Test public void findReadAccess_hasReadAccess_succeeds() { - /* mock */ - databaseAccessRepository.deleteAll(); - databaseAccessRepository.save(DATABASE_2_USER_1_READ_ACCESS); - /* test */ final List<Database> response = databaseRepository.findReadAccess(USER_1_ID); assertEquals(1, response.size()); - assertEquals(DATABASE_2_ID, response.get(0).getId()); } @Test public void findReadAccess_hasWriteOwnAccess_succeeds() { - /* mock */ - databaseAccessRepository.deleteAll(); - databaseAccessRepository.save(DATABASE_2_USER_1_WRITE_OWN_ACCESS); - /* test */ final List<Database> response = databaseRepository.findReadAccess(USER_1_ID); assertEquals(1, response.size()); - assertEquals(DATABASE_2_ID, response.get(0).getId()); } @Test public void findReadAccess_hasWriteAllAccess_succeeds() { - /* mock */ - databaseAccessRepository.deleteAll(); - databaseAccessRepository.save(DATABASE_2_USER_1_WRITE_ALL_ACCESS); - /* test */ final List<Database> response = databaseRepository.findReadAccess(USER_1_ID); assertEquals(1, response.size()); - assertEquals(DATABASE_2_ID, response.get(0).getId()); } } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewIdxRepositoryIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewIdxRepositoryIntegrationTest.java deleted file mode 100644 index b4fe5c6970c9c120119bbdd23c7480d487772318..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewIdxRepositoryIntegrationTest.java +++ /dev/null @@ -1,126 +0,0 @@ -package at.tuwien.repository; - -import at.tuwien.BaseUnitTest; -import at.tuwien.annotations.MockAmqp; -import at.tuwien.api.database.ViewCreateDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.config.MariaDbConfig; -import at.tuwien.config.MariaDbContainerConfig; -import at.tuwien.exception.*; -import at.tuwien.repository.mdb.*; -import at.tuwien.repository.sdb.ViewIdxRepository; -import at.tuwien.service.ViewService; -import lombok.extern.log4j.Log4j2; -import org.junit.Rule; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.rules.Timeout; -import org.opensearch.testcontainers.OpensearchContainer; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.DynamicPropertyRegistry; -import org.springframework.test.context.DynamicPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.testcontainers.containers.MariaDBContainer; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; -import org.testcontainers.utility.DockerImageName; - -import java.sql.SQLException; -import java.util.List; -import java.util.Optional; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -@Log4j2 -@Testcontainers -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@SpringBootTest -@ExtendWith(SpringExtension.class) -@MockAmqp -public class ViewIdxRepositoryIntegrationTest extends BaseUnitTest { - - @Autowired - private DatabaseRepository databaseRepository; - - @Autowired - private ImageRepository imageRepository; - - @Autowired - private ContainerRepository containerRepository; - - @Autowired - private TableRepository tableRepository; - - @Autowired - private TableColumnRepository tableColumnRepository; - - @Autowired - private ViewIdxRepository viewIdxRepository; - - @Autowired - private ViewService viewService; - - @Autowired - private UserRepository userRepository; - - @Rule - public Timeout globalTimeout = Timeout.seconds(60); - - @Container - private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer(); - - @Container - private static final OpensearchContainer opensearchContainer = new OpensearchContainer(DockerImageName.parse("opensearchproject/opensearch:2.10.0")); - - @DynamicPropertySource - static void openSearchProperties(DynamicPropertyRegistry registry) { - final int idx = opensearchContainer.getHttpHostAddress().lastIndexOf(':'); - registry.add("spring.opensearch.host", () -> "127.0.0.1"); - registry.add("spring.opensearch.port", () -> opensearchContainer.getHttpHostAddress().substring(idx + 1)); - registry.add("spring.opensearch.username", opensearchContainer::getUsername); - registry.add("spring.opensearch.password", opensearchContainer::getPassword); - } - - @BeforeEach - public void beforeEach() throws SQLException { - MariaDbConfig.dropAllDatabases(CONTAINER_1); - MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); - TABLE_1.setColumns(TABLE_1_COLUMNS); - TABLE_2.setColumns(TABLE_2_COLUMNS); - /* metadata database */ - imageRepository.save(IMAGE_1); - userRepository.saveAll(List.of(USER_1, USER_2)); - containerRepository.save(CONTAINER_1); - databaseRepository.save(DATABASE_1_SIMPLE); - tableRepository.saveAll(List.of(TABLE_1_SIMPLE, TABLE_2_SIMPLE)); - tableColumnRepository.saveAll(TABLE_1_COLUMNS); - tableColumnRepository.saveAll(TABLE_2_COLUMNS); - } - - @Test - public void save_succeeds() throws UserNotFoundException, DatabaseConnectionException, ViewMalformedException, - QueryMalformedException, DatabaseNotFoundException { - final ViewCreateDto request = ViewCreateDto.builder() - .name(VIEW_1_NAME) - .query(VIEW_1_QUERY) - .isPublic(VIEW_1_PUBLIC) - .build(); - - /* test */ - viewService.create(DATABASE_1_ID, request, USER_1_PRINCIPAL); - final Optional<ViewDto> response = viewIdxRepository.findById(VIEW_1_ID); - assertTrue(response.isPresent()); - final ViewDto view = response.get(); - assertEquals(VIEW_1_ID, view.getId()); - assertEquals(VIEW_1_NAME, view.getName()); - assertEquals(VIEW_1_INTERNAL_NAME, view.getInternalName()); - assertEquals(VIEW_1_QUERY, view.getQuery()); - assertEquals(VIEW_1_DATABASE_ID, view.getVdbid()); - assertEquals(VIEW_1_PUBLIC, view.getIsPublic()); - } - -} diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java deleted file mode 100644 index bcb12ab0b35c9508881190004f501ddc84ff5138..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java +++ /dev/null @@ -1,88 +0,0 @@ -package at.tuwien.repository; - -import at.tuwien.BaseUnitTest; -import at.tuwien.annotations.MockAmqp; -import at.tuwien.annotations.MockOpensearch; -import at.tuwien.entities.database.View; -import at.tuwien.repository.mdb.*; -import lombok.extern.log4j.Log4j2; -import org.junit.Rule; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.rules.Timeout; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -@Log4j2 -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@SpringBootTest -@ExtendWith(SpringExtension.class) -@MockAmqp -@MockOpensearch -public class ViewRepositoryIntegrationTest extends BaseUnitTest { - - @Autowired - private ImageRepository imageRepository; - - @Autowired - private ContainerRepository containerRepository; - - @Autowired - private TableRepository tableRepository; - - @Autowired - private TableColumnRepository tableColumnRepository; - - @Autowired - private DatabaseRepository databaseRepository; - - @Autowired - private ViewRepository viewRepository; - - @Autowired - private UserRepository userRepository; - - @Rule - public Timeout globalTimeout = Timeout.seconds(60); - - @BeforeEach - public void beforeEach() { - imageRepository.save(IMAGE_1); - userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); - containerRepository.saveAll(List.of(CONTAINER_1_SIMPLE, CONTAINER_2_SIMPLE)); - databaseRepository.saveAll(List.of(DATABASE_1_SIMPLE, DATABASE_2_SIMPLE)); - tableRepository.saveAll(List.of(TABLE_1_SIMPLE, TABLE_2_SIMPLE, TABLE_3_SIMPLE, TABLE_4_SIMPLE, TABLE_5_SIMPLE, TABLE_6_SIMPLE, TABLE_7_SIMPLE)); - tableColumnRepository.saveAll(TABLE_1_COLUMNS); - tableColumnRepository.saveAll(TABLE_2_COLUMNS); - tableColumnRepository.saveAll(TABLE_3_COLUMNS); - tableColumnRepository.saveAll(TABLE_4_COLUMNS); - tableColumnRepository.saveAll(TABLE_5_COLUMNS); - tableColumnRepository.saveAll(TABLE_6_COLUMNS); - tableColumnRepository.saveAll(TABLE_7_COLUMNS); - viewRepository.saveAll(List.of(VIEW_1, VIEW_2, VIEW_3, VIEW_4)); - } - - @Test - public void findAllPublicByDatabaseId_succeeds() { - - /* test */ - final List<View> response = viewRepository.findAllPublicByDatabaseId(DATABASE_1_ID); - assertEquals(2, response.size()); - } - - @Test - public void findAllPublicOrMineByDatabaseId_succeeds() { - - /* test */ - final List<View> response = viewRepository.findAllPublicOrMineByDatabaseId(DATABASE_1_ID, USER_1_ID); - assertEquals(3, response.size()); - } - -} diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java index dfac351d9518fa7e75c6c1538149272c9bdee9c2..bd8ce85f76c012828dd350d74927fc30b2fc8830 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java @@ -9,9 +9,10 @@ import at.tuwien.api.database.DatabaseModifyAccessDto; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; import at.tuwien.entities.database.AccessType; +import at.tuwien.entities.database.Database; import at.tuwien.entities.database.DatabaseAccess; +import at.tuwien.entities.database.License; import at.tuwien.exception.*; -import at.tuwien.gateway.KeycloakGateway; import at.tuwien.repository.mdb.*; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; @@ -21,9 +22,9 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.transaction.annotation.Transactional; import org.testcontainers.containers.MariaDBContainer; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; @@ -45,9 +46,6 @@ import static org.junit.jupiter.api.Assertions.assertThrows; @MockOpensearch public class AccessServiceIntegrationTest extends BaseUnitTest { - @MockBean - private KeycloakGateway keycloakGateway; - @Autowired private ImageRepository imageRepository; @@ -57,25 +55,34 @@ public class AccessServiceIntegrationTest extends BaseUnitTest { @Autowired private DatabaseRepository databaseRepository; - @Autowired - private DatabaseAccessRepository databaseAccessRepository; - @Autowired private AccessService accessService; @Autowired private UserRepository userRepository; + @Autowired + private LicenseRepository licenseRepository; + @Container private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer(); @BeforeEach public void beforeEach() throws SQLException { + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + TABLE_5.setColumns(TABLE_5_COLUMNS); + TABLE_6.setColumns(TABLE_6_COLUMNS); + TABLE_7.setColumns(TABLE_7_COLUMNS); /* metadata database */ imageRepository.save(IMAGE_1); + licenseRepository.save(LICENSE_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); + containerRepository.save(CONTAINER_1); + DATABASE_1.setAccesses(List.of(DATABASE_1_USER_1_WRITE_ALL_ACCESS, DATABASE_1_USER_2_READ_ACCESS)); + databaseRepository.save(DATABASE_1); MariaDbConfig.dropAllDatabases(CONTAINER_1); MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); } @@ -94,10 +101,8 @@ public class AccessServiceIntegrationTest extends BaseUnitTest { public static Stream<Arguments> update_succeeds_parameters() { return Stream.of( - Arguments.arguments("same access", DATABASE_1_ID, AccessTypeDto.READ, AccessType.READ, + Arguments.arguments("same access", DATABASE_1_ID, AccessTypeDto.READ, AccessType.WRITE_ALL, USER_2_ID), - Arguments.arguments("write own access", DATABASE_1_ID, AccessTypeDto.WRITE_OWN, - AccessType.WRITE_OWN, USER_2_ID), Arguments.arguments("write all access", DATABASE_1_ID, AccessTypeDto.WRITE_ALL, AccessType.WRITE_ALL, USER_2_ID) ); @@ -114,7 +119,7 @@ public class AccessServiceIntegrationTest extends BaseUnitTest { public static Stream<Arguments> delete_fails_parameters() { return Stream.of( - Arguments.arguments("user not found", UserNotFoundException.class, + Arguments.arguments("user not found", AccessDeniedException.class, UUID.fromString("deadbeef-fc88-4abd-a289-455e34b0e80d"), null), Arguments.arguments("is owner", NotAllowedException.class, USER_1_ID) ); @@ -130,6 +135,7 @@ public class AccessServiceIntegrationTest extends BaseUnitTest { /* ## GENERIC TEST CASES ## */ /* ################################################################################################### */ + @Transactional @ParameterizedTest @MethodSource("create_fails_parameters") protected <T extends Throwable> void create_fails(String test, Class<T> expectedException, @@ -138,15 +144,13 @@ public class AccessServiceIntegrationTest extends BaseUnitTest { .type(accessTypeDto) .build(); - /* mock */ - databaseAccessRepository.save(DATABASE_1_USER_2_READ_ACCESS); - /* test */ assertThrows(expectedException, () -> { accessService.create(DATABASE_1_ID, userId, request); }); } + @Transactional @ParameterizedTest @MethodSource("create_succeeds_parameters") protected <T extends Throwable> void create_succeeds(String test, AccessTypeDto accessTypeDto, AccessType access, @@ -159,13 +163,16 @@ public class AccessServiceIntegrationTest extends BaseUnitTest { /* test */ accessService.create(DATABASE_1_ID, userId, request); - final List<DatabaseAccess> response = databaseAccessRepository.findAll(); - assertEquals(1, response.size()); - assertEquals(access, response.get(0).getType()); - assertEquals(DATABASE_1_ID, response.get(0).getHdbid()); - assertEquals(userId, response.get(0).getHuserid()); + final List<DatabaseAccess> response = databaseRepository.findAll() + .stream() + .map(Database::getAccesses) + .flatMap(List::stream) + .distinct() + .toList(); + assertEquals(3, response.size()); // 2+1 } + @Transactional @ParameterizedTest @MethodSource("update_succeeds_parameters") protected void update_succeeds(String test, Long databaseId, AccessTypeDto accessTypeDto, AccessType access, @@ -175,17 +182,20 @@ public class AccessServiceIntegrationTest extends BaseUnitTest { .type(accessTypeDto) .build(); - /* mock */ - databaseAccessRepository.save(DATABASE_1_USER_2_READ_ACCESS); - /* test */ accessService.update(databaseId, userId, request); - final List<DatabaseAccess> response = databaseAccessRepository.findAll(); - assertEquals(1, response.size()); + final List<DatabaseAccess> response = databaseRepository.findAll() + .stream() + .map(Database::getAccesses) + .flatMap(List::stream) + .distinct() + .toList(); + assertEquals(2, response.size()); assertEquals(access, response.get(0).getType()); - assertEquals(databaseId, response.get(0).getHdbid()); + assertEquals(databaseId, response.get(0).getDatabase().getId()); } + @Transactional @ParameterizedTest @MethodSource("update_fails_parameters") protected <T extends Throwable> void update_fails(String name, Class<T> expectedException, Long databaseId, @@ -200,6 +210,7 @@ public class AccessServiceIntegrationTest extends BaseUnitTest { }); } + @Transactional @ParameterizedTest @MethodSource("delete_fails_parameters") protected <T extends Throwable> void delete_fails(String name, Class<T> expectedException, UUID userId) { @@ -210,11 +221,12 @@ public class AccessServiceIntegrationTest extends BaseUnitTest { }); } + @Transactional @ParameterizedTest @MethodSource("delete_succeeds_parameters") protected <T extends Throwable> void delete_succeeds(String name, UUID userId) throws UserNotFoundException, NotAllowedException, QueryMalformedException, DatabaseNotFoundException, - DatabaseMalformedException { + DatabaseMalformedException, AccessDeniedException { /* test */ accessService.delete(DATABASE_1_ID, userId); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java index 312b1bb3aabe0b36ee8db47234b17b6e69075f49..59f15c219b7da587a55a5095806fdb892b3a3e0b 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java @@ -8,11 +8,12 @@ import at.tuwien.api.database.DatabaseModifyAccessDto; import at.tuwien.entities.database.AccessType; import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.exception.AccessDeniedException; +import at.tuwien.exception.DatabaseNotFoundException; import at.tuwien.exception.NotAllowedException; -import at.tuwien.repository.mdb.DatabaseAccessRepository; import at.tuwien.repository.mdb.DatabaseRepository; import at.tuwien.repository.mdb.UserRepository; import lombok.extern.log4j.Log4j2; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -25,6 +26,7 @@ import java.util.Optional; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.when; @Log4j2 @@ -37,45 +39,48 @@ public class AccessServiceUnitTest extends BaseUnitTest { @MockBean private DatabaseRepository databaseRepository; - @MockBean - private DatabaseAccessRepository databaseAccessRepository; - @MockBean private UserRepository userRepository; @Autowired private AccessService accessService; + @BeforeEach + public void beforeEach() { + DATABASE_1.setAccesses(List.of(DATABASE_1_USER_1_READ_ACCESS, DATABASE_1_USER_2_WRITE_OWN_ACCESS, DATABASE_1_USER_3_WRITE_ALL_ACCESS)); + } + @Test - public void list_succeeds() throws NotAllowedException { + public void list_succeeds() throws DatabaseNotFoundException { /* mock */ - when(databaseAccessRepository.findByDatabaseId(DATABASE_1_ID)) - .thenReturn(List.of(DATABASE_1_USER_1_READ_ACCESS, DATABASE_2_USER_1_READ_ACCESS)); + when(databaseRepository.findById(DATABASE_1_ID)) + .thenReturn(Optional.of(DATABASE_1)); /* test */ final List<DatabaseAccess> response = accessService.list(DATABASE_1_ID); - assertEquals(2, response.size()); + assertEquals(3, response.size()); } @Test - public void list_empty_succeeds() throws NotAllowedException { + public void list_empty_succeeds() throws DatabaseNotFoundException { /* mock */ - when(databaseAccessRepository.findByDatabaseId(DATABASE_1_ID)) - .thenReturn(List.of()); - + DATABASE_1.setAccesses(List.of()); + doReturn(Optional.of(DATABASE_1)) + .when(databaseRepository) + .findById(DATABASE_1_ID); /* test */ final List<DatabaseAccess> response = accessService.list(DATABASE_1_ID); assertEquals(0, response.size()); } @Test - public void find_succeeds() throws AccessDeniedException { + public void find_succeeds() throws AccessDeniedException, DatabaseNotFoundException { /* mock */ - when(databaseAccessRepository.findByDatabaseIdAndUserId(DATABASE_1_ID, USER_1_ID)) - .thenReturn(Optional.of(DATABASE_1_USER_1_READ_ACCESS)); + when(databaseRepository.findById(DATABASE_1_ID)) + .thenReturn(Optional.of(DATABASE_1)); /* test */ final DatabaseAccess response = accessService.find(DATABASE_1_ID, USER_1_ID); @@ -86,8 +91,9 @@ public class AccessServiceUnitTest extends BaseUnitTest { public void find_fails() { /* mock */ - when(databaseAccessRepository.findByDatabaseIdAndUserId(DATABASE_1_ID, USER_1_ID)) - .thenReturn(Optional.empty()); + DATABASE_1.setAccesses(List.of()); + when(databaseRepository.findById(DATABASE_1_ID)) + .thenReturn(Optional.of(DATABASE_1)); /* test */ assertThrows(AccessDeniedException.class, () -> { @@ -95,6 +101,19 @@ public class AccessServiceUnitTest extends BaseUnitTest { }); } + @Test + public void find_databaseNotFound_fails() { + + /* mock */ + when(databaseRepository.findById(DATABASE_1_ID)) + .thenReturn(Optional.empty()); + + /* test */ + assertThrows(DatabaseNotFoundException.class, () -> { + accessService.find(DATABASE_1_ID, USER_1_ID); + }); + } + @Test public void update_isOwner_fails() { final DatabaseModifyAccessDto request = DatabaseModifyAccessDto.builder() diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AuthenticationServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AuthenticationServiceIntegrationTest.java index 1f4240a8647e00668c77220a93b155622e4c6fa8..cfa8f9251d122e30299e6443ef161e4288fd3d71 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AuthenticationServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AuthenticationServiceIntegrationTest.java @@ -3,7 +3,6 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; import at.tuwien.annotations.MockAmqp; import at.tuwien.annotations.MockOpensearch; -import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.gateway.KeycloakGateway; import dasniko.testcontainers.keycloak.KeycloakContainer; @@ -22,8 +21,6 @@ import org.testcontainers.images.PullPolicy; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; -import static org.junit.jupiter.api.Assertions.assertEquals; - @Log4j2 @Testcontainers @EnableAutoConfiguration(exclude = RabbitAutoConfiguration.class) diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/BannerMessageServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/BannerMessageServiceIntegrationTest.java index 58693643cf7532397b2c5012aabbca1451ee5e00..bbf0d7d64d910add854b3c38414fbae8fe9c0e3c 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/BannerMessageServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/BannerMessageServiceIntegrationTest.java @@ -10,7 +10,6 @@ import at.tuwien.entities.maintenance.BannerMessage; import at.tuwien.entities.maintenance.BannerMessageType; import at.tuwien.exception.BannerMessageNotFoundException; import at.tuwien.repository.mdb.BannerMessageRepository; -import at.tuwien.repository.sdb.UserIdxRepository; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -19,7 +18,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java index 9d4e8f39eaa3bb02e22c4fdaf2ae518dad96285f..002ddeb1300802f0a19d385d258a2cc8dc7c48d7 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java @@ -41,8 +41,7 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() { - /* mock data */ - imageRepository.save(IMAGE_1_SIMPLE); + imageRepository.save(IMAGE_1); } @Test @@ -132,7 +131,7 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { /* mock */ containerRepository.save(CONTAINER_1); - containerRepository.save(CONTAINER_2_SIMPLE); + containerRepository.save(CONTAINER_2); /* test */ final List<Container> response = containerService.getAll(null); @@ -144,7 +143,7 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { /* mock */ containerRepository.save(CONTAINER_1); - containerRepository.save(CONTAINER_2_SIMPLE); + containerRepository.save(CONTAINER_2); /* test */ final List<Container> response = containerService.getAll(1); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceIntegrationTest.java index b683689645340d1c80db4a2a5a4c4e7a7901eabf..c548b7b2193379619e9d28f0c51eee873046bf92 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceIntegrationTest.java @@ -29,6 +29,8 @@ import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.web.client.RestTemplate; +import java.util.List; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.*; @@ -77,11 +79,19 @@ public class DataCiteIdentifierServiceIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() { + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + TABLE_5.setColumns(TABLE_5_COLUMNS); + TABLE_6.setColumns(TABLE_6_COLUMNS); + TABLE_7.setColumns(TABLE_7_COLUMNS); + /* metadata database */ licenseRepository.save(LICENSE_1); imageRepository.save(IMAGE_1); - userRepository.save(USER_1); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); + userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); + containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2)); + databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2)); } @Test @@ -89,7 +99,7 @@ public class DataCiteIdentifierServiceIntegrationTest extends BaseUnitTest { throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, - ImageNotSupportedException { + ImageNotSupportedException, IdentifierNotFoundException { final DataCiteBody<DataCiteDoi> response = new DataCiteBody<>(new DataCiteData<>(null, "dois", new DataCiteDoi(IDENTIFIER_1_DOI_NOT_NULL))); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java index 5c827fea63fe36dfe62cfc104f5a9cc6f07b7db1..6bcf84616f83a5501b9dea0d1b72e77fe06cccee 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java @@ -35,6 +35,7 @@ import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; import java.security.Principal; +import java.util.List; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; @@ -86,11 +87,17 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { @BeforeEach public void beforeEach() { + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + /* metadata database */ licenseRepository.save(LICENSE_1); imageRepository.save(IMAGE_1); userRepository.save(USER_1); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); + containerRepository.save(CONTAINER_1); + DATABASE_1.setAccesses(List.of()); + databaseRepository.save(DATABASE_1); } @Test @@ -98,7 +105,7 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, - ImageNotSupportedException { + ImageNotSupportedException, IdentifierNotFoundException { final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); final DataCiteBody<DataCiteDoi> response = new DataCiteBody<>(new DataCiteData<>(null, "dois", new DataCiteDoi(IDENTIFIER_1_DOI_NOT_NULL))); @@ -118,11 +125,10 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { } @Test - public void create_invalidMetadata_fails() - throws IdentifierAlreadyExistsException, UserNotFoundException, QueryNotFoundException, - DatabaseNotFoundException, RemoteUnavailableException, IdentifierPublishingNotAllowedException, - IdentifierRequestException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, - ImageNotSupportedException { + public void create_invalidMetadata_fails() throws IdentifierAlreadyExistsException, UserNotFoundException, + QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, + IdentifierPublishingNotAllowedException, IdentifierRequestException, ViewNotFoundException, + QueryStoreException, DatabaseConnectionException, ImageNotSupportedException, IdentifierNotFoundException { final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); /* mock */ @@ -137,15 +143,14 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { assertThrows(IdentifierRequestException.class, () -> { dataCiteIdentifierService.create(IDENTIFIER_1_DTO_REQUEST, principal); }); - assertEquals(0, identifierRepository.count()); + assertEquals(4, identifierRepository.count()); } @Test - public void create_restClientException_fails() - throws IdentifierAlreadyExistsException, UserNotFoundException, QueryNotFoundException, - DatabaseNotFoundException, RemoteUnavailableException, IdentifierPublishingNotAllowedException, - IdentifierRequestException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, - ImageNotSupportedException { + public void create_restClientException_fails() throws IdentifierAlreadyExistsException, UserNotFoundException, + QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, + IdentifierPublishingNotAllowedException, IdentifierRequestException, ViewNotFoundException, + QueryStoreException, DatabaseConnectionException, ImageNotSupportedException, IdentifierNotFoundException { final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); /* mock */ @@ -160,68 +165,7 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { assertThrows(InternalError.class, () -> { dataCiteIdentifierService.create(IDENTIFIER_1_DTO_REQUEST, principal); }); - assertEquals(0, identifierRepository.count()); - } - - @Test - public void update_existing_succeeds() throws IdentifierRequestException, UserNotFoundException, - QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, IdentifierNotFoundException, - QueryStoreException, DatabaseConnectionException, ImageNotSupportedException { - final DataCiteBody<DataCiteDoi> response = - new DataCiteBody<>(new DataCiteData<>(null, "dois", new DataCiteDoi(IDENTIFIER_1_DOI_NOT_NULL))); - - /* mock */ - when(identifierService.update(eq(IDENTIFIER_1_ID), any(IdentifierSaveDto.class), any(Principal.class))) - .thenAnswer((i) -> identifierRepository.save(IDENTIFIER_1_WITH_DOI)); - when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), - any(ParameterizedTypeReference.class), eq(IDENTIFIER_1_DOI_NOT_NULL))) - .thenReturn(ResponseEntity.ok(response)); - when(restTemplateBuilder.build()).thenReturn(restTemplate); - - /* test */ - Identifier result = dataCiteIdentifierService.update(IDENTIFIER_1_ID, IDENTIFIER_1_DTO_UPDATE_REQUEST, USER_1_PRINCIPAL); - assertTrue(identifierRepository.existsById(IDENTIFIER_1_ID)); - assertEquals(IDENTIFIER_1_DOI_NOT_NULL, result.getDoi()); - } - - @Test - public void update_invalidMetadata_fails() throws UserNotFoundException, QueryNotFoundException, - DatabaseNotFoundException, RemoteUnavailableException, IdentifierNotFoundException, QueryStoreException, - DatabaseConnectionException, ImageNotSupportedException { - - /* mock */ - when(identifierService.update(eq(IDENTIFIER_1_ID), any(IdentifierSaveDto.class), any(Principal.class))) - .thenAnswer((i) -> identifierRepository.save(IDENTIFIER_1_WITH_DOI)); - when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), - any(ParameterizedTypeReference.class), eq(IDENTIFIER_1_DOI_NOT_NULL))) - .thenThrow(HttpClientErrorException.BadRequest.class); - when(restTemplateBuilder.build()).thenReturn(restTemplate); - - /* test */ - assertThrows(IdentifierRequestException.class, () -> { - dataCiteIdentifierService.update(IDENTIFIER_1_ID, IDENTIFIER_1_DTO_UPDATE_REQUEST, USER_1_PRINCIPAL); - }); - assertEquals(0, identifierRepository.count()); - } - - @Test - public void update_restClientException_fails() throws UserNotFoundException, QueryNotFoundException, - DatabaseNotFoundException, RemoteUnavailableException, IdentifierNotFoundException, QueryStoreException, - DatabaseConnectionException, ImageNotSupportedException { - - /* mock */ - when(identifierService.update(eq(IDENTIFIER_1_ID), any(IdentifierSaveDto.class), any(Principal.class))) - .thenAnswer((i) -> identifierRepository.save(IDENTIFIER_1_WITH_DOI)); - when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), - any(ParameterizedTypeReference.class), eq(IDENTIFIER_1_DOI_NOT_NULL))) - .thenThrow(RestClientException.class); - when(restTemplateBuilder.build()).thenReturn(restTemplate); - - /* test */ - assertThrows(InternalError.class, () -> { - dataCiteIdentifierService.update(IDENTIFIER_1_ID, IDENTIFIER_1_DTO_UPDATE_REQUEST, USER_1_PRINCIPAL); - }); - assertEquals(0, identifierRepository.count()); + assertEquals(4, identifierRepository.count()); } } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java index 5fd4fdf02b04b37fe8f913c7e2fa85a7b34fcef2..2a9553b246c09526f2861faca7b58f255f64f371 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java @@ -8,10 +8,12 @@ import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; import at.tuwien.config.QueryConfig; import at.tuwien.entities.database.Database; +import at.tuwien.entities.database.View; +import at.tuwien.entities.database.table.Table; +import at.tuwien.entities.database.table.columns.TableColumn; +import at.tuwien.entities.database.table.columns.TableColumnType; import at.tuwien.entities.user.User; import at.tuwien.exception.*; -import at.tuwien.gateway.KeycloakGateway; -import at.tuwien.mapper.DatabaseMapper; import at.tuwien.repository.mdb.*; import at.tuwien.repository.sdb.DatabaseIdxRepository; import at.tuwien.service.impl.MariaDbServiceImpl; @@ -19,7 +21,6 @@ import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Answers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; @@ -29,10 +30,11 @@ import org.testcontainers.containers.MariaDBContainer; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; -import java.sql.Connection; +import java.io.IOException; import java.sql.SQLException; import java.sql.SQLInvalidAuthorizationSpecException; import java.util.List; +import java.util.Optional; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; @@ -56,9 +58,6 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { @Autowired private UserRepository userRepository; - @Autowired - private DatabaseAccessRepository databaseAccessRepository; - @Autowired private ContainerRepository containerRepository; @@ -68,6 +67,9 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { @Autowired private ImageRepository imageRepository; + @Autowired + private LicenseRepository licenseRepository; + @Autowired private MariaDbServiceImpl databaseService; @@ -78,12 +80,24 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer(); @BeforeEach - public void beforeEach() throws SQLException { + public void beforeEach() throws SQLException, IOException { + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + TABLE_5.setColumns(TABLE_5_COLUMNS); + TABLE_6.setColumns(TABLE_6_COLUMNS); + TABLE_7.setColumns(TABLE_7_COLUMNS); + TABLE_8.setColumns(TABLE_8_COLUMNS); /* metadata database */ imageRepository.save(IMAGE_1); - userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.saveAll(List.of(DATABASE_1_SIMPLE, DATABASE_2_SIMPLE, DATABASE_3_SIMPLE)); + licenseRepository.save(LICENSE_1); + userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4)); + containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2, CONTAINER_3)); + DATABASE_1.setAccesses(List.of()); + DATABASE_2.setAccesses(List.of()); + DATABASE_3.setAccesses(List.of(DATABASE_1_USER_3_READ_ACCESS)); + databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2, DATABASE_3)); MariaDbConfig.dropAllDatabases(CONTAINER_1); MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_2); @@ -146,7 +160,6 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { /* mock */ MariaDbConfig.dropDatabase(CONTAINER_1, DATABASE_2_INTERNALNAME); MariaDbConfig.dropDatabase(CONTAINER_1, DATABASE_3_INTERNALNAME); - databaseRepository.deleteAll(); when(databaseIdxRepository.save(any(DatabaseDto.class))) .thenReturn(DATABASE_2_DTO) .thenReturn(DATABASE_3_DTO); @@ -164,7 +177,6 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { /* mock */ MariaDbConfig.dropDatabase(CONTAINER_1, DATABASE_2_INTERNALNAME); MariaDbConfig.dropDatabase(CONTAINER_1, DATABASE_3_INTERNALNAME); - databaseRepository.deleteAll(); when(databaseIdxRepository.save(any(DatabaseDto.class))) .thenReturn(DATABASE_3_DTO) .thenReturn(DATABASE_2_DTO); @@ -181,7 +193,6 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { /* mock */ MariaDbConfig.dropDatabase(CONTAINER_1, DATABASE_1_INTERNALNAME); - databaseRepository.deleteAll(); when(databaseIdxRepository.save(any(DatabaseDto.class))) .thenReturn(DATABASE_1_DTO); when(queryConfig.getGrantPrivileges()) @@ -198,7 +209,6 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { /* mock */ MariaDbConfig.dropDatabase(CONTAINER_1, DATABASE_1_INTERNALNAME); - databaseRepository.deleteAll(); when(databaseIdxRepository.save(any(DatabaseDto.class))) .thenReturn(DATABASE_1_DTO); when(queryConfig.getGrantPrivileges()) @@ -215,8 +225,6 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { public void updatePassword_canLogin_succeeds() throws Exception { /* mock */ - userRepository.save(USER_3); - databaseAccessRepository.save(DATABASE_1_USER_3_READ_ACCESS); when(databaseIdxRepository.save(any(DatabaseDto.class))) .thenReturn(DATABASE_1_DTO); when(queryConfig.getGrantPrivileges()) @@ -300,7 +308,6 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { MariaDbConfig.dropDatabase(CONTAINER_1, DATABASE_3_INTERNALNAME); MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_3); mariaDbConfig.grantUserPermissions(CONTAINER_1, DATABASE_3, "junit1"); - databaseAccessRepository.save(DATABASE_3_USER_1_WRITE_ALL_ACCESS); when(queryConfig.getGrantPrivileges()) .thenReturn("SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE"); @@ -308,26 +315,12 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { generic_user_insert("junit1", "junit1"); } - @Test - public void delete_succeeds() throws QueryMalformedException, UserNotFoundException, DatabaseConnectionException, - DatabaseNotFoundException, ImageNotSupportedException, DatabaseMalformedException { - - /* mock */ - databaseRepository.save(DATABASE_1_SIMPLE); - - /* test */ - databaseService.delete(DATABASE_1_ID, USER_1_ID); - } - @Test public void visibility_succeeds() throws DatabaseNotFoundException { final DatabaseModifyVisibilityDto request = DatabaseModifyVisibilityDto.builder() .isPublic(true) .build(); - /* mock */ - databaseRepository.save(DATABASE_1_SIMPLE); - /* test */ final Database response = databaseService.visibility(DATABASE_1_ID, request); assertTrue(response.getIsPublic()); @@ -339,15 +332,75 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { .username(USER_2_USERNAME) .build(); - /* mock */ - databaseRepository.save(DATABASE_1_SIMPLE); - userRepository.save(USER_2); - /* test */ final Database response = databaseService.transfer(DATABASE_1_ID, request); assertEquals(USER_2_ID, response.getOwnedBy()); } + @Test + public void obtainMetadata_tableWithoutVersioning_succeeds() throws DatabaseUnchangedException, QueryMalformedException, + DatabaseNotFoundException, ColumnParseException { + + /* test */ + final Database response = databaseService.obtainMetadata(DATABASE_1_ID); + final List<Table> tables = response.getTables(); + assertEquals(7, tables.size()); + final Optional<Table> optional3 = tables.stream().filter(t -> t.getInternalName().equals("weather_aut_without_versioning")).findFirst(); + assertTrue(optional3.isPresent()); + final Table table3 = optional3.get(); + assertEquals(5, table3.getColumns().size()); + assertColumn(table3.getColumns().get(0), 0, "id", TableColumnType.BIGINT, null, false, true, false); + assertColumn(table3.getColumns().get(1), 1, "date", TableColumnType.DATE, null, false, false, false); + assertColumn(table3.getColumns().get(2), 2, "location", TableColumnType.VARCHAR, 255L, true, false, false); + assertColumn(table3.getColumns().get(3), 3, "mintemp", TableColumnType.DOUBLE, null, true, false, false); + assertColumn(table3.getColumns().get(4), 4, "rainfall", TableColumnType.DOUBLE, null, true, false, false); + } + + @Test + public void obtainMetadata_tableWithVersioning_succeeds() throws DatabaseUnchangedException, QueryMalformedException, + DatabaseNotFoundException, ColumnParseException { + + /* test */ + final Database response = databaseService.obtainMetadata(DATABASE_1_ID); + final List<Table> tables = response.getTables(); + assertEquals(7, tables.size()); + final Optional<Table> optional4 = tables.stream().filter(t -> t.getInternalName().equals("weather_aut")).findFirst(); + assertTrue(optional4.isPresent()); + final Table table4 = optional4.get(); + assertEquals("weather_aut", table4.getName()); + assertEquals(5, table4.getColumns().size()); + assertColumn(table4.getColumns().get(0), 0, "id", TableColumnType.BIGINT, null, false, true, true); + assertColumn(table4.getColumns().get(1), 1, "date", TableColumnType.DATE, null, false, false, false); + assertColumn(table4.getColumns().get(2), 2, "location", TableColumnType.VARCHAR, 255L, true, false, false); + assertColumn(table4.getColumns().get(3), 3, "mintemp", TableColumnType.DOUBLE, null, true, false, false); + assertColumn(table4.getColumns().get(4), 4, "rainfall", TableColumnType.DOUBLE, null, true, false, false); + } + + @Test + public void obtainMetadata_view_succeeds() throws DatabaseUnchangedException, QueryMalformedException, + DatabaseNotFoundException, ColumnParseException { + + /* test */ + final Database response = databaseService.obtainMetadata(DATABASE_1_ID); + final List<Table> tables = response.getTables(); + assertEquals(7, tables.size()); + final List<View> views = response.getViews(); + log.debug("found {} views: {}", views.size(), views.stream().map(View::getInternalName).toList()); + assertEquals(4, views.size()); + final Optional<View> optional1 = views.stream().filter(v -> v.getInternalName().equals("weather_aut_merge")).findFirst(); + assertTrue(optional1.isPresent()); + final View view1 = optional1.get(); + assertEquals("weather_aut_merge", view1.getInternalName()); + assertEquals("weather_aut_merge", view1.getName()); + assertEquals(DATABASE_1_PUBLIC, view1.getIsPublic()); + assertFalse(view1.getIsInitialView()); + assertEquals(DATABASE_1_OWNER, view1.getCreatedBy()); + assertNotNull(view1.getQuery()); + assertNotNull(view1.getQueryHash()); + assertColumn(view1.getColumns().get(0), 0, "id", TableColumnType.BIGINT, null, false, true, true); + assertColumn(view1.getColumns().get(1), 1, "date", TableColumnType.DATE, null, false, false, false); + } + /* ################################################################################################### */ /* ## GENERIC TEST CASES ## */ /* ################################################################################################### */ @@ -392,4 +445,18 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { assertEquals(1L, queryId); } + public void assertColumn(TableColumn column, Integer ordinalPosition, String columnName, TableColumnType type, + Long size, Boolean isNullAllowed, Boolean isPrimary, Boolean isAutoGenerated) { + assertEquals(ordinalPosition, column.getOrdinalPosition()); + assertEquals(columnName, column.getName()); + assertEquals(columnName, column.getInternalName()); + assertEquals(type, column.getColumnType()); + if (size != null) { + assertEquals(size, column.getSize()); + } + assertEquals(isNullAllowed, column.getIsNullAllowed()); + assertEquals(isPrimary, column.getIsPrimaryKey()); + assertEquals(isAutoGenerated, column.getAutoGenerated()); + } + } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java index 92236fbb31b2c70db18906792c5c5a0068ef0b1d..576129336f66bdeb543b5e08e3b6951fa04f491c 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java @@ -4,8 +4,6 @@ import at.tuwien.BaseUnitTest; import at.tuwien.annotations.MockAmqp; import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.DatabaseCreateDto; -import at.tuwien.entities.container.Container; -import at.tuwien.entities.container.image.ContainerImage; import at.tuwien.entities.database.Database; import at.tuwien.exception.*; import at.tuwien.repository.mdb.ContainerRepository; @@ -24,7 +22,6 @@ import java.util.Optional; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @Log4j2 @@ -84,21 +81,6 @@ public class DatabaseServiceUnitTest extends BaseUnitTest { }); } - @Test - public void delete_notFound_fails() { - - /* mock */ - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.of(mock(Container.class))); - when(databaseRepository.findById(DATABASE_1_ID)) - .thenReturn(Optional.empty()); - - /* test */ - assertThrows(DatabaseNotFoundException.class, () -> { - databaseService.delete(DATABASE_1_ID, USER_1_ID); - }); - } - @Test public void create_notFound_fails() throws UserNotFoundException { final DatabaseCreateDto request = DatabaseCreateDto.builder() @@ -118,28 +100,4 @@ public class DatabaseServiceUnitTest extends BaseUnitTest { }); } - @Test - public void delete_image_fails() { - final ContainerImage image = ContainerImage.builder() - .name("mysql") - .build(); - final Container container = Container.builder() - .image(image) - .build(); - final Database database = Database.builder() - .container(container) - .build(); - - /* mock */ - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.of(CONTAINER_1)); - when(databaseRepository.findById(DATABASE_1_ID)) - .thenReturn(Optional.of(database)); - - /* test */ - assertThrows(ImageNotSupportedException.class, () -> { - databaseService.delete(DATABASE_1_ID, USER_1_ID); - }); - } - } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/EntityServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/EntityServiceIntegrationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..bd015711b96f0532af788f099b450fecab980034 --- /dev/null +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/EntityServiceIntegrationTest.java @@ -0,0 +1,148 @@ +package at.tuwien.service; + +import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; +import at.tuwien.api.semantics.EntityDto; +import at.tuwien.api.semantics.TableColumnEntityDto; +import at.tuwien.exception.*; +import at.tuwien.repository.mdb.*; +import lombok.extern.log4j.Log4j2; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +@Log4j2 +@SpringBootTest +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) +@ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch +public class EntityServiceIntegrationTest extends BaseUnitTest { + + @Autowired + private ImageRepository imageRepository; + + @Autowired + private ContainerRepository containerRepository; + + @Autowired + private UserRepository userRepository; + + @Autowired + private DatabaseRepository databaseRepository; + + @Autowired + private OntologyRepository ontologyRepository; + + @Autowired + private EntityService entityService; + + @Autowired + private LicenseRepository licenseRepository; + + @BeforeEach + public void beforeEach() { + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + /* metadata database */ + ontologyRepository.saveAll(List.of(ONTOLOGY_1, ONTOLOGY_2, ONTOLOGY_3, ONTOLOGY_4, ONTOLOGY_5)); + imageRepository.save(IMAGE_1); + licenseRepository.save(LICENSE_1); + userRepository.save(USER_1); + containerRepository.save(CONTAINER_1); + DATABASE_1.setAccesses(List.of()); + databaseRepository.save(DATABASE_1); + } + + @Test + public void findByLabel_wikidataSparql_succeeds() throws QueryMalformedException, OntologyInvalidException { + + /* test */ + final List<EntityDto> response = entityService.findByLabel(ONTOLOGY_2, "temperature"); + assertFalse(response.isEmpty()); + final EntityDto entity0 = response.get(0); + assertNotNull(entity0.getUri()); + log.trace("found concept {}", entity0); + } + + @Test + public void findByUri_wikidataSparql_succeeds() throws QueryMalformedException, OntologyInvalidException { + + /* test */ + final List<EntityDto> response = entityService.findByUri(ONTOLOGY_2, COLUMN_CONCEPT_PRECIPITATION_URI); + assertEquals(1, response.size()); + final EntityDto entity0 = response.get(0); + assertNotNull(entity0.getUri()); + log.trace("found concept {}", entity0); + } + + @Test + public void findOneByUri_wikidataSparql_succeeds() throws QueryMalformedException, SemanticEntityNotFoundException, OntologyInvalidException { + + /* test */ + final EntityDto response = entityService.findOneByUri(ONTOLOGY_2, COLUMN_CONCEPT_PRECIPITATION_URI); + assertNotNull(response.getUri()); + log.trace("found concept {}", response); + } + + @Test + public void findByLabel_om2Rdf_succeeds() throws QueryMalformedException, OntologyInvalidException { + + /* test */ + final List<EntityDto> response = entityService.findByLabel(ONTOLOGY_1, "millimetre"); + assertFalse(response.isEmpty()); + final EntityDto entity0 = response.get(0); + assertNotNull(entity0.getUri()); + log.trace("found unit {}", entity0); + } + + @Test + public void findByUri_om2Rdf_succeeds() throws QueryMalformedException, OntologyInvalidException { + + /* test */ + final List<EntityDto> response = entityService.findByUri(ONTOLOGY_1, UNIT_MILLIMETRE_URI); + assertEquals(1, response.size()); + final EntityDto entity0 = response.get(0); + assertNotNull(entity0.getUri()); + log.trace("found unit {}", entity0); + } + + @Test + public void suggestTableSemantics_succeeds() throws QueryMalformedException, OntologyInvalidException, + TableNotFoundException, DatabaseNotFoundException { + + /* test */ + final List<EntityDto> response = entityService.suggestTableSemantics(DATABASE_1_ID, TABLE_1_ID); +// assertFalse(response.isEmpty()); + } + + @Test + public void suggestTableColumnSemantics_succeeds() throws QueryMalformedException, OntologyInvalidException, + TableNotFoundException, DatabaseNotFoundException, TableColumnNotFoundException { + + /* test */ + final List<TableColumnEntityDto> response = entityService.suggestTableColumnSemantics(DATABASE_1_ID, TABLE_1_ID, 1L); + assertFalse(response.isEmpty()); + } + + @Test + public void findByUri_noRdfNoSparql_fails() { + + /* test */ + assertThrows(OntologyInvalidException.class, () -> { + entityService.findByUri(ONTOLOGY_4, "http://schema.org/MedicalCondition"); + }); + } + +} diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java index 5d3d9e010fc7e07f7b9982bb566ac4072133e6d5..a08746df1c5038295f1b91271f7ee9b66ead1931 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java @@ -2,14 +2,19 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockListeners; +import at.tuwien.api.database.DatabaseDto; import at.tuwien.api.database.query.QueryDto; +import at.tuwien.api.identifier.*; +import at.tuwien.entities.database.Database; import at.tuwien.entities.identifier.Identifier; import at.tuwien.entities.identifier.IdentifierDescription; import at.tuwien.entities.identifier.IdentifierTitle; import at.tuwien.entities.identifier.RelatedIdentifier; import at.tuwien.exception.*; +import at.tuwien.listener.MirrorListener; import at.tuwien.repository.mdb.*; -import at.tuwien.repository.sdb.IdentifierIdxRepository; +import at.tuwien.repository.sdb.DatabaseIdxRepository; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -32,7 +37,10 @@ import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; import org.testcontainers.utility.DockerImageName; -import java.util.List; +import javax.swing.text.html.Option; +import java.util.*; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; @@ -44,6 +52,7 @@ import static org.mockito.Mockito.when; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest @MockAmqp +@MockListeners public class IdentifierServiceIntegrationTest extends BaseUnitTest { @MockBean @@ -63,7 +72,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { private IdentifierRepository identifierRepository; @Autowired - private IdentifierIdxRepository identifierIdxRepository; + private DatabaseIdxRepository databaseIdxRepository; @Autowired private ContainerRepository containerRepository; @@ -74,15 +83,9 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { @Autowired private ImageRepository imageRepository; - @Autowired - private ViewRepository viewRepository; - @Autowired private UserRepository userRepository; - @Autowired - private TableRepository tableRepository; - @Container private static final OpensearchContainer opensearchContainer = new OpensearchContainer(DockerImageName.parse("opensearchproject/opensearch:2.10.0")); @@ -97,33 +100,38 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() { - imageRepository.save(IMAGE_1_SIMPLE); + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + TABLE_5.setColumns(TABLE_5_COLUMNS); + TABLE_6.setColumns(TABLE_6_COLUMNS); + TABLE_7.setColumns(TABLE_7_COLUMNS); + /* metadata database */ + imageRepository.save(IMAGE_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4)); licenseRepository.save(LICENSE_1); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); - containerRepository.save(CONTAINER_2_SIMPLE); - databaseRepository.save(DATABASE_2_SIMPLE); + containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2)); + DATABASE_1.setAccesses(List.of()); + DATABASE_2.setAccesses(List.of()); + databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2)); + /* search database */ + databaseIdxRepository.deleteAll(); + databaseIdxRepository.saveAll(List.of(DATABASE_1_DTO, DATABASE_2_DTO)); } @Test public void findAll_succeeds() { - /* mock */ - identifierRepository.save(IDENTIFIER_1); - /* test */ final List<Identifier> response = identifierService.findAll(); - assertEquals(1, response.size()); + assertEquals(5, response.size()); } @Test @Transactional public void find_succeeds() throws IdentifierNotFoundException { - /* mock */ - identifierRepository.save(IDENTIFIER_1); - /* test */ final Identifier response = identifierService.find(IDENTIFIER_1_ID); assertEquals(IDENTIFIER_1_ID, response.getId()); @@ -137,6 +145,9 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { assertEquals(IDENTIFIER_1_TITLE_2_TITLE, title1.getTitle()); assertEquals(IDENTIFIER_1_TITLE_2_LANG, title1.getLanguage()); assertEquals(IDENTIFIER_1_TITLE_2_TYPE, title1.getTitleType()); + /* open search database */ + final Optional<DatabaseDto> responseDto = databaseIdxRepository.findById(DATABASE_1_ID); + assertTrue(responseDto.isPresent()); } @Test @@ -144,95 +155,117 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { /* test */ assertThrows(IdentifierNotFoundException.class, () -> { - identifierService.find(IDENTIFIER_1_ID); + identifierService.find(9999L); }); } @Test public void findAll_forDatabase_succeeds() { - /* mock */ - identifierRepository.save(IDENTIFIER_1); - - /* test */ - final List<Identifier> response = identifierService.findAll(DATABASE_1_ID); - assertEquals(1, response.size()); - } - - @Test - public void findAll_forDatabaseEmpty_succeeds() { - /* test */ final List<Identifier> response = identifierService.findAll(DATABASE_1_ID); - assertEquals(0, response.size()); + assertEquals(4, response.size()); + /* open search database */ + final Optional<DatabaseDto> responseDto = databaseIdxRepository.findById(DATABASE_1_ID); + assertTrue(responseDto.isPresent()); + final DatabaseDto databaseDto = responseDto.get(); + assertEquals(4, databaseDto.getIdentifiers().size()); } @Test + @Transactional public void create_subsetRelatedIdentifiers_succeeds() throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, - ImageNotSupportedException { + ImageNotSupportedException, IdentifierNotFoundException { /* mock */ when(restTemplate.exchange(anyString(), any(HttpMethod.class), any(HttpEntity.class), eq(QueryDto.class))) .thenReturn(ResponseEntity.ok(QUERY_2_DTO)); - when(storeService.findOne(DATABASE_2_ID, IDENTIFIER_2_QUERY_ID, USER_2_PRINCIPAL)) + when(storeService.findOne(DATABASE_2_ID, IDENTIFIER_5_QUERY_ID, USER_2_PRINCIPAL)) .thenReturn(QUERY_2); - identifierRepository.save(IDENTIFIER_1_SIMPLE); /* test */ - final Identifier response = identifierService.create(IDENTIFIER_2_DTO_REQUEST, USER_2_PRINCIPAL); - assertEquals(IDENTIFIER_2_ID, response.getId()); + final Identifier response = identifierService.create(IDENTIFIER_5_DTO_REQUEST, USER_2_PRINCIPAL); assertNotNull(response.getTitles()); assertEquals(1, response.getTitles().size()); final IdentifierTitle title0 = response.getTitles().get(0); - assertEquals(IDENTIFIER_2_TITLE_1_TITLE, title0.getTitle()); - assertEquals(IDENTIFIER_2_TITLE_1_LANG, title0.getLanguage()); - assertEquals(IDENTIFIER_2_TITLE_1_TYPE, title0.getTitleType()); + assertEquals(IDENTIFIER_5_TITLE_1_TITLE, title0.getTitle()); + assertEquals(IDENTIFIER_5_TITLE_1_LANG, title0.getLanguage()); + assertEquals(IDENTIFIER_5_TITLE_1_TYPE, title0.getTitleType()); assertNotNull(response.getDescriptions()); assertEquals(1, response.getDescriptions().size()); final IdentifierDescription description0 = response.getDescriptions().get(0); - assertEquals(IDENTIFIER_2_DESCRIPTION_1_DESCRIPTION, description0.getDescription()); - assertEquals(IDENTIFIER_2_DESCRIPTION_1_LANG, description0.getLanguage()); - assertEquals(IDENTIFIER_2_DESCRIPTION_1_TYPE, description0.getDescriptionType()); + assertEquals(IDENTIFIER_5_DESCRIPTION_1_DESCRIPTION, description0.getDescription()); + assertEquals(IDENTIFIER_5_DESCRIPTION_1_LANG, description0.getLanguage()); + assertEquals(IDENTIFIER_5_DESCRIPTION_1_TYPE, description0.getDescriptionType()); assertNull(response.getDoi()); - assertEquals(IDENTIFIER_2_PUBLISHER, response.getPublisher()); - assertEquals(IDENTIFIER_2_DATABASE_ID, response.getDatabase().getId()); + assertEquals(IDENTIFIER_5_PUBLISHER, response.getPublisher()); + assertEquals(IDENTIFIER_5_DATABASE_ID, response.getDatabaseId()); assertNull(response.getLanguage()); - assertEquals(IDENTIFIER_2_PUBLICATION_YEAR, response.getPublicationYear()); - assertEquals(IDENTIFIER_2_PUBLICATION_MONTH, response.getPublicationMonth()); - assertEquals(IDENTIFIER_2_PUBLICATION_DAY, response.getPublicationDay()); + assertEquals(IDENTIFIER_5_PUBLICATION_YEAR, response.getPublicationYear()); + assertEquals(IDENTIFIER_5_PUBLICATION_MONTH, response.getPublicationMonth()); + assertEquals(IDENTIFIER_5_PUBLICATION_DAY, response.getPublicationDay()); + assertNotNull(response.getRelatedIdentifiers()); final List<RelatedIdentifier> relatedIdentifiers = response.getRelatedIdentifiers(); assertEquals(1, relatedIdentifiers.size()); final RelatedIdentifier relatedIdentifier1 = relatedIdentifiers.get(0); - assertEquals(RELATED_IDENTIFIER_2_ID, relatedIdentifier1.getId()); - assertEquals(RELATED_IDENTIFIER_2_TYPE, relatedIdentifier1.getType()); - assertEquals(RELATED_IDENTIFIER_2_RELATION_TYPE, relatedIdentifier1.getRelation()); - assertEquals(RELATED_IDENTIFIER_2_VALUE, relatedIdentifier1.getValue()); + assertEquals(RELATED_IDENTIFIER_5_ID, relatedIdentifier1.getId()); + assertEquals(RELATED_IDENTIFIER_5_TYPE, relatedIdentifier1.getType()); + assertEquals(RELATED_IDENTIFIER_5_RELATION_TYPE, relatedIdentifier1.getRelation()); + assertEquals(RELATED_IDENTIFIER_5_VALUE, relatedIdentifier1.getValue()); /* open search database */ - assertTrue(identifierIdxRepository.existsById(IDENTIFIER_2_ID)); + final Optional<DatabaseDto> optional = databaseIdxRepository.findById(IDENTIFIER_5_DATABASE_ID); + assertTrue(optional.isPresent()); + assertNotNull(optional.get().getIdentifiers()); + assertEquals(2, optional.get().getIdentifiers().size()); + final IdentifierDto dto1 = optional.get().getIdentifiers().get(1); + assertNotNull(dto1.getTitles()); + assertEquals(1, dto1.getTitles().size()); + final IdentifierTitleDto titleDto0 = dto1.getTitles().get(0); + assertEquals(IDENTIFIER_5_TITLE_1_TITLE, titleDto0.getTitle()); + assertEquals(IDENTIFIER_5_TITLE_1_LANG_DTO, titleDto0.getLanguage()); + assertEquals(IDENTIFIER_5_TITLE_1_TYPE_DTO, titleDto0.getTitleType()); + assertNotNull(dto1.getDescriptions()); + assertEquals(1, dto1.getDescriptions().size()); + final IdentifierDescriptionDto descriptionDto0 = dto1.getDescriptions().get(0); + assertEquals(IDENTIFIER_5_DESCRIPTION_1_DESCRIPTION, descriptionDto0.getDescription()); + assertEquals(IDENTIFIER_5_DESCRIPTION_1_LANG_DTO, descriptionDto0.getLanguage()); + assertEquals(IDENTIFIER_5_DESCRIPTION_1_TYPE_DTO, descriptionDto0.getDescriptionType()); + assertNull(dto1.getDoi()); + assertEquals(IDENTIFIER_5_PUBLISHER, dto1.getPublisher()); + assertNull(dto1.getLanguage()); + assertEquals(IDENTIFIER_5_PUBLICATION_YEAR, dto1.getPublicationYear()); + assertEquals(IDENTIFIER_5_PUBLICATION_MONTH, dto1.getPublicationMonth()); + assertEquals(IDENTIFIER_5_PUBLICATION_DAY, dto1.getPublicationDay()); + final List<RelatedIdentifierDto> relatedIdentifiersDto = dto1.getRelatedIdentifiers(); + assertEquals(1, relatedIdentifiersDto.size()); + final RelatedIdentifierDto relatedIdentifierDto1 = relatedIdentifiersDto.get(0); + assertEquals(RELATED_IDENTIFIER_5_TYPE_DTO, relatedIdentifierDto1.getType()); + assertEquals(RELATED_IDENTIFIER_5_RELATION_TYPE_DTO, relatedIdentifierDto1.getRelation()); + assertEquals(RELATED_IDENTIFIER_5_VALUE, relatedIdentifierDto1.getValue()); + /* open search database */ + final Optional<DatabaseDto> responseDto = databaseIdxRepository.findById(DATABASE_2_ID); + assertTrue(responseDto.isPresent()); } @Test public void create_succeeds() throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException, QueryStoreException, - DatabaseConnectionException, ImageNotSupportedException { + DatabaseConnectionException, ImageNotSupportedException, IdentifierNotFoundException { /* test */ final Identifier response = identifierService.create(IDENTIFIER_1_DTO_REQUEST, USER_1_PRINCIPAL); - assertEquals(IDENTIFIER_1_ID, response.getId()); assertNotNull(response.getTitles()); final List<IdentifierTitle> titles = response.getTitles(); assertEquals(2, titles.size()); final IdentifierTitle title0 = titles.get(0); - assertEquals(IDENTIFIER_1_TITLE_1_ID, title0.getId()); assertEquals(IDENTIFIER_1_TITLE_1_TITLE, title0.getTitle()); assertEquals(IDENTIFIER_1_TITLE_1_LANG, title0.getLanguage()); assertEquals(IDENTIFIER_1_TITLE_1_TYPE, title0.getTitleType()); final IdentifierTitle title1 = titles.get(1); - assertEquals(IDENTIFIER_1_TITLE_2_ID, title1.getId()); assertEquals(IDENTIFIER_1_TITLE_2_TITLE, title1.getTitle()); assertEquals(IDENTIFIER_1_TITLE_2_LANG, title1.getLanguage()); assertEquals(IDENTIFIER_1_TITLE_2_TYPE, title1.getTitleType()); @@ -248,30 +281,22 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { assertNotNull(response.getFunders()); assertEquals(1, response.getFunders().size()); /* open search database */ - assertTrue(identifierIdxRepository.existsById(IDENTIFIER_1_ID)); + final Optional<DatabaseDto> responseDto = databaseIdxRepository.findById(DATABASE_1_ID); + assertTrue(responseDto.isPresent()); } @Test public void create_noRelatedTitleDescription_succeeds() throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException, QueryStoreException, - DatabaseConnectionException, ImageNotSupportedException { + DatabaseConnectionException, ImageNotSupportedException, IdentifierNotFoundException { /* mock */ - containerRepository.save(CONTAINER_3_SIMPLE); - containerRepository.save(CONTAINER_4_SIMPLE); - databaseRepository.save(DATABASE_3_SIMPLE); - databaseRepository.save(DATABASE_4_SIMPLE); - identifierRepository.save(IDENTIFIER_1_SIMPLE); - identifierRepository.save(IDENTIFIER_2_SIMPLE); - identifierRepository.save(IDENTIFIER_3_SIMPLE); - identifierIdxRepository.save(IDENTIFIER_1_DTO); - identifierIdxRepository.save(IDENTIFIER_2_DTO); - identifierIdxRepository.save(IDENTIFIER_3_DTO); + containerRepository.saveAll(List.of(CONTAINER_3, CONTAINER_4)); + databaseRepository.saveAll(List.of(DATABASE_3, DATABASE_4)); /* test */ - final Identifier response = identifierService.create(IDENTIFIER_4_DTO_REQUEST, USER_1_PRINCIPAL); - assertEquals(IDENTIFIER_4_ID, response.getId()); + final Identifier response = identifierService.create(IDENTIFIER_7_DTO_REQUEST, USER_1_PRINCIPAL); assertNotNull(response.getTitles()); assertEquals(0, response.getTitles().size()); assertNotNull(response.getDescriptions()); @@ -281,160 +306,73 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { assertNotNull(response.getFunders()); assertEquals(0, response.getFunders().size()); /* open search database */ - assertTrue(identifierIdxRepository.existsById(IDENTIFIER_4_ID)); + final Optional<DatabaseDto> responseDto = databaseIdxRepository.findById(DATABASE_1_ID); + assertTrue(responseDto.isPresent()); } @Test public void create_subsetHasDatabaseIdentifier_succeeds() throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException, QueryStoreException, - DatabaseConnectionException, ImageNotSupportedException { + DatabaseConnectionException, ImageNotSupportedException, IdentifierNotFoundException { /* mock */ - containerRepository.save(CONTAINER_3_SIMPLE); - containerRepository.save(CONTAINER_4_SIMPLE); - databaseRepository.save(DATABASE_3_SIMPLE); - databaseRepository.save(DATABASE_4_SIMPLE); - identifierRepository.save(IDENTIFIER_1_SIMPLE); - identifierRepository.save(IDENTIFIER_2_SIMPLE); - identifierRepository.save(IDENTIFIER_3_SIMPLE); - identifierRepository.save(IDENTIFIER_4_SIMPLE); - identifierIdxRepository.save(IDENTIFIER_1_DTO); - identifierIdxRepository.save(IDENTIFIER_2_DTO); - identifierIdxRepository.save(IDENTIFIER_3_DTO); - identifierIdxRepository.save(IDENTIFIER_4_DTO); when(storeService.findOne(DATABASE_1_ID, QUERY_1_ID, USER_1_PRINCIPAL)) .thenReturn(QUERY_1); /* test */ - final Identifier response = identifierService.create(IDENTIFIER_5_DTO_REQUEST, USER_1_PRINCIPAL); - assertEquals(IDENTIFIER_5_DATABASE_ID, response.getDatabaseId()); - assertEquals(IDENTIFIER_5_DATABASE_ID, response.getDatabase().getId()); - assertEquals(IDENTIFIER_5_QUERY, response.getQuery()); - assertEquals(IDENTIFIER_5_QUERY_HASH, response.getQueryHash()); - assertEquals(IDENTIFIER_5_RESULT_HASH, response.getResultHash()); + final Identifier response = identifierService.create(IDENTIFIER_2_DTO_REQUEST, USER_1_PRINCIPAL); + assertEquals(IDENTIFIER_2_DATABASE_ID, response.getDatabaseId()); + assertEquals(IDENTIFIER_2_DATABASE_ID, response.getDatabase().getId()); + assertEquals(IDENTIFIER_2_QUERY, response.getQuery()); + assertEquals(IDENTIFIER_2_QUERY_HASH, response.getQueryHash()); + assertEquals(IDENTIFIER_2_RESULT_HASH, response.getResultHash()); assertEquals(0, response.getTitles().size()); assertEquals(0, response.getDescriptions().size()); /* open search database */ - assertTrue(identifierIdxRepository.existsById(IDENTIFIER_5_ID)); + final Optional<DatabaseDto> responseDto = databaseIdxRepository.findById(DATABASE_1_ID); + assertTrue(responseDto.isPresent()); } @Test public void create_viewIdentifier_succeeds() throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException, QueryStoreException, - DatabaseConnectionException, ImageNotSupportedException { - - /* mock */ - containerRepository.save(CONTAINER_3_SIMPLE); - containerRepository.save(CONTAINER_4_SIMPLE); - databaseRepository.save(DATABASE_3_SIMPLE); - databaseRepository.save(DATABASE_4_SIMPLE); - tableRepository.saveAll(List.of(TABLE_1_SIMPLE, TABLE_2_SIMPLE, TABLE_3_SIMPLE)); - viewRepository.save(VIEW_1); - identifierRepository.save(IDENTIFIER_1_SIMPLE); - identifierRepository.save(IDENTIFIER_2_SIMPLE); - identifierRepository.save(IDENTIFIER_3_SIMPLE); - identifierRepository.save(IDENTIFIER_4_SIMPLE); - identifierRepository.save(IDENTIFIER_5_SIMPLE); - identifierIdxRepository.save(IDENTIFIER_1_DTO); - identifierIdxRepository.save(IDENTIFIER_2_DTO); - identifierIdxRepository.save(IDENTIFIER_3_DTO); - identifierIdxRepository.save(IDENTIFIER_4_DTO); - identifierIdxRepository.save(IDENTIFIER_5_DTO); + DatabaseConnectionException, ImageNotSupportedException, IdentifierNotFoundException { /* test */ - final Identifier response = identifierService.create(IDENTIFIER_6_DTO_REQUEST, USER_1_PRINCIPAL); - assertEquals(IDENTIFIER_6_DATABASE_ID, response.getDatabaseId()); - assertEquals(IDENTIFIER_6_DATABASE_ID, response.getDatabase().getId()); - assertEquals(IDENTIFIER_6_QUERY, response.getQuery()); - assertEquals(IDENTIFIER_6_QUERY_HASH, response.getQueryHash()); - assertEquals(IDENTIFIER_6_RESULT_HASH, response.getResultHash()); + final Identifier response = identifierService.create(IDENTIFIER_3_DTO_REQUEST, USER_1_PRINCIPAL); + assertEquals(IDENTIFIER_3_DATABASE_ID, response.getDatabaseId()); + assertEquals(IDENTIFIER_3_DATABASE_ID, response.getDatabase().getId()); + assertEquals(IDENTIFIER_3_QUERY, response.getQuery()); + assertEquals(IDENTIFIER_3_QUERY_HASH, response.getQueryHash()); + assertEquals(IDENTIFIER_3_RESULT_HASH, response.getResultHash()); assertEquals(0, response.getTitles().size()); assertEquals(0, response.getDescriptions().size()); assertEquals(1, response.getLicenses().size()); /* open search database */ - assertTrue(identifierIdxRepository.existsById(IDENTIFIER_6_ID)); - } - - @Test - public void update_database_succeeds() throws UserNotFoundException, QueryNotFoundException, - DatabaseNotFoundException, RemoteUnavailableException, IdentifierRequestException, - IdentifierNotFoundException, QueryStoreException, DatabaseConnectionException, ImageNotSupportedException { - - /* mock */ - identifierRepository.save(IDENTIFIER_1_SIMPLE); - - /* test */ - final Identifier response = identifierService.update(IDENTIFIER_1_ID, IDENTIFIER_1_DTO_UPDATE_REQUEST, USER_1_PRINCIPAL); - assertEquals(IDENTIFIER_1_ID, response.getId()); - assertEquals(IDENTIFIER_1_DATABASE_ID, response.getDatabaseId()); - final List<IdentifierTitle> titles = response.getTitles(); - assertEquals(2, titles.size()); - final IdentifierTitle title0 = titles.get(0); - assertEquals(IDENTIFIER_1_TITLE_1_ID, title0.getId()); - assertEquals(IDENTIFIER_1_TITLE_1_TITLE_MODIFY, title0.getTitle()); // <<<<<< - assertEquals(IDENTIFIER_1_TITLE_1_LANG, title0.getLanguage()); - assertEquals(IDENTIFIER_1_TITLE_1_TYPE, title0.getTitleType()); - final IdentifierTitle title1 = titles.get(1); - assertEquals(IDENTIFIER_1_TITLE_2_ID, title1.getId()); - assertEquals(IDENTIFIER_1_TITLE_2_TITLE_MODIFY, title1.getTitle()); - assertEquals(IDENTIFIER_1_TITLE_2_LANG, title1.getLanguage()); - assertEquals(IDENTIFIER_1_TITLE_2_TYPE, title1.getTitleType()); - assertEquals(IDENTIFIER_1_PUBLICATION_YEAR, response.getPublicationYear()); - assertEquals(IDENTIFIER_1_PUBLICATION_MONTH, response.getPublicationMonth()); - assertEquals(IDENTIFIER_1_PUBLICATION_DAY, response.getPublicationDay()); - /* open search database */ - assertTrue(identifierIdxRepository.existsById(IDENTIFIER_1_ID)); + final Optional<DatabaseDto> responseDto = databaseIdxRepository.findById(DATABASE_1_ID); + assertTrue(responseDto.isPresent()); } @Test @Transactional - public void update_subset_succeeds() throws UserNotFoundException, QueryNotFoundException, - DatabaseNotFoundException, RemoteUnavailableException, IdentifierRequestException, - IdentifierNotFoundException, QueryStoreException, DatabaseConnectionException, ImageNotSupportedException { - - /* mock */ - identifierRepository.save(IDENTIFIER_1_SIMPLE); - identifierRepository.save(IDENTIFIER_2_SIMPLE); - when(storeService.findOne(eq(IDENTIFIER_2_DATABASE_ID), eq(IDENTIFIER_2_QUERY_ID), any())) - .thenReturn(QUERY_2); - - /* test */ - final Identifier response = identifierService.update(IDENTIFIER_2_ID, IDENTIFIER_2_DTO_UPDATE_REQUEST, USER_2_PRINCIPAL); - assertEquals(IDENTIFIER_2_ID, response.getId()); - assertEquals(IDENTIFIER_2_DATABASE_ID, response.getDatabase().getId()); - assertEquals(1, response.getTitles().size()); - assertEquals(1, identifierRepository.findAll().stream().map(Identifier::getTitles).flatMap(List::stream).toList().size()); - assertEquals(IDENTIFIER_2_PUBLICATION_YEAR, response.getPublicationYear()); - assertEquals(IDENTIFIER_2_PUBLICATION_MONTH, response.getPublicationMonth()); - assertEquals(IDENTIFIER_2_PUBLICATION_DAY, response.getPublicationDay()); - /* open search database */ - assertTrue(identifierIdxRepository.existsById(IDENTIFIER_2_ID)); - } - - @Test - public void delete_succeeds() throws IdentifierNotFoundException { - - /* mock */ - identifierRepository.save(IDENTIFIER_1_SIMPLE); - identifierIdxRepository.save(IDENTIFIER_1_DTO); + public void delete_succeeds() throws IdentifierNotFoundException, DatabaseNotFoundException { /* test */ identifierService.delete(IDENTIFIER_1_ID); + assertFalse(identifierRepository.findById(IDENTIFIER_1_ID).isPresent()); /* open search database */ - assertFalse(identifierIdxRepository.existsById(IDENTIFIER_1_ID)); + final Optional<DatabaseDto> responseDto = databaseIdxRepository.findById(DATABASE_1_ID); + assertTrue(responseDto.isPresent()); } @Test public void delete_notFound_fails() { - /* mock */ - identifierRepository.save(IDENTIFIER_1_SIMPLE); - /* test */ assertThrows(IdentifierNotFoundException.class, () -> { - identifierService.delete(IDENTIFIER_2_ID); + identifierService.delete(9999L); }); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java index 3ced0a81a46e1d82d5a6424566c3e715e024bd3a..3ad31da548073e7910e9c28b01725e8c78e2703f 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java @@ -5,14 +5,13 @@ import at.tuwien.annotations.MockAmqp; import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.query.QueryDto; import at.tuwien.api.identifier.BibliographyTypeDto; -import at.tuwien.api.identifier.IdentifierDto; +import at.tuwien.entities.database.Database; import at.tuwien.entities.identifier.Creator; import at.tuwien.entities.identifier.Identifier; -import at.tuwien.entities.identifier.IdentifierType; import at.tuwien.entities.identifier.NameIdentifierSchemeType; import at.tuwien.exception.*; +import at.tuwien.repository.mdb.DatabaseRepository; import at.tuwien.repository.mdb.IdentifierRepository; -import at.tuwien.repository.sdb.IdentifierIdxRepository; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -44,11 +43,14 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { private IdentifierRepository identifierRepository; @MockBean - private IdentifierIdxRepository identifierIdxRepository; + private DatabaseRepository databaseRepository; @MockBean private DatabaseService databaseService; + @MockBean + private StoreService storeService; + @MockBean @Qualifier("restTemplate") private RestTemplate restTemplate; @@ -67,7 +69,7 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { .thenReturn(List.of(IDENTIFIER_1)); /* test */ - final List<Identifier> response = identifierService.findAll(null, null, null, null); + final List<Identifier> response = identifierService.findAll(null, null, null, null, null); assertEquals(1, response.size()); assertEquals(IDENTIFIER_1, response.get(0)); } @@ -80,7 +82,7 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { .thenReturn(List.of(IDENTIFIER_1)); /* test */ - final List<Identifier> response = identifierService.findAll(null, null, null, null); + final List<Identifier> response = identifierService.findAll(null, null, null, null, null); assertEquals(1, response.size()); assertEquals(IDENTIFIER_1, response.get(0)); } @@ -93,7 +95,7 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { .thenReturn(List.of(IDENTIFIER_1)); /* test */ - final List<Identifier> response = identifierService.findAll(null, DATABASE_1_ID, null, null); + final List<Identifier> response = identifierService.findAll(null, DATABASE_1_ID, null, null, null); assertEquals(1, response.size()); assertEquals(IDENTIFIER_1, response.get(0)); } @@ -103,12 +105,11 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { /* mock */ when(identifierRepository.findAll()) - .thenReturn(List.of(IDENTIFIER_1)); + .thenReturn(List.of(IDENTIFIER_1, IDENTIFIER_5)); /* test */ - final List<Identifier> response = identifierService.findAll(null, null, QUERY_1_ID, null); + final List<Identifier> response = identifierService.findAll(null, null, IDENTIFIER_5_QUERY_ID, null, null); assertEquals(1, response.size()); - assertEquals(IDENTIFIER_1, response.get(0)); } @Test @@ -116,12 +117,11 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { /* mock */ when(identifierRepository.findAll()) - .thenReturn(List.of(IDENTIFIER_1)); + .thenReturn(List.of(IDENTIFIER_5)); /* test */ - final List<Identifier> response = identifierService.findAll(null, DATABASE_1_ID, QUERY_1_ID, null); + final List<Identifier> response = identifierService.findAll(null, IDENTIFIER_5_DATABASE_ID, IDENTIFIER_5_QUERY_ID, null, null); assertEquals(1, response.size()); - assertEquals(IDENTIFIER_1, response.get(0)); } @Test @@ -180,7 +180,7 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, - ImageNotSupportedException { + ImageNotSupportedException, IdentifierNotFoundException { /* mock */ when(databaseService.find(DATABASE_1_ID)) @@ -191,8 +191,6 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { .thenReturn(USER_1); when(identifierRepository.save(any(Identifier.class))) .thenReturn(IDENTIFIER_1); - when(identifierIdxRepository.save(any(IdentifierDto.class))) - .thenReturn(IDENTIFIER_1_DTO); /* test */ @@ -200,36 +198,39 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { } @Test - public void create_existsSubset_fails() - throws DatabaseNotFoundException { + public void create_existsSubset_succeeds() throws DatabaseNotFoundException, UserNotFoundException, + QueryStoreException, DatabaseConnectionException, QueryNotFoundException, ImageNotSupportedException, + IdentifierAlreadyExistsException, IdentifierPublishingNotAllowedException, RemoteUnavailableException, + IdentifierNotFoundException, IdentifierRequestException, ViewNotFoundException { /* mock */ when(databaseService.find(DATABASE_2_ID)) .thenReturn(DATABASE_2); - when(identifierRepository.existsByDatabaseIdAndQueryIdAndType(DATABASE_2_ID, QUERY_2_ID, IdentifierType.SUBSET)) - .thenReturn(true); + when(storeService.findOne(IDENTIFIER_5_DATABASE_ID, IDENTIFIER_5_QUERY_ID, USER_1_PRINCIPAL)) + .thenReturn(QUERY_2); + when(identifierRepository.save(any(Identifier.class))) + .thenReturn(IDENTIFIER_5); /* test */ - assertThrows(IdentifierAlreadyExistsException.class, () -> { - identifierService.create(IDENTIFIER_2_DTO_REQUEST, USER_1_PRINCIPAL); - }); + identifierService.create(IDENTIFIER_5_DTO_REQUEST, USER_1_PRINCIPAL); } @Test - public void create_existsDatabase_fails() throws DatabaseNotFoundException { + public void create_existsDatabase_succeeds() throws DatabaseNotFoundException, IdentifierAlreadyExistsException, + UserNotFoundException, QueryStoreException, DatabaseConnectionException, QueryNotFoundException, + ImageNotSupportedException, IdentifierPublishingNotAllowedException, RemoteUnavailableException, + IdentifierNotFoundException, IdentifierRequestException, ViewNotFoundException { /* mock */ when(databaseService.find(DATABASE_1_ID)) .thenReturn(DATABASE_1); - when(identifierRepository.existsByDatabaseIdAndType(DATABASE_1_ID, IdentifierType.DATABASE)) - .thenReturn(true); + when(identifierRepository.save(any(Identifier.class))) + .thenReturn(IDENTIFIER_1); /* test */ - assertThrows(IdentifierAlreadyExistsException.class, () -> { - identifierService.create(IDENTIFIER_1_DTO_REQUEST, USER_1_PRINCIPAL); - }); + identifierService.create(IDENTIFIER_1_DTO_REQUEST, USER_1_PRINCIPAL); } @Test @@ -347,19 +348,13 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { } @Test - public void delete_succeeds() throws IdentifierNotFoundException { + public void delete_succeeds() throws IdentifierNotFoundException, DatabaseNotFoundException { /* mock */ when(identifierRepository.existsById(IDENTIFIER_1_ID)) .thenReturn(true); - when(identifierIdxRepository.existsById(IDENTIFIER_1_ID)) - .thenReturn(true); - doNothing() - .when(identifierRepository) - .delete(IDENTIFIER_1); - doNothing() - .when(identifierIdxRepository) - .deleteById(IDENTIFIER_1_ID); + when(identifierRepository.findById(IDENTIFIER_1_ID)) + .thenReturn(Optional.of(IDENTIFIER_1)); /* test */ identifierService.delete(IDENTIFIER_1_ID); @@ -410,12 +405,12 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { public void exportResource_database_fails() { /* mock */ - when(identifierRepository.findById(IDENTIFIER_4_ID)) - .thenReturn(Optional.of(IDENTIFIER_4)); + when(identifierRepository.findById(IDENTIFIER_7_ID)) + .thenReturn(Optional.of(IDENTIFIER_7)); /* test */ assertThrows(IdentifierRequestException.class, () -> { - identifierService.exportResource(IDENTIFIER_4_ID, USER_1_PRINCIPAL); + identifierService.exportResource(IDENTIFIER_7_ID, USER_1_PRINCIPAL); }); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java index d87c4aef51a902751a5aee720c2d383e92518221..92d0c06fbf2d6c112b6c4ca999cdb5d674f58f11 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java @@ -42,7 +42,7 @@ public class ImageServiceIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() { - imageRepository.save(IMAGE_1_SIMPLE); + imageRepository.save(IMAGE_1); } @Test diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java index 2e632909a0f065cbc351ce44f1ca578673ac9bdc..eaa6fc8bf9c21a020eec675d130059be3121cf19 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java @@ -158,8 +158,8 @@ public class ImageServiceUnitTest extends BaseUnitTest { public void delete_succeeds() throws ImageNotFoundException { /* mock */ - when(imageRepository.existsById(IMAGE_1_ID)) - .thenReturn(true); + when(imageRepository.findById(IMAGE_1_ID)) + .thenReturn(Optional.of(IMAGE_1)); doNothing() .when(imageRepository) .deleteById(IMAGE_1_ID); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java index 32a0e4479fa3af81b7c049dc849d362965ee7863..7a44e6c2bb2c7631504140ca2fefad447f340d78 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java @@ -51,13 +51,10 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest { private DatabaseRepository databaseRepository; @Autowired - private DatabaseAccessRepository databaseAccessRepository; + private UserRepository userRepository; @Autowired - private TableRepository tableRepository; - - @Autowired - private UserRepository userRepository; + private LicenseRepository licenseRepository; @Autowired private RabbitMqServiceImpl messageQueueService; @@ -81,12 +78,17 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() { + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + /* metadata database */ userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); imageRepository.save(IMAGE_1); + licenseRepository.save(LICENSE_1); containerRepository.save(CONTAINER_1); - databaseRepository.save(DATABASE_1_SIMPLE); - tableRepository.saveAll(List.of(TABLE_1, TABLE_2, TABLE_3, TABLE_7)); - DATABASE_1.setTables(List.of(TABLE_1, TABLE_2, TABLE_3, TABLE_7)); + DATABASE_1.setAccesses(List.of()); + databaseRepository.save(DATABASE_1); } @Test @@ -111,9 +113,6 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest { @Test public void updatePermissions_writeAll_succeeds() throws BrokerRemoteException, BrokerVirtualHostGrantException { - /* mock */ - databaseAccessRepository.save(DATABASE_1_USER_1_WRITE_ALL_ACCESS); - /* test */ final VirtualHostPermissionDto permissions = setVirtualHostPermissions_generic(); assertEquals(USER_1_USERNAME, permissions.getUser()); @@ -126,9 +125,6 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest { @Test public void updatePermissions_writeOwn_succeeds() throws BrokerRemoteException, BrokerVirtualHostGrantException { - /* mock */ - databaseAccessRepository.save(DATABASE_1_USER_1_WRITE_OWN_ACCESS); - /* test */ final VirtualHostPermissionDto permissions = setVirtualHostPermissions_generic(); assertEquals(USER_1_USERNAME, permissions.getUser()); @@ -139,11 +135,7 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest { } @Test - public void updatePermissions_read_succeeds() throws BrokerRemoteException, - BrokerVirtualHostGrantException { - - /* mock */ - databaseAccessRepository.save(DATABASE_1_USER_1_READ_ACCESS); + public void updatePermissions_read_succeeds() throws BrokerRemoteException, BrokerVirtualHostGrantException { /* test */ final VirtualHostPermissionDto permissions = setVirtualHostPermissions_generic(); @@ -170,10 +162,8 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest { @Test @Transactional(readOnly = true) - public void setTopicExchangePermissions_writeAll_succeeds() throws BrokerRemoteException, BrokerVirtualHostGrantException { - - /* mock */ - databaseAccessRepository.save(DATABASE_1_USER_1_WRITE_ALL_ACCESS); + public void setTopicExchangePermissions_writeAll_succeeds() throws BrokerRemoteException, + BrokerVirtualHostGrantException { /* test */ final TopicPermissionDto permissions = setTopicExchangePermissions_generic(List.of(DATABASE_1_USER_1_WRITE_ALL_ACCESS)); @@ -186,10 +176,8 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest { @Test @Transactional(readOnly = true) - public void setTopicExchangePermissions_writeOwn_succeeds() throws BrokerRemoteException, BrokerVirtualHostGrantException { - - /* mock */ - databaseAccessRepository.save(DATABASE_1_USER_1_WRITE_OWN_ACCESS); + public void setTopicExchangePermissions_writeOwn_succeeds() throws BrokerRemoteException, + BrokerVirtualHostGrantException { /* test */ final TopicPermissionDto permissions = setTopicExchangePermissions_generic(List.of(DATABASE_1_USER_1_WRITE_OWN_ACCESS)); @@ -202,10 +190,8 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest { @Test @Transactional(readOnly = true) - public void setTopicExchangePermissions_read_succeeds() throws BrokerRemoteException, BrokerVirtualHostGrantException { - - /* mock */ - databaseAccessRepository.save(DATABASE_1_USER_1_READ_ACCESS); + public void setTopicExchangePermissions_read_succeeds() throws BrokerRemoteException, + BrokerVirtualHostGrantException { /* test */ final TopicPermissionDto permissions = setTopicExchangePermissions_generic(List.of(DATABASE_1_USER_1_READ_ACCESS)); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java index a0db9562e36cfac4324ae77a875f04527b8894cb..0b53c41b0c8653ee239da81ac08296117c0f98ec 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java @@ -18,6 +18,8 @@ import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + import static org.junit.jupiter.api.Assertions.*; @Log4j2 @@ -51,12 +53,17 @@ public class MetadataServiceIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() { + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); /* metadata database */ - imageRepository.save(IMAGE_1_SIMPLE); + imageRepository.save(IMAGE_1); userRepository.save(USER_1); licenseRepository.save(LICENSE_1); containerRepository.save(CONTAINER_1); - databaseRepository.save(DATABASE_1_SIMPLE); + DATABASE_1.setAccesses(List.of()); + databaseRepository.save(DATABASE_1); identifierRepository.save(IDENTIFIER_1); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java index 74a2ee5ca9c47ac2ec3eb1d91c076033addc59c4..5da05bc8a4694d32970e6b500ef8d32267d96677 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java @@ -33,7 +33,7 @@ public class PersistenceIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() { - imageRepository.save(IMAGE_1_SIMPLE); + imageRepository.save(IMAGE_1); } @Test diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java index 9dcc1d92b3b8698b0d3d5878174bdbf7875928ff..bf20c618ecda14fd3a41564849cc5e60a6799939 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java @@ -9,16 +9,14 @@ import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.api.database.table.TableCsvDto; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; -import at.tuwien.config.MinioConfig; +import at.tuwien.config.S3Config; import at.tuwien.exception.*; import at.tuwien.gateway.DataDbSidecarGateway; import at.tuwien.querystore.Query; import at.tuwien.repository.mdb.*; import at.tuwien.service.impl.QueryServiceImpl; -import io.minio.MinioClient; import lombok.SneakyThrows; import lombok.extern.log4j.Log4j2; -import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.RandomStringUtils; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -37,8 +35,6 @@ import org.testcontainers.containers.MinIOContainer; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; -import java.io.File; -import java.io.FileNotFoundException; import java.io.IOException; import java.math.BigInteger; import java.sql.SQLException; @@ -54,7 +50,6 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.when; @Log4j2 @Testcontainers @@ -79,19 +74,13 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { private ContainerRepository containerRepository; @Autowired - private ViewRepository viewRepository; - - @Autowired - private TableRepository tableRepository; - - @Autowired - private TableColumnRepository tableColumnRepository; + private QueryServiceImpl queryService; @Autowired - private QueryServiceImpl queryService; + private S3Config s3Config; @Autowired - private MinioConfig minioConfig; + private LicenseRepository licenseRepository; @MockBean private DataDbSidecarGateway dataDbSidecarGateway; @@ -101,33 +90,35 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { @Container private static MinIOContainer minIOContainer = new MinIOContainer("minio/minio") - .withUserName("minioadmin") - .withPassword("minioadmin"); + .withUserName("seaweedfsadmin") + .withPassword("seaweedfsadmin"); @DynamicPropertySource static void openSearchProperties(DynamicPropertyRegistry registry) { - registry.add("fda.minio.endpoint", () -> minIOContainer.getS3URL()); + registry.add("fda.s3.endpoint", () -> minIOContainer.getS3URL()); } @BeforeEach public void beforeEach() throws SQLException { - MariaDbConfig.dropAllDatabases(CONTAINER_1); - MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_2); - MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + TABLE_5.setColumns(TABLE_5_COLUMNS); + TABLE_6.setColumns(TABLE_6_COLUMNS); + TABLE_7.setColumns(TABLE_7_COLUMNS); + DATABASE_1.setAccesses(List.of()); + DATABASE_2.setAccesses(List.of()); /* metadata database */ imageRepository.save(IMAGE_1); + licenseRepository.save(LICENSE_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); - containerRepository.saveAll(List.of(CONTAINER_1_SIMPLE, CONTAINER_2_SIMPLE)); - databaseRepository.saveAll(List.of(DATABASE_1_SIMPLE, DATABASE_2_SIMPLE)); - tableRepository.saveAll(List.of(TABLE_1_SIMPLE, TABLE_2_SIMPLE, TABLE_3_SIMPLE, TABLE_4_SIMPLE, TABLE_5_SIMPLE, TABLE_6_SIMPLE, TABLE_7_SIMPLE)); - tableColumnRepository.saveAll(TABLE_1_COLUMNS); - tableColumnRepository.saveAll(TABLE_2_COLUMNS); - tableColumnRepository.saveAll(TABLE_3_COLUMNS); - tableColumnRepository.saveAll(TABLE_4_COLUMNS); - tableColumnRepository.saveAll(TABLE_5_COLUMNS); - tableColumnRepository.saveAll(TABLE_6_COLUMNS); - tableColumnRepository.saveAll(TABLE_7_COLUMNS); - viewRepository.saveAll(List.of(VIEW_1, VIEW_2, VIEW_3, VIEW_4)); + containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2)); + databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2)); + /* mock */ + MariaDbConfig.dropAllDatabases(CONTAINER_1); + MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_2); + MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); } @Test @@ -139,27 +130,26 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { final QueryResultDto result = queryService.tableFindAll(DATABASE_1_ID, TABLE_1_ID, Instant.now(), null, null, USER_1_PRINCIPAL); assertEquals(3, result.getResult().size()); - assertEquals(BigInteger.valueOf(1L), result.getResult().get(0).get(COLUMN_1_1_INTERNAL_NAME)); - assertEquals(toInstant("2008-12-01"), result.getResult().get(0).get(COLUMN_1_2_INTERNAL_NAME)); - assertEquals("Albury", result.getResult().get(0).get(COLUMN_1_3_INTERNAL_NAME)); - assertEquals(13.4, result.getResult().get(0).get(COLUMN_1_4_INTERNAL_NAME)); - assertEquals(0.6, result.getResult().get(0).get(COLUMN_1_5_INTERNAL_NAME)); - assertEquals(BigInteger.valueOf(2L), result.getResult().get(1).get(COLUMN_1_1_INTERNAL_NAME)); - assertEquals(toInstant("2008-12-02"), result.getResult().get(1).get(COLUMN_1_2_INTERNAL_NAME)); - assertEquals("Albury", result.getResult().get(1).get(COLUMN_1_3_INTERNAL_NAME)); - assertEquals(7.4, result.getResult().get(1).get(COLUMN_1_4_INTERNAL_NAME)); - assertEquals(0.0, result.getResult().get(1).get(COLUMN_1_5_INTERNAL_NAME)); - assertEquals(BigInteger.valueOf(3L), result.getResult().get(2).get(COLUMN_1_1_INTERNAL_NAME)); - assertEquals(toInstant("2008-12-03"), result.getResult().get(2).get(COLUMN_1_2_INTERNAL_NAME)); - assertEquals("Albury", result.getResult().get(2).get(COLUMN_1_3_INTERNAL_NAME)); - assertEquals(12.9, result.getResult().get(2).get(COLUMN_1_4_INTERNAL_NAME)); - assertEquals(0.0, result.getResult().get(2).get(COLUMN_1_5_INTERNAL_NAME)); + assertEquals(BigInteger.valueOf(1L), result.getResult().get(0).get(TABLE_1_COLUMNS.get(0).getInternalName())); + assertEquals(toInstant("2008-12-01"), result.getResult().get(0).get(TABLE_1_COLUMNS.get(1).getInternalName())); + assertEquals("Albury", result.getResult().get(0).get(TABLE_1_COLUMNS.get(2).getInternalName())); + assertEquals(13.4, result.getResult().get(0).get(TABLE_1_COLUMNS.get(3).getInternalName())); + assertEquals(0.6, result.getResult().get(0).get(TABLE_1_COLUMNS.get(4).getInternalName())); + assertEquals(BigInteger.valueOf(2L), result.getResult().get(1).get(TABLE_1_COLUMNS.get(0).getInternalName())); + assertEquals(toInstant("2008-12-02"), result.getResult().get(1).get(TABLE_1_COLUMNS.get(1).getInternalName())); + assertEquals("Albury", result.getResult().get(1).get(TABLE_1_COLUMNS.get(2).getInternalName())); + assertEquals(7.4, result.getResult().get(1).get(TABLE_1_COLUMNS.get(3).getInternalName())); + assertEquals(0.0, result.getResult().get(1).get(TABLE_1_COLUMNS.get(4).getInternalName())); + assertEquals(BigInteger.valueOf(3L), result.getResult().get(2).get(TABLE_1_COLUMNS.get(0).getInternalName())); + assertEquals(toInstant("2008-12-03"), result.getResult().get(2).get(TABLE_1_COLUMNS.get(1).getInternalName())); + assertEquals("Albury", result.getResult().get(2).get(TABLE_1_COLUMNS.get(2).getInternalName())); + assertEquals(12.9, result.getResult().get(2).get(TABLE_1_COLUMNS.get(3).getInternalName())); + assertEquals(0.0, result.getResult().get(2).get(TABLE_1_COLUMNS.get(4).getInternalName())); } @Test - public void selectAll_succeeds() throws TableNotFoundException, DatabaseConnectionException, - DatabaseNotFoundException, ImageNotSupportedException, TableMalformedException, PaginationException, - QueryMalformedException, UserNotFoundException { + public void selectAll_succeeds() throws TableNotFoundException, DatabaseNotFoundException, + ImageNotSupportedException, TableMalformedException, QueryMalformedException { final Long page = 0L; final Long size = 10L; @@ -191,8 +181,8 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { } @Test - public void insert_date_succeeds() throws UserNotFoundException, TableNotFoundException, TableMalformedException, - DatabaseConnectionException, DatabaseNotFoundException, ImageNotSupportedException, SQLException { + public void insert_date_succeeds() throws TableNotFoundException, TableMalformedException, + DatabaseNotFoundException, SQLException { final TableCsvDto request = TableCsvDto.builder() .data(new HashMap<>() {{ put("id", 4L); @@ -212,8 +202,8 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { } @Test - public void insert_timestamp_succeeds() throws UserNotFoundException, TableNotFoundException, TableMalformedException, - DatabaseConnectionException, DatabaseNotFoundException, ImageNotSupportedException { + public void insert_timestamp_succeeds() throws TableNotFoundException, TableMalformedException, + DatabaseNotFoundException { final TableCsvDto request = TableCsvDto.builder() .data(new HashMap<>() {{ put("timestamp", "2023-02-10 12:15:20"); @@ -221,12 +211,12 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { }}).build(); /* test */ - queryService.insert(DATABASE_1_ID, TABLE_7_ID, request, USER_1_PRINCIPAL); + queryService.insert(DATABASE_1_ID, TABLE_4_ID, request, USER_1_PRINCIPAL); } @Test - public void insert_timestampMillis_succeeds() throws UserNotFoundException, TableNotFoundException, TableMalformedException, - DatabaseConnectionException, DatabaseNotFoundException, ImageNotSupportedException { + public void insert_timestampMillis_succeeds() throws TableNotFoundException, TableMalformedException, + DatabaseNotFoundException { final TableCsvDto request = TableCsvDto.builder() .data(new HashMap<>() {{ put("timestamp", "2023-02-10 12:15:20.613405"); @@ -234,12 +224,12 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { }}).build(); /* test */ - queryService.insert(DATABASE_1_ID, TABLE_7_ID, request, USER_1_PRINCIPAL); + queryService.insert(DATABASE_1_ID, TABLE_4_ID, request, USER_1_PRINCIPAL); } @Test - public void insert_withConstraints_succeeds() throws UserNotFoundException, TableNotFoundException, - TableMalformedException, DatabaseConnectionException, DatabaseNotFoundException, ImageNotSupportedException { + public void insert_withConstraints_succeeds() throws TableNotFoundException, TableMalformedException, + DatabaseNotFoundException { final TableCsvDto request = TableCsvDto.builder() .data(Map.of("id", 4L, "date", "2008-12-04", @@ -324,7 +314,7 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { public void execute_succeeds() throws DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, QueryMalformedException, UserNotFoundException, QueryStoreException, ColumnParseException, InterruptedException, KeycloakRemoteException, - AccessDeniedException { + AccessDeniedException, QueryNotFoundException { final ExecuteStatementDto request = ExecuteStatementDto.builder() .statement("SELECT n.`firstname`, n.`lastname`, n.`birth`, n.`reminder`, z.`animal_name`, z.`legs` FROM `likes` l JOIN `names` n ON l.`name_id` = n.`id` JOIN `mock_view` z ON z.`id` = l.`zoo_id`") .build(); @@ -363,7 +353,7 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { public void execute_withoutNullField_succeeds() throws DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, QueryMalformedException, UserNotFoundException, QueryStoreException, ColumnParseException, InterruptedException, KeycloakRemoteException, - AccessDeniedException { + AccessDeniedException, QueryNotFoundException { final ExecuteStatementDto request = ExecuteStatementDto.builder() .statement("SELECT `location`, `lng` FROM `weather_location` WHERE `lat` IS NULL") .build(); @@ -385,7 +375,8 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { @Test public void execute_withoutNullField2_succeeds() throws DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, QueryMalformedException, UserNotFoundException, - QueryStoreException, ColumnParseException, InterruptedException, KeycloakRemoteException, AccessDeniedException { + QueryStoreException, ColumnParseException, InterruptedException, KeycloakRemoteException, + AccessDeniedException, QueryNotFoundException { final ExecuteStatementDto request = ExecuteStatementDto.builder() .statement("SELECT `location` FROM `weather_location` WHERE `lat` IS NULL") .build(); @@ -408,7 +399,7 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { public void execute_withNullField_succeeds() throws DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, QueryMalformedException, UserNotFoundException, QueryStoreException, ColumnParseException, InterruptedException, KeycloakRemoteException, - AccessDeniedException { + AccessDeniedException, QueryNotFoundException { final ExecuteStatementDto request = ExecuteStatementDto.builder() .statement("SELECT `lat`, `lng` FROM `weather_location` WHERE `lat` IS NULL") .build(); @@ -426,7 +417,8 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { @Test public void execute_aliases_succeeds() throws DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, QueryMalformedException, UserNotFoundException, - QueryStoreException, ColumnParseException, InterruptedException, KeycloakRemoteException, AccessDeniedException { + QueryStoreException, ColumnParseException, InterruptedException, KeycloakRemoteException, + AccessDeniedException, QueryNotFoundException { final ExecuteStatementDto request = ExecuteStatementDto.builder() .statement("SELECT aus.location as a, loc.location from weather_aus aus, weather_location loc") .build(); @@ -463,7 +455,7 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { public void execute_aliasesWithDatabaseName_succeeds() throws DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, QueryMalformedException, UserNotFoundException, QueryStoreException, ColumnParseException, InterruptedException, KeycloakRemoteException, - AccessDeniedException { + AccessDeniedException, QueryNotFoundException { final ExecuteStatementDto request = ExecuteStatementDto.builder() .statement("SELECT aus.location as a, loc.location from weather.weather_aus aus, weather.weather_location loc") .build(); @@ -508,22 +500,22 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { final QueryResultDto response = queryService.viewFindAll(DATABASE_1_ID, VIEW_2, 0L, 10L, USER_1_PRINCIPAL); assertNotNull(response.getResult()); final List<Map<String, Object>> result = response.getResult(); + /* ordering */ + final String[] keys = result.get(0).keySet().toArray(new String[0]); + assertEquals("date", keys[0]); + assertEquals("rainfall", keys[1]); + assertEquals("location", keys[2]); + assertEquals("mintemp", keys[3]); /* values */ assertEquals(0.6, result.get(0).get("rainfall")); - assertEquals("Albury", result.get(0).get("loc")); + assertEquals("Albury", result.get(0).get("location")); assertEquals(13.4, result.get(0).get("mintemp")); assertEquals(0.0, result.get(1).get("rainfall")); - assertEquals("Albury", result.get(1).get("loc")); + assertEquals("Albury", result.get(1).get("location")); assertEquals(7.4, result.get(1).get("mintemp")); assertEquals(0.0, result.get(2).get("rainfall")); - assertEquals("Albury", result.get(2).get("loc")); + assertEquals("Albury", result.get(2).get("location")); assertEquals(12.9, result.get(2).get("mintemp")); - /* ordering */ - final String[] keys = result.get(0).keySet().toArray(new String[0]); - assertEquals("date", keys[0]); - assertEquals("loc", keys[1]); - assertEquals("rainfall", keys[2]); - assertEquals("mintemp", keys[3]); } @Test @@ -548,8 +540,8 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { doNothing() .when(dataDbSidecarGateway) .exportFile(anyString(), anyInt(), anyString()); - minioConfig.makeBuckets("dbrepo-upload", "dbrepo-download"); - minioConfig.uploadFile("dbrepo-download", "./src/test/resources/csv/testdata.csv", filename); + s3Config.makeBuckets("dbrepo-upload", "dbrepo-download"); + s3Config.uploadFile("dbrepo-download", "./src/test/resources/csv/testdata.csv", filename); /* test */ final ExportResource response = queryService.findOne(DATABASE_1_ID, QUERY_1_ID, USER_1_PRINCIPAL, filename); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java index f27920ea34929b9fdd26032e024a4d00f2f56866..2c3fb2be2665a86f3115c8816f02a8e1be3dd5b9 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java @@ -24,6 +24,7 @@ import org.testcontainers.junit.jupiter.Testcontainers; import java.sql.Connection; import java.sql.SQLException; +import java.util.List; @Log4j2 @Testcontainers @@ -37,6 +38,9 @@ public class QueryStoreServiceIntegrationTest extends BaseUnitTest { @Autowired private ContainerRepository containerRepository; + @Autowired + private LicenseRepository licenseRepository; + @Autowired private ImageRepository imageRepository; @@ -54,11 +58,17 @@ public class QueryStoreServiceIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() throws SQLException { + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + DATABASE_1.setAccesses(List.of()); /* metadata database */ imageRepository.save(IMAGE_1); + licenseRepository.save(LICENSE_1); userRepository.save(USER_1); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); + containerRepository.save(CONTAINER_1); + databaseRepository.save(DATABASE_1); MariaDbConfig.dropAllDatabases(CONTAINER_1); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/SemanticServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/SemanticServiceIntegrationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..b5746390c7abbae59b06636088af5955a68b2704 --- /dev/null +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/SemanticServiceIntegrationTest.java @@ -0,0 +1,130 @@ +package at.tuwien.service; + +import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; +import at.tuwien.entities.database.table.columns.TableColumnConcept; +import at.tuwien.entities.database.table.columns.TableColumnUnit; +import at.tuwien.exception.ConceptNotFoundException; +import at.tuwien.exception.UnitNotFoundException; +import at.tuwien.repository.mdb.*; +import lombok.extern.log4j.Log4j2; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +@Log4j2 +@SpringBootTest +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) +@ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch +public class SemanticServiceIntegrationTest extends BaseUnitTest { + + @Autowired + private ImageRepository imageRepository; + + @Autowired + private UserRepository userRepository; + + @Autowired + private ContainerRepository containerRepository; + + @Autowired + private DatabaseRepository databaseRepository; + + @Autowired + private LicenseRepository licenseRepository; + + @Autowired + private SemanticService semanticService; + + @BeforeEach + public void beforeEach() { + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + /* metadata database */ + imageRepository.save(IMAGE_1); + userRepository.save(USER_1); + licenseRepository.save(LICENSE_1); + containerRepository.save(CONTAINER_1); + DATABASE_1.setAccesses(List.of()); + databaseRepository.save(DATABASE_1); + } + + @Test + @Transactional + public void findAllConcepts_succeeds() { + + /* test */ + final List<TableColumnConcept> response = semanticService.findAllConcepts(); + assertEquals(1, response.size()); + assertTrue(response.stream().anyMatch(c -> c.getUri().equals(COLUMN_CONCEPT_PRECIPITATION_URI))); + assertFalse(response.stream().anyMatch(c -> c.getUri().equals(COLUMN_CONCEPT_FAIR_DATA_URI))); + } + + @Test + @Transactional + public void findAllUnits_succeeds() { + + /* test */ + final List<TableColumnUnit> response = semanticService.findAllUnits(); + assertEquals(1, response.size()); + assertTrue(response.stream().anyMatch(c -> c.getUri().equals(UNIT_MILLIMETRE_URI))); + assertFalse(response.stream().anyMatch(c -> c.getUri().equals(UNIT_TONNE_URI))); + } + + @Test + @Transactional + public void findUnit_succeeds() throws UnitNotFoundException { + + /* test */ + final TableColumnUnit response = semanticService.findUnit(UNIT_MILLIMETRE_URI); + assertEquals(UNIT_MILLIMETRE_URI, response.getUri()); + assertEquals(UNIT_MILLIMETRE_NAME, response.getName()); + assertEquals(UNIT_MILLIMETRE_DESCRIPTION, response.getDescription()); + } + + @Test + @Transactional + public void findUnit_fails() { + + /* test */ + assertThrows(UnitNotFoundException.class, () -> { + semanticService.findUnit("http://example.com/rdf"); + }); + } + + @Test + @Transactional + public void findConcept_succeeds() throws ConceptNotFoundException { + + /* test */ + final TableColumnConcept response = semanticService.findConcept(COLUMN_CONCEPT_PRECIPITATION_URI); + assertEquals(COLUMN_CONCEPT_PRECIPITATION_URI, response.getUri()); + assertEquals(COLUMN_CONCEPT_PRECIPITATION_NAME, response.getName()); + assertEquals(COLUMN_CONCEPT_PRECIPITATION_DESCRIPTION, response.getDescription()); + } + + @Test + @Transactional + public void findConcept_fails() { + + /* test */ + assertThrows(ConceptNotFoundException.class, () -> { + semanticService.findConcept("http://example.com/rdf"); + }); + } + +} diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java index 13012ab5bb0084d7f58bdc0d24b913ea9e3633dc..4b018666d9af542839e3b03578afdb553b7b13bf 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java @@ -43,9 +43,6 @@ import static org.junit.jupiter.api.Assertions.*; @MockOpensearch public class StoreServiceIntegrationModifyTest extends BaseUnitTest { - @Autowired - private TableRepository tableRepository; - @Autowired private DatabaseRepository databaseRepository; @@ -56,7 +53,7 @@ public class StoreServiceIntegrationModifyTest extends BaseUnitTest { private ContainerRepository containerRepository; @Autowired - private TableColumnRepository tableColumnRepository; + private LicenseRepository licenseRepository; @Autowired private StoreService storeService; @@ -78,18 +75,16 @@ public class StoreServiceIntegrationModifyTest extends BaseUnitTest { TABLE_2.setColumns(TABLE_2_COLUMNS); /* metadata database */ imageRepository.save(IMAGE_1); + licenseRepository.save(LICENSE_1); containerRepository.save(CONTAINER_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4, USER_5)); - databaseRepository.save(DATABASE_1_SIMPLE); - tableRepository.saveAll(List.of(TABLE_1_SIMPLE, TABLE_2_SIMPLE)); - tableColumnRepository.saveAll(TABLE_1_COLUMNS); - tableColumnRepository.saveAll(TABLE_2_COLUMNS); + databaseRepository.save(DATABASE_1); } @Test public void insert_same_succeeds() throws UserNotFoundException, QueryStoreException, DatabaseConnectionException, DatabaseNotFoundException, ImageNotSupportedException, SQLException, KeycloakRemoteException, - AccessDeniedException { + AccessDeniedException, QueryNotFoundException { final ExecuteStatementDto request = ExecuteStatementDto.builder() .statement(QUERY_2_STATEMENT) .build(); @@ -107,7 +102,8 @@ public class StoreServiceIntegrationModifyTest extends BaseUnitTest { @Test public void execute_different_succeeds() throws UserNotFoundException, QueryStoreException, DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, - QueryMalformedException, ColumnParseException, KeycloakRemoteException, AccessDeniedException { + QueryMalformedException, ColumnParseException, KeycloakRemoteException, AccessDeniedException, + QueryNotFoundException { final ExecuteStatementDto mock = ExecuteStatementDto.builder() .statement(QUERY_1_STATEMENT) .build(); @@ -124,9 +120,9 @@ public class StoreServiceIntegrationModifyTest extends BaseUnitTest { } @Test - public void execute_same_succeeds() throws UserNotFoundException, QueryStoreException, - DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, - QueryMalformedException, ColumnParseException, KeycloakRemoteException, AccessDeniedException { + public void execute_same_succeeds() throws UserNotFoundException, QueryStoreException, DatabaseConnectionException, + TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, QueryMalformedException, + ColumnParseException, KeycloakRemoteException, AccessDeniedException, QueryNotFoundException { final ExecuteStatementDto request = ExecuteStatementDto.builder() .statement(QUERY_1_STATEMENT) .build(); @@ -144,7 +140,7 @@ public class StoreServiceIntegrationModifyTest extends BaseUnitTest { public void execute_notPersisted_succeeds() throws UserNotFoundException, QueryStoreException, DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, QueryMalformedException, ColumnParseException, SQLException, KeycloakRemoteException, - AccessDeniedException { + AccessDeniedException, QueryNotFoundException { final ExecuteStatementDto request = ExecuteStatementDto.builder() .statement(QUERY_1_STATEMENT) .build(); @@ -159,7 +155,8 @@ public class StoreServiceIntegrationModifyTest extends BaseUnitTest { @Test public void execute_emptyResult_succeeds() throws UserNotFoundException, QueryStoreException, DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, - QueryMalformedException, ColumnParseException, KeycloakRemoteException, AccessDeniedException { + QueryMalformedException, ColumnParseException, KeycloakRemoteException, AccessDeniedException, + QueryNotFoundException { final ExecuteStatementDto request = ExecuteStatementDto.builder() .statement("SELECT `id`, `date`, `location`, `mintemp`, `rainfall` FROM `weather_aus` WHERE `location` = 'Vienna'") .build(); @@ -172,7 +169,8 @@ public class StoreServiceIntegrationModifyTest extends BaseUnitTest { @Test public void execute_emptyResultTwice_succeeds() throws UserNotFoundException, QueryStoreException, DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, - QueryMalformedException, ColumnParseException, KeycloakRemoteException, AccessDeniedException { + QueryMalformedException, ColumnParseException, KeycloakRemoteException, AccessDeniedException, + QueryNotFoundException { final ExecuteStatementDto request = ExecuteStatementDto.builder() .statement("SELECT `id`, `date`, `location`, `mintemp`, `rainfall` FROM `weather_aus` WHERE `location` = 'Vienna'") .build(); @@ -189,7 +187,7 @@ public class StoreServiceIntegrationModifyTest extends BaseUnitTest { public void execute_dataChangeSameQuery_succeeds() throws UserNotFoundException, QueryStoreException, DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, QueryMalformedException, ColumnParseException, SQLException, KeycloakRemoteException, - AccessDeniedException { + AccessDeniedException, QueryNotFoundException { final ExecuteStatementDto request = ExecuteStatementDto.builder() .statement(QUERY_1_STATEMENT) .build(); @@ -266,7 +264,7 @@ public class StoreServiceIntegrationModifyTest extends BaseUnitTest { @Test public void insert_timestamp_succeeds() throws UserNotFoundException, QueryStoreException, DatabaseConnectionException, DatabaseNotFoundException, ImageNotSupportedException, KeycloakRemoteException, - AccessDeniedException { + AccessDeniedException, QueryNotFoundException { final ExecuteStatementDto request = ExecuteStatementDto.builder() .statement(QUERY_1_STATEMENT) .timestamp(Instant.now().plus(1, ChronoUnit.SECONDS)) @@ -279,7 +277,7 @@ public class StoreServiceIntegrationModifyTest extends BaseUnitTest { @Test public void insert_anonymous_succeeds() throws UserNotFoundException, QueryStoreException, DatabaseConnectionException, DatabaseNotFoundException, ImageNotSupportedException, KeycloakRemoteException, - AccessDeniedException { + AccessDeniedException, QueryNotFoundException { final ExecuteStatementDto request = ExecuteStatementDto.builder() .statement(QUERY_1_STATEMENT) .build(); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationReadTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationReadTest.java index 5b7d42474025e8aae6c6e8f9fb28077e3d11eac3..aae9e492a7e888f433adc08c592d00c401c15592 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationReadTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationReadTest.java @@ -8,7 +8,6 @@ import at.tuwien.config.MariaDbContainerConfig; import at.tuwien.exception.*; import at.tuwien.querystore.Query; import at.tuwien.repository.mdb.DatabaseRepository; -import at.tuwien.repository.mdb.TableRepository; import lombok.extern.log4j.Log4j2; import org.apache.http.auth.BasicUserPrincipal; import org.junit.jupiter.api.BeforeAll; @@ -43,9 +42,6 @@ import static org.mockito.Mockito.when; @MockOpensearch public class StoreServiceIntegrationReadTest extends BaseUnitTest { - @MockBean - private TableRepository tableRepository; - @MockBean private DatabaseRepository databaseRepository; @@ -63,13 +59,6 @@ public class StoreServiceIntegrationReadTest extends BaseUnitTest { MariaDbConfig.insertQueryStore(DATABASE_1, QUERY_1, USER_1_USERNAME); } - @BeforeEach - public void beforeEach() { - /* metadata database */ - DATABASE_1.setTables(List.of(TABLE_1, TABLE_2, TABLE_3, TABLE_7)); - DATABASE_1.setViews(List.of(VIEW_3)); - } - @Test public void findAll_succeeds() throws UserNotFoundException, QueryStoreException, DatabaseConnectionException, DatabaseNotFoundException, ImageNotSupportedException, TableMalformedException, ContainerNotFoundException { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..21da3ad82178f5ae9f750106610b083f782db0ef --- /dev/null +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationTest.java @@ -0,0 +1,160 @@ +package at.tuwien.service; + +import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; +import at.tuwien.api.database.query.QueryPersistDto; +import at.tuwien.config.MariaDbConfig; +import at.tuwien.config.MariaDbContainerConfig; +import at.tuwien.exception.*; +import at.tuwien.querystore.Query; +import at.tuwien.repository.mdb.*; +import lombok.extern.log4j.Log4j2; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.testcontainers.containers.MariaDBContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.sql.SQLException; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +@Log4j2 +@Testcontainers +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) +@SpringBootTest +@ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch +public class StoreServiceIntegrationTest extends BaseUnitTest { + + @Autowired + private ContainerRepository containerRepository; + + @Autowired + private DatabaseRepository databaseRepository; + + @Autowired + private ImageRepository imageRepository; + + @Autowired + private LicenseRepository licenseRepository; + + @Autowired + private UserRepository userRepository; + + @Autowired + private StoreService storeService; + + @Container + private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer(); + + @BeforeEach + public void beforeEach() throws SQLException { + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + /* metadata database */ + imageRepository.save(IMAGE_1); + userRepository.save(USER_1); + licenseRepository.save(LICENSE_1); + containerRepository.save(CONTAINER_1); + DATABASE_1.setAccesses(List.of()); + databaseRepository.save(DATABASE_1); + /* data stuff */ + MariaDbConfig.dropAllDatabases(CONTAINER_1); + MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); + MariaDbConfig.insertQueryStore(DATABASE_1, QUERY_1, USER_1_USERNAME); + MariaDbConfig.insertQueryStore(DATABASE_1, QUERY_3, USER_1_USERNAME); + } + + @Test + public void findAll_succeeds() throws ContainerNotFoundException, UserNotFoundException, QueryStoreException, + DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, + ImageNotSupportedException { + + /* test */ + final List<Query> response = storeService.findAll(DATABASE_1_ID, null, USER_1_PRINCIPAL); + assertEquals(2, response.size()); + } + + @Test + public void findAll_onlyPersisted_succeeds() throws ContainerNotFoundException, UserNotFoundException, QueryStoreException, + DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, + ImageNotSupportedException { + + /* test */ + final List<Query> response = storeService.findAll(DATABASE_1_ID, true, USER_1_PRINCIPAL); + assertEquals(1, response.size()); + } + + @Test + public void findAll_onlyNotPersisted_succeeds() throws ContainerNotFoundException, UserNotFoundException, QueryStoreException, + DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, + ImageNotSupportedException { + + /* test */ + final List<Query> response = storeService.findAll(DATABASE_1_ID, false, USER_1_PRINCIPAL); + assertEquals(1, response.size()); + } + + @Test + public void findOne_succeeds() throws UserNotFoundException, QueryStoreException, DatabaseConnectionException, + DatabaseNotFoundException, ImageNotSupportedException, QueryNotFoundException { + + /* test */ + final Query response = storeService.findOne(DATABASE_1_ID, QUERY_1_ID, USER_1_PRINCIPAL); + assertNotNull(response); + } + + @Test + public void findOne_fails() { + + /* test */ + assertThrows(QueryNotFoundException.class, () -> { + storeService.findOne(DATABASE_1_ID, 9999L, USER_1_PRINCIPAL); + }); + } + + @Test + public void persist_succeeds() throws UserNotFoundException, QueryStoreException, DatabaseConnectionException, + DatabaseNotFoundException, ImageNotSupportedException, QueryNotFoundException { + final QueryPersistDto request = QueryPersistDto.builder() + .persist(true) + .build(); + + /* precondition */ + final Query query3 = storeService.findOne(DATABASE_1_ID, QUERY_1_ID, USER_1_PRINCIPAL); + assertFalse(query3.getIsPersisted()); + + /* test */ + final Query response = storeService.persist(DATABASE_1_ID, QUERY_1_ID, request); + assertNotNull(response); + assertTrue(response.getIsPersisted()); + } + + @Test + public void persist_unchanged_succeeds() throws UserNotFoundException, QueryStoreException, DatabaseConnectionException, + DatabaseNotFoundException, ImageNotSupportedException, QueryNotFoundException { + final QueryPersistDto request = QueryPersistDto.builder() + .persist(false) // <<<<<<< + .build(); + + /* precondition */ + final Query query3 = storeService.findOne(DATABASE_1_ID, QUERY_1_ID, USER_1_PRINCIPAL); + assertFalse(query3.getIsPersisted()); + + /* test */ + final Query response = storeService.persist(DATABASE_1_ID, QUERY_1_ID, request); + assertNotNull(response); + assertFalse(response.getIsPersisted()); + } +} diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java index 17b54ee71a59560bf59de877a4e5eede3f5dd0a3..c123797552a670fa1c4b9bacbbba72f41b56c5d6 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java @@ -19,6 +19,7 @@ import org.springframework.security.test.context.support.WithAnonymousUser; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.transaction.annotation.Transactional; import org.testcontainers.containers.MariaDBContainer; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; @@ -39,10 +40,10 @@ import static org.junit.jupiter.api.Assertions.assertThrows; public class TableServiceIntegrationReadTest extends BaseUnitTest { @Autowired - private TableRepository tableRepository; + private ImageRepository imageRepository; @Autowired - private ImageRepository imageRepository; + private LicenseRepository licenseRepository; @Autowired private ContainerRepository containerRepository; @@ -61,20 +62,23 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { @BeforeEach public void beforeEach() throws SQLException { + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + DATABASE_1.setAccesses(List.of()); + /* metadata database */ imageRepository.save(IMAGE_1); + licenseRepository.save(LICENSE_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); - containerRepository.save(CONTAINER_1_SIMPLE); - containerRepository.save(CONTAINER_2_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); - tableRepository.save(TABLE_1_SIMPLE); - tableRepository.save(TABLE_2_SIMPLE); - tableRepository.save(TABLE_3_SIMPLE); - tableRepository.save(TABLE_7_SIMPLE); + containerRepository.save(CONTAINER_1); + databaseRepository.save(DATABASE_1); MariaDbConfig.dropAllDatabases(CONTAINER_1); MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); } @Test + @Transactional(readOnly = true) public void findAll_succeeds() throws DatabaseNotFoundException { /* test */ @@ -95,7 +99,7 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { public void findById_succeeds() throws TableNotFoundException, DatabaseNotFoundException{ /* test */ - final Table response = tableService.findById(DATABASE_1_ID, TABLE_1_ID); + final Table response = tableService.find(DATABASE_1_ID, TABLE_1_ID); assertEquals(TABLE_1_ID, response.getId()); assertEquals(TABLE_1_NAME, response.getName()); assertEquals(TABLE_1_INTERNALNAME, response.getInternalName()); @@ -106,7 +110,7 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { /* test */ assertThrows(TableNotFoundException.class, () -> { - tableService.findById(DATABASE_1_ID, 99999L); + tableService.find(DATABASE_1_ID, 99999L); }); } @@ -115,7 +119,7 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { /* test */ assertThrows(DatabaseNotFoundException.class, () -> { - tableService.findById(99999L, TABLE_3_ID); + tableService.find(99999L, TABLE_3_ID); }); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java index cf4f5f86edb5f5f0b0f963174d647255ff9c3678..fd19d92df0b74fc5ed329bc4954311243a48576a 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java @@ -4,19 +4,20 @@ import at.tuwien.BaseUnitTest; import at.tuwien.annotations.MockAmqp; import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.table.TableCreateDto; -import at.tuwien.api.database.table.TableDto; import at.tuwien.api.database.table.columns.ColumnCreateDto; import at.tuwien.api.database.table.columns.ColumnTypeDto; +import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; import at.tuwien.api.database.table.constraints.ConstraintsCreateDto; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; import at.tuwien.entities.database.table.Table; import at.tuwien.entities.database.table.columns.TableColumn; +import at.tuwien.entities.database.table.columns.TableColumnConcept; +import at.tuwien.entities.identifier.Identifier; +import at.tuwien.entities.identifier.IdentifierType; import at.tuwien.exception.*; import at.tuwien.mapper.TableMapper; import at.tuwien.repository.mdb.*; -import at.tuwien.repository.sdb.TableColumnIdxRepository; -import at.tuwien.repository.sdb.TableIdxRepository; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -25,9 +26,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.transaction.annotation.Transactional; import org.testcontainers.containers.MariaDBContainer; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; @@ -40,9 +41,6 @@ import java.util.regex.Pattern; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyList; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.when; @Log4j2 @Testcontainers @@ -54,12 +52,6 @@ import static org.mockito.Mockito.when; @MockOpensearch public class TableServiceIntegrationWriteTest extends BaseUnitTest { - @MockBean - private TableIdxRepository tableidxRepository; - - @MockBean - private TableColumnIdxRepository tableColumnidxRepository; - @Autowired private ImageRepository imageRepository; @@ -70,7 +62,10 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest { private DatabaseRepository databaseRepository; @Autowired - private TableRepository tableRepository; + private LicenseRepository licenseRepository; + + @Autowired + private IdentifierRepository identifierRepository; @Autowired private TableService tableService; @@ -86,56 +81,60 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest { @BeforeEach public void beforeEach() throws SQLException { - MariaDbConfig.dropAllDatabases(CONTAINER_1); - MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); - /* metadata database */ - imageRepository.save(IMAGE_1); - userRepository.save(USER_1); - userRepository.save(USER_2); - containerRepository.save(CONTAINER_1_SIMPLE); - containerRepository.save(CONTAINER_2_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); - tableRepository.save(TABLE_1_SIMPLE); - tableRepository.save(TABLE_2_SIMPLE); - /* missing pointers */ + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_1_FOREIGN_KEY_1.setReferences(List.of(TABLE_1_FOREIGN_KEY_REFERENCE)); TABLE_1.setConstraints(TABLE_1_CONSTRAINTS); + TABLE_2.setColumns(TABLE_2_COLUMNS); TABLE_2.setConstraints(TABLE_2_CONSTRAINTS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_3.setConstraints(TABLE_3_CONSTRAINTS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + DATABASE_1.setAccesses(List.of()); + TABLE_1.setDatabase(DATABASE_1); + TABLE_2.setDatabase(DATABASE_1); + TABLE_3.setDatabase(DATABASE_1); + TABLE_4.setDatabase(DATABASE_1); + /* metadata database */ + imageRepository.save(IMAGE_1); + licenseRepository.save(LICENSE_1); + userRepository.saveAll(List.of(USER_1, USER_2)); + containerRepository.save(CONTAINER_1); + databaseRepository.save(DATABASE_1); + /* data stuff */ + MariaDbConfig.dropAllDatabases(CONTAINER_1); + MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); } @Test public void create_succeeds() throws UserNotFoundException, TableMalformedException, QueryMalformedException, DatabaseNotFoundException, ImageNotSupportedException, TableNameExistsException, - ContainerNotFoundException { - - /* mock */ - when(tableidxRepository.save(any(TableDto.class))) - .thenReturn(null); - when(tableColumnidxRepository.saveAll(anyList())) - .thenReturn(List.of()); + ContainerNotFoundException, TableNotFoundException { + final TableCreateDto request = TableCreateDto.builder() + .name("Hello Table") + .description(TABLE_3_DESCRIPTION) + .columns(List.of()) + .constraints(TABLE_3_CONSTRAINTS_CREATE_DTO) + .build(); /* test */ - tableService.createTable(DATABASE_1_ID, TABLE_3_CREATE_DTO, USER_1_PRINCIPAL); + final Table response = tableService.createTable(DATABASE_1_ID, request, USER_1_PRINCIPAL); + assertNotNull(response.getId()); } @Test public void create_withConstraints_succeeds() throws UserNotFoundException, TableMalformedException, QueryMalformedException, DatabaseNotFoundException, ImageNotSupportedException, TableNameExistsException, - ContainerNotFoundException, SQLException { - - /* mock */ - when(tableidxRepository.save(any(TableDto.class))) - .thenReturn(null); - when(tableColumnidxRepository.saveAll(anyList())) - .thenReturn(List.of()); + ContainerNotFoundException, SQLException, TableNotFoundException { /* test */ - tableService.createTable(DATABASE_1_ID, TABLE_4_CREATE_DTO, USER_1_PRINCIPAL); // table to reference - assertTrue(MariaDbConfig.tableExists(DATABASE_1, TABLE_4_INTERNALNAME)); - final Table response = tableService.createTable(DATABASE_1_ID, TABLE_5_CREATE_DTO, USER_1_PRINCIPAL); + tableService.createTable(DATABASE_1_ID, TABLE_5_CREATE_DTO, USER_1_PRINCIPAL); // table to reference assertTrue(MariaDbConfig.tableExists(DATABASE_1, TABLE_5_INTERNALNAME)); - assertEquals(TABLE_5_NAME, response.getName()); - assertEquals(TABLE_5_INTERNALNAME, response.getInternalName()); - assertEquals(TABLE_5_DESCRIPTION, response.getDescription()); + final Table response = tableService.createTable(DATABASE_1_ID, TABLE_6_CREATE_DTO, USER_1_PRINCIPAL); + assertTrue(MariaDbConfig.tableExists(DATABASE_1, TABLE_6_INTERNALNAME)); + assertNotNull(response.getId()); + assertEquals(TABLE_6_NAME, response.getName()); + assertEquals(TABLE_6_INTERNALNAME, response.getInternalName()); + assertEquals(TABLE_6_DESCRIPTION, response.getDescription()); } @Test @@ -158,7 +157,7 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest { .type(ColumnTypeDto.CHAR) .nullAllowed(true) .primaryKey(false) - .size(50) + .size(50L) .build(), ColumnCreateDto.builder() .name("col2a") @@ -171,7 +170,7 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest { .type(ColumnTypeDto.VARCHAR) .nullAllowed(true) .primaryKey(false) - .size(1024) + .size(1024L) .build(), ColumnCreateDto.builder() .name("col3") @@ -184,7 +183,7 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest { .type(ColumnTypeDto.VARBINARY) .nullAllowed(true) .primaryKey(false) - .size(200) + .size(200L) .build(), ColumnCreateDto.builder() .name("col5") @@ -344,14 +343,9 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest { .build())) .build(); - /* mock */ - when(tableidxRepository.save(any(TableDto.class))) - .thenReturn(null); - when(tableColumnidxRepository.saveAll(anyList())) - .thenReturn(List.of()); - /* test */ final Table response = tableService.createTable(DATABASE_1_ID, request, USER_1_PRINCIPAL); + assertNotNull(response.getId()); assertEquals("full", response.getInternalName()); assertEquals("full example", response.getDescription()); assertEquals(32, response.getColumns().size()); @@ -399,62 +393,59 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest { } } - private String getType(Object type) { - final Pattern pattern = Pattern.compile("^([a-z]+)"); - final Matcher matcher = pattern.matcher(String.valueOf(type)); - if (!matcher.find()) { - log.error("Failed to extract type"); - return null; - } - return matcher.group(); - } - - private Integer getLength(Object type) { - final Pattern pattern = Pattern.compile("\\(([0-9]+)\\)"); - final Matcher matcher = pattern.matcher(String.valueOf(type)); - if (!matcher.find()) { - log.error("Failed to extract length"); - return null; - } - final String raw = matcher.group(); - return Integer.valueOf(raw.substring(1, raw.length() - 1)); - } - @Test public void create_withForeignKeyButWithoutReferencingTable_fails() { /* test */ - assertThrows(TableMalformedException.class, () -> { - tableService.createTable(DATABASE_1_ID, TABLE_5_CREATE_DTO, USER_1_PRINCIPAL); + assertThrows(QueryMalformedException.class, () -> { + tableService.createTable(DATABASE_1_ID, TABLE_6_CREATE_DTO, USER_1_PRINCIPAL); }); } @Test - public void delete_succeeds() throws TableMalformedException, QueryMalformedException, DatabaseNotFoundException, - ImageNotSupportedException, ContainerNotFoundException, TableNotFoundException, DataProcessingException { + @Transactional + public void update_succeeds() throws TableNotFoundException, SemanticEntityPersistException, + TableMalformedException, QueryMalformedException, DatabaseNotFoundException, + SemanticEntityNotFoundException, ContainerNotFoundException { + final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() + .conceptUri(COLUMN_CONCEPT_PRECIPITATION_URI) + .build(); + + /* test */ + final TableColumn response = tableService.update(DATABASE_1_ID, TABLE_1_ID, TABLE_1_COLUMNS.get(0).getId(), + request, "abc"); + assertNotNull(response.getConcept()); + final TableColumnConcept concept = response.getConcept(); + assertEquals(COLUMN_CONCEPT_PRECIPITATION_URI, concept.getUri()); + } - /* mock */ - doNothing() - .when(tableidxRepository) - .delete(any(TableDto.class)); + @Test + @Transactional + public void delete_succeeds() throws TableNotFoundException, TableMalformedException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException { /* test */ tableService.deleteTable(DATABASE_1_ID, TABLE_1_ID); - assertTrue(databaseRepository.findById(TABLE_1_DATABASE_ID).isPresent()); } @Test - public void delete_notFound_fails() { - - /* mock */ - doNothing() - .when(tableidxRepository) - .delete(any(TableDto.class)); + @Transactional + public void delete_hasIdentifier_succeeds() throws TableNotFoundException, TableMalformedException, + QueryMalformedException, DatabaseNotFoundException, ImageNotSupportedException { /* test */ - assertThrows(TableNotFoundException.class, () -> { - tableService.deleteTable(DATABASE_1_ID, 9999L); - }); + tableService.deleteTable(DATABASE_1_ID, TABLE_4_ID); + } + + private Long getLength(Object type) { + final Pattern pattern = Pattern.compile("\\(([0-9]+)\\)"); + final Matcher matcher = pattern.matcher(String.valueOf(type)); + if (!matcher.find()) { + log.error("Failed to extract length"); + return null; + } + final String raw = matcher.group(); + return Long.valueOf(raw.substring(1, raw.length() - 1)); } } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java index a051dd2dbfab922f306b5c0c9b0b401e21ee79a8..e64c3f09c03ac8536784b135c0d1dc747198a534 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java @@ -6,7 +6,7 @@ import at.tuwien.annotations.MockOpensearch; import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.exception.DatabaseNotFoundException; import at.tuwien.exception.TableNotFoundException; -import at.tuwien.repository.mdb.TableRepository; +import at.tuwien.repository.mdb.DatabaseRepository; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -34,12 +34,12 @@ import static org.mockito.Mockito.when; @MockOpensearch public class TableServiceUnitTest extends BaseUnitTest { + @MockBean + private DatabaseRepository databaseRepository; + @Autowired private TableService tableService; - @MockBean - private TableRepository tableRepository; - @BeforeEach public void beforeEach() { TABLE_8.setColumns(TABLE_8_COLUMNS); @@ -49,8 +49,8 @@ public class TableServiceUnitTest extends BaseUnitTest { public void findAll_succeeds() throws TableNotFoundException, DatabaseNotFoundException { /* mock */ - when(tableRepository.find(DATABASE_3_ID, TABLE_8_ID)) - .thenReturn(Optional.of(TABLE_8)); + when(databaseRepository.findById(DATABASE_3_ID)) + .thenReturn(Optional.of(DATABASE_3)); /* test */ final List<TableColumn> response = tableService.find(DATABASE_3_ID, TABLE_8_ID) diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java index c5660860ded2c91c65ff500e3a912c1b7d588724..476123cde6fd79024b5a5b5114c43f37bc89a430 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java @@ -3,8 +3,6 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; import at.tuwien.annotations.MockAmqp; import at.tuwien.annotations.MockOpensearch; -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.api.user.UserDto; import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.gateway.KeycloakGateway; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java index 68525e6729e4852eb4016f5e6a066acbcf8fa1f2..7d30bca6dee18252be67715972679b9845d015c8 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java @@ -50,23 +50,17 @@ public class ViewServiceIntegrationTest extends BaseUnitTest { private DatabaseRepository databaseRepository; @Autowired - private ImageRepository imageRepository; + private LicenseRepository licenseRepository; @Autowired - private ContainerRepository containerRepository; + private ImageRepository imageRepository; @Autowired - private ViewRepository viewRepository; + private ContainerRepository containerRepository; @Autowired private UserRepository userRepository; - @Autowired - private TableRepository tableRepository; - - @Autowired - private TableColumnRepository tableColumnRepository; - @Autowired private ViewService viewService; @@ -96,20 +90,21 @@ public class ViewServiceIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() { + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + TABLE_5.setColumns(TABLE_5_COLUMNS); + TABLE_6.setColumns(TABLE_6_COLUMNS); + TABLE_7.setColumns(TABLE_7_COLUMNS); + DATABASE_1.setAccesses(List.of()); + DATABASE_2.setAccesses(List.of()); /* metadata database */ imageRepository.save(IMAGE_1); + licenseRepository.save(LICENSE_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); - containerRepository.saveAll(List.of(CONTAINER_1_SIMPLE, CONTAINER_2_SIMPLE)); - databaseRepository.saveAll(List.of(DATABASE_1_SIMPLE, DATABASE_2_SIMPLE)); - tableRepository.saveAll(List.of(TABLE_1_SIMPLE, TABLE_2_SIMPLE, TABLE_3_SIMPLE, TABLE_4_SIMPLE, TABLE_5_SIMPLE, TABLE_6_SIMPLE, TABLE_7_SIMPLE)); - tableColumnRepository.saveAll(TABLE_1_COLUMNS); - tableColumnRepository.saveAll(TABLE_2_COLUMNS); - tableColumnRepository.saveAll(TABLE_3_COLUMNS); - tableColumnRepository.saveAll(TABLE_4_COLUMNS); - tableColumnRepository.saveAll(TABLE_5_COLUMNS); - tableColumnRepository.saveAll(TABLE_6_COLUMNS); - tableColumnRepository.saveAll(TABLE_7_COLUMNS); - viewRepository.saveAll(List.of(VIEW_1, VIEW_2, VIEW_3, VIEW_4)); + containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2)); + databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2)); } @Test diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceIntegrationTest.java index d29f53845a291cf7737c431b936aff629cf02ae2..40c9e988e3e3ab84a2ba1e2d3b700b780a1d023b 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceIntegrationTest.java @@ -49,21 +49,15 @@ public class ViewServicePersistenceIntegrationTest extends BaseUnitTest { @Autowired private ContainerRepository containerRepository; - @Autowired - private ViewRepository viewRepository; - - @Autowired - private TableRepository tableRepository; - - @Autowired - private TableColumnRepository tableColumnRepository; - @Autowired private ViewService viewService; @Autowired private UserRepository userRepository; + @Autowired + private LicenseRepository licenseRepository; + @Container private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer(); @@ -75,20 +69,26 @@ public class ViewServicePersistenceIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() { + TABLE_1.setDatabase(DATABASE_1); + TABLE_2.setDatabase(DATABASE_1); + TABLE_3.setDatabase(DATABASE_1); + TABLE_4.setDatabase(DATABASE_1); + VIEW_1.setDatabase(DATABASE_1); + VIEW_2.setDatabase(DATABASE_1); + VIEW_3.setDatabase(DATABASE_1); + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_3.setColumns(TABLE_3_COLUMNS); + TABLE_4.setColumns(TABLE_4_COLUMNS); + TABLE_5.setColumns(TABLE_5_COLUMNS); + TABLE_6.setColumns(TABLE_6_COLUMNS); + TABLE_7.setColumns(TABLE_7_COLUMNS); /* metadata database */ imageRepository.save(IMAGE_1); + licenseRepository.save(LICENSE_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); - containerRepository.saveAll(List.of(CONTAINER_1_SIMPLE, CONTAINER_2_SIMPLE)); - databaseRepository.saveAll(List.of(DATABASE_1_SIMPLE, DATABASE_2_SIMPLE)); - tableRepository.saveAll(List.of(TABLE_1_SIMPLE, TABLE_2_SIMPLE, TABLE_3_SIMPLE, TABLE_4_SIMPLE, TABLE_5_SIMPLE, TABLE_6_SIMPLE, TABLE_7_SIMPLE)); - tableColumnRepository.saveAll(TABLE_1_COLUMNS); - tableColumnRepository.saveAll(TABLE_2_COLUMNS); - tableColumnRepository.saveAll(TABLE_3_COLUMNS); - tableColumnRepository.saveAll(TABLE_4_COLUMNS); - tableColumnRepository.saveAll(TABLE_5_COLUMNS); - tableColumnRepository.saveAll(TABLE_6_COLUMNS); - tableColumnRepository.saveAll(TABLE_7_COLUMNS); - viewRepository.saveAll(List.of(VIEW_1, VIEW_2, VIEW_3, VIEW_4)); + containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2)); + databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2)); } @Test @@ -111,12 +111,7 @@ public class ViewServicePersistenceIntegrationTest extends BaseUnitTest { @Test @Transactional - public void findById_succeeds() throws UserNotFoundException, ViewNotFoundException { - - /* mock */ - tableRepository.save(TABLE_2_SIMPLE); - tableColumnRepository.saveAll(TABLE_2_COLUMNS); - viewRepository.save(VIEW_1); + public void findById_succeeds() throws UserNotFoundException, ViewNotFoundException, DatabaseNotFoundException { /* test */ final View response = viewService.findById(DATABASE_1_ID, VIEW_1_ID, USER_1_PRINCIPAL); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/validator/EndpointValidatorUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/validator/EndpointValidatorUnitTest.java index 91398cd01393a07ba64c1ebbaf3637351a3fcf8f..162b05a4e02eac8f2e15e412ab86fd75ca22ad8e 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/validator/EndpointValidatorUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/validator/EndpointValidatorUnitTest.java @@ -4,14 +4,10 @@ import at.tuwien.BaseUnitTest; import at.tuwien.SortType; import at.tuwien.annotations.MockAmqp; import at.tuwien.annotations.MockOpensearch; -import at.tuwien.api.database.AccessTypeDto; import at.tuwien.api.database.table.TableCreateDto; import at.tuwien.api.database.table.columns.ColumnCreateDto; import at.tuwien.api.database.table.columns.ColumnTypeDto; -import at.tuwien.entities.database.AccessType; import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.entities.identifier.VisibilityType; import at.tuwien.exception.*; import at.tuwien.repository.mdb.IdentifierRepository; import at.tuwien.service.AccessService; @@ -19,6 +15,7 @@ import at.tuwien.service.DatabaseService; import at.tuwien.service.TableService; import at.tuwien.validation.EndpointValidator; import lombok.extern.log4j.Log4j2; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; @@ -30,7 +27,6 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.List; -import java.util.Optional; import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -88,6 +84,11 @@ public class EndpointValidatorUnitTest extends BaseUnitTest { ); } + @BeforeEach + public void beforeEach() { + DATABASE_1.setAccesses(List.of(DATABASE_1_USER_1_READ_ACCESS)); + } + @Test public void validateDataParams_succeeds() throws PaginationException { @@ -254,57 +255,6 @@ public class EndpointValidatorUnitTest extends BaseUnitTest { endpointValidator.validateOnlyAccessOrPublic(DATABASE_1_ID, USER_1_PRINCIPAL); } - @Test - public void validateOnlyAccessOrPublic2_privateAnonymousHasPublicIdentifier_succeeds() throws DatabaseNotFoundException, - NotAllowedException, AccessDeniedException { - - /* mock */ - when(databaseService.find(DATABASE_1_ID)) - .thenReturn(DATABASE_1); - when(identifierRepository.findSubsetIdentifier(DATABASE_1_ID, QUERY_1_ID)) - .thenReturn(Optional.of(IDENTIFIER_1)); - - /* test */ - endpointValidator.validateOnlyAccessOrPublic(DATABASE_1_ID, QUERY_1_ID, null); - } - - @Test - public void validateOnlyAccessOrPublic2_privateAnonymousHasSelfIdentifier_fails() throws DatabaseNotFoundException { - final Identifier identifier = Identifier.builder() - .visibility(VisibilityType.SELF) - .createdBy(USER_1_ID) - .build(); - - /* mock */ - when(databaseService.find(DATABASE_1_ID)) - .thenReturn(DATABASE_1); - when(identifierRepository.findSubsetIdentifier(DATABASE_1_ID, QUERY_1_ID)) - .thenReturn(Optional.of(identifier)); - - /* test */ - assertThrows(NotAllowedException.class, () -> { - endpointValidator.validateOnlyAccessOrPublic(DATABASE_1_ID, QUERY_1_ID, null); - }); - } - - @Test - public void validateOnlyAccessOrPublic2_privateCreatorHasSelfIdentifier_succeeds() throws DatabaseNotFoundException, - NotAllowedException, AccessDeniedException { - final Identifier identifier = Identifier.builder() - .visibility(VisibilityType.SELF) - .createdBy(USER_1_ID) - .build(); - - /* mock */ - when(databaseService.find(DATABASE_1_ID)) - .thenReturn(DATABASE_1); - when(identifierRepository.findSubsetIdentifier(DATABASE_1_ID, QUERY_1_ID)) - .thenReturn(Optional.of(identifier)); - - /* test */ - endpointValidator.validateOnlyAccessOrPublic(DATABASE_1_ID, QUERY_1_ID, USER_1_PRINCIPAL); - } - @Test public void validateOnlyWriteOwnOrWriteAllAccess_privateAnonymous_fails() { @@ -392,7 +342,7 @@ public class EndpointValidatorUnitTest extends BaseUnitTest { final TableCreateDto request = TableCreateDto.builder() .columns(List.of(ColumnCreateDto.builder() .type(type) - .size(10) + .size(10L) .d(null) // <<<<<<< .build())) .build(); @@ -472,11 +422,11 @@ public class EndpointValidatorUnitTest extends BaseUnitTest { } @Test - public void validateOnlyOwnerOrWriteAll_onlyReadAccess_fails() throws TableNotFoundException, - DatabaseNotFoundException, AccessDeniedException { + public void validateOnlyOwnerOrWriteAll_onlyReadAccess_fails() throws DatabaseNotFoundException, + TableNotFoundException, AccessDeniedException { /* mock */ - when(tableService.findById(DATABASE_1_ID, TABLE_1_ID)) + when(tableService.find(DATABASE_1_ID, TABLE_1_ID)) .thenReturn(TABLE_1); when(accessService.find(DATABASE_1_ID, USER_1_ID)) .thenReturn(DATABASE_1_USER_1_READ_ACCESS); diff --git a/dbrepo-metadata-service/rest-service/src/test/resources/application.properties b/dbrepo-metadata-service/rest-service/src/test/resources/application.properties index cc1a895c65c7189221a4e062dcfdb20370b6e5fb..0b6850a3e4f42d2547eb1fa123c7ed6089bbab05 100644 --- a/dbrepo-metadata-service/rest-service/src/test/resources/application.properties +++ b/dbrepo-metadata-service/rest-service/src/test/resources/application.properties @@ -16,8 +16,7 @@ spring.jpa.hibernate.ddl-auto=create # logging logging.level.root=error -logging.level.at.tuwien.=debug -logging.level.at.tuwien.mapper.=trace +logging.level.at.tuwien.=info # rabbitmq spring.rabbitmq.host=localhost diff --git a/dbrepo-metadata-service/rest-service/src/test/resources/init/querystore.sql b/dbrepo-metadata-service/rest-service/src/test/resources/init/querystore.sql new file mode 100644 index 0000000000000000000000000000000000000000..a9042e9c08a66a07233fdb02cc42f52e74632793 --- /dev/null +++ b/dbrepo-metadata-service/rest-service/src/test/resources/init/querystore.sql @@ -0,0 +1,5 @@ +CREATE SEQUENCE `qs_queries_seq` NOCACHE; +CREATE TABLE `qs_queries` ( `id` bigint not null primary key default nextval(`qs_queries_seq`), `created` datetime not null default now(), `executed` datetime not null default now(), `created_by` varchar(255) not null, `query` text not null, `query_normalized` text not null, `is_persisted` boolean not null, `query_hash` varchar(255) not null, `result_hash` varchar(255), `result_number` bigint ); +CREATE PROCEDURE hash_table(IN name VARCHAR(255), OUT hash VARCHAR(255), OUT count BIGINT) BEGIN DECLARE _sql TEXT; SELECT CONCAT('SELECT SHA2(GROUP_CONCAT(CONCAT_WS(\'\',', GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name), ') SEPARATOR \',\'), 256) AS hash, COUNT(*) AS count FROM `', name, '` INTO @hash, @count;') FROM `information_schema`.`columns` WHERE `table_schema` = DATABASE() AND `table_name` = name INTO _sql; PREPARE stmt FROM _sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET hash = @hash; SET count = @count; END; +CREATE PROCEDURE store_query(IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) BEGIN DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); DECLARE _username varchar(255) DEFAULT REGEXP_REPLACE(current_user(), '@.*', ''); DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash, @count); IF @hash IS NULL THEN INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); ELSE INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; END; +CREATE DEFINER = 'root' PROCEDURE _store_query(IN _username VARCHAR(255), IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) BEGIN DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash, @count); IF @hash IS NULL THEN INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); ELSE INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; END; \ No newline at end of file diff --git a/dbrepo-metadata-service/rest-service/src/test/resources/init/weather.sql b/dbrepo-metadata-service/rest-service/src/test/resources/init/weather.sql index 6c1b14187daafdbe0022548c445e86688ea9f5d3..76f78ed34a0e64da912440d18ea61f3fef2595c7 100644 --- a/dbrepo-metadata-service/rest-service/src/test/resources/init/weather.sql +++ b/dbrepo-metadata-service/rest-service/src/test/resources/init/weather.sql @@ -1,6 +1,8 @@ /* https://www.kaggle.com/jsphyg/weather-dataset-rattle-package */ -CREATE DATABASE weather; -USE weather; +CREATE +DATABASE weather; +USE +weather; CREATE TABLE weather_location ( @@ -9,11 +11,19 @@ CREATE TABLE weather_location lng DOUBLE PRECISION NULL ) WITH SYSTEM VERSIONING; +CREATE VIEW `hs_weather_location` AS +SELECT * +FROM (SELECT ROW_START AS inserted_at, IF(ROW_END > NOW(), NULL, ROW_END) AS deleted_at, COUNT(*) as total + FROM `weather_location` FOR SYSTEM_TIME ALL + GROUP BY inserted_at, deleted_at + ORDER BY deleted_at DESC LIMIT 50) AS v +ORDER BY v.inserted_at, v.deleted_at ASC; + CREATE TABLE weather_aus ( - id BIGINT NOT NULL PRIMARY KEY, - `date` DATE NOT NULL, - location VARCHAR(255) NULL, + id BIGINT NOT NULL PRIMARY KEY, + `date` DATE NOT NULL, + location VARCHAR(255) NULL, mintemp DOUBLE PRECISION NULL, rainfall DOUBLE PRECISION NULL, FOREIGN KEY (location) REFERENCES weather_location (location), @@ -21,12 +31,69 @@ CREATE TABLE weather_aus CHECK (`mintemp` > 0) ) WITH SYSTEM VERSIONING; +CREATE VIEW `hs_weather_aus` AS +SELECT * +FROM (SELECT ROW_START AS inserted_at, IF(ROW_END > NOW(), NULL, ROW_END) AS deleted_at, COUNT(*) as total + FROM `weather_aus` FOR SYSTEM_TIME ALL + GROUP BY inserted_at, deleted_at + ORDER BY deleted_at DESC LIMIT 50) AS v +ORDER BY v.inserted_at, v.deleted_at ASC; + CREATE TABLE sensor ( `timestamp` TIMESTAMP NOT NULL PRIMARY KEY, `value` DECIMAL ) WITH SYSTEM VERSIONING; +CREATE VIEW `hs_sensor` AS +SELECT * +FROM (SELECT ROW_START AS inserted_at, IF(ROW_END > NOW(), NULL, ROW_END) AS deleted_at, COUNT(*) as total + FROM `sensor` FOR SYSTEM_TIME ALL + GROUP BY inserted_at, deleted_at + ORDER BY deleted_at DESC LIMIT 50) AS v +ORDER BY v.inserted_at, v.deleted_at ASC; + +-- sequence not in metadata on purpose +CREATE SEQUENCE weather_aut_seq NOCACHE; + +-- table not in metadata on purpose +CREATE TABLE weather_aut +( + id BIGINT NOT NULL PRIMARY KEY default nextval(`weather_aut_seq`), + `date` DATE NOT NULL, + location VARCHAR(255) NULL, + mintemp DOUBLE PRECISION NULL, + rainfall DOUBLE PRECISION NULL, + FOREIGN KEY (location) REFERENCES weather_location (location), + UNIQUE (`date`), + CHECK (`mintemp` > 0) +) WITH SYSTEM VERSIONING; + +-- no history view in data database on purpose + +-- table not in metadata on purpose +CREATE TABLE weather_aut_without_versioning +( + id BIGINT NOT NULL PRIMARY KEY, + `date` DATE NOT NULL, + location VARCHAR(255) NULL, + mintemp DOUBLE PRECISION NULL, + rainfall DOUBLE PRECISION NULL, + FOREIGN KEY (location) REFERENCES weather_location (location), + UNIQUE (`date`), + CHECK (`mintemp` > 0) +); + +-- no history view in data database on purpose + +-- view not in metadata on purpose +CREATE VIEW weather_aut_merge AS +( +SELECT id, `date` +FROM `weather_aut` v +WHERE NOT EXISTS (SELECT `id` FROM weather_aut_without_versioning vv WHERE vv.id = v.id) + ); + INSERT INTO weather_location (location, lat, lng) VALUES ('Albury', -36.0653583, 146.9112214), ('Sydney', -33.847927, 150.6517942), @@ -55,11 +122,9 @@ select `date`, `location`, `mintemp`, `rainfall` from `weather_aus` where `location` = 'Albury'); -CREATE VIEW `hs_weather_aus` AS -SELECT * -FROM (SELECT `id`, ROW_START AS inserted_at, IF(ROW_END > NOW(), NULL, ROW_END) AS deleted_at, COUNT(*) as total - FROM `weather_aus` FOR SYSTEM_TIME ALL - GROUP BY inserted_at, deleted_at - ORDER BY deleted_at DESC - LIMIT 50) AS v -ORDER BY v.inserted_at, v.deleted_at ASC; +CREATE VIEW junit3 AS +( +select w.`mintemp`, w.`rainfall`, w.`location`, m.`date` +from `weather_aus` w + join `junit2` m on m.`location` = w.`location` and m.`date` = w.`date` + ) \ No newline at end of file diff --git a/dbrepo-metadata-service/rest-service/src/test/resources/json/metadata0.json b/dbrepo-metadata-service/rest-service/src/test/resources/json/metadata0.json index d223099bf388927f1d61f68b507a1af728309222..3d557e3201e6a9bd8cbcb5fee0946110331b390e 100644 --- a/dbrepo-metadata-service/rest-service/src/test/resources/json/metadata0.json +++ b/dbrepo-metadata-service/rest-service/src/test/resources/json/metadata0.json @@ -1,13 +1,5 @@ { - "id": 4, - "database": { - "id": 4, - "name": "Weather AT", - "exchange_name": "dbrepo.weather_at", - "internal_name": "weather_at", - "description": "Weather data", - "is_public": true - }, + "id": 7, "type": "database", "titles": [], "descriptions": [], @@ -17,7 +9,20 @@ "publication_month": 7, "publication_year": 2022, "licenses": [], - "creators": [], + "creators": [ + { + "id": 1, + "firstname": "Max", + "lastname": "Mustermann", + "creator_name": "Mustermann, Max", + "name_type": "Personal", + "affiliation": "TU Graz", + "affiliation_identifier": "https://ror.org/04wn28048", + "affiliation_identifier_scheme": "ROR", + "name_identifier": "00000-00000-00000", + "name_identifier_scheme": "ORCID" + } + ], "created": "2022-01-07T20:45:52.000+00:00", "last_modified": "2018-11-07T10:59:12.000+00:00" } \ No newline at end of file diff --git a/dbrepo-metadata-service/rest-service/src/test/resources/json/metadata1.json b/dbrepo-metadata-service/rest-service/src/test/resources/json/metadata1.json index b39d4b586071808e08eccb6149db1117e43b08c8..63b43d09f57d426fcc02c15ce1af032a69760a18 100644 --- a/dbrepo-metadata-service/rest-service/src/test/resources/json/metadata1.json +++ b/dbrepo-metadata-service/rest-service/src/test/resources/json/metadata1.json @@ -1,13 +1,5 @@ { "id": 1, - "database": { - "id": 1, - "name": "Weather", - "exchange_name": "dbrepo.weather", - "internal_name": "weather", - "description": "Weather in Australia", - "is_public": false - }, "query_id": 1, "type": "subset", "titles": [ diff --git a/dbrepo-metadata-service/rest-service/src/test/resources/rdf/om-2.0.rdf b/dbrepo-metadata-service/rest-service/src/test/resources/rdf/om-2.0.rdf new file mode 100644 index 0000000000000000000000000000000000000000..cf8e4678481d3af48218ead4f3248c56318e2892 --- /dev/null +++ b/dbrepo-metadata-service/rest-service/src/test/resources/rdf/om-2.0.rdf @@ -0,0 +1,42890 @@ +<?xml version="1.0"?> + + <!-- Ontology of units of Measure (OM) --> + + <!-- Version 2.0 --> + + <!-- (c) 2005-2023 Hajo Rijgersberg, Don Willems, Jan Top, Wageningen University and Research Centre, The Netherlands. This document is available under Creative Common License, version 4.0. You are free to Share — to copy, distribute, display, and perform the work and to Remix — to make derivative works; under the condition of Attribution: You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). The publisher does not accept any liability for the inaccuracies in this document. --> + + <!DOCTYPE rdf:RDF [ + <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#"> + <!ENTITY owl "http://www.w3.org/2002/07/owl#" > + <!ENTITY dc "http://purl.org/dc/elements/1.1/"> + <!ENTITY dct "http://purl.org/dc/terms/"> + <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#"> + <!-- <!ENTITY om "http://www.wurvoc.org/vocabularies/om-2.0/"> --> + <!-- <!ENTITY om "http://www.ontology-of-units-of-measure.org/vocabularies/om-2/"> --> + <!ENTITY om "http://www.ontology-of-units-of-measure.org/resource/om-2/"> + <!ENTITY wv "http://www.wurvoc.org/vocabularies/WV/"> + <!ENTITY skos "http://www.w3.org/2004/02/skos/core#"> + <!ENTITY bibo "http://purl.org/ontology/bibo/"> + <!ENTITY foaf "http://xmlns.com/foaf/0.1/"> + <!-- <!ENTITY ombibo "http://www.wurvoc.org/bibliography/om-2.0/"> --> + <!ENTITY ombibo "http://www.wurvoc.org/bibliography/om-2/"> + ]> + + <rdf:RDF + xmlns:rdf="&rdf;" + xmlns:owl="&owl;" + xmlns:dc="&dc;" + xmlns:dct="&dct;" + xmlns:xsd="&xsd;" + xmlns:wv="&wv;" + xmlns:rdfs="&rdfs;" + xmlns:om="&om;" + xmlns:skos="&skos;" + xmlns:bibo="&bibo;" + xmlns:foaf="&foaf;" + xmlns:ombibo="&ombibo;" + xmlns="&om;" + xml:base="&om;" + > + + <owl:Ontology rdf:about="http://www.ontology-of-units-of-measure.org/resource/om-2"> + <rdfs:label xml:lang="en">Ontology of units of Measure (OM)</rdfs:label> + <rdfs:label xml:lang="nl">Ontologie van Maateenheden (OM)</rdfs:label> + <rdfs:label xml:lang="ja">測定単位のオントロジー (OM)</rdfs:label> + <owl:versionInfo xml:lang="en">2.0.50</owl:versionInfo> + <!-- <dc:identifier>http://www.wurvoc.org/vocabularies/om-2.0/</dc:identifier> --> + <dc:identifier>http://www.ontology-of-units-of-measure.org/vocabularies/om-2/</dc:identifier> + <dc:date>2023/10/10</dc:date> + <rdfs:comment xml:lang="en">The Ontology of units of Measure (OM) 2.0 models concepts and relations important to scientific research. It has a strong focus on units, quantities, measurements, and dimensions.</rdfs:comment> + <rdfs:comment xml:lang="ja">測定単位のオントロジー (Ontology of units of Measure; OM) は,科学技術にとって重要な概念及び関係をモデル化する。OMは,単位・量・測定・次元に特に焦点を当てている。</rdfs:comment> + <wv:logo>http://www.wurvoc.org/images/vocabularies/om-logo.jpg</wv:logo> + <wv:illustration>http://www.wurvoc.org/images/vocabularies/om-illustration.jpg</wv:illustration> + <dc:creator xml:lang="en">Hajo Rijgersberg, Don Willems, Jan Top</dc:creator> + <!-- <dc:license xml:lang="en">This document is available under Creative Common License, version 4.0. You are free to Share — to copy, distribute, display, and perform the work and to Remix — to make derivative works; under the condition of Attribution: You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). The publisher does not accept any liability for the inaccuracies in this document.</dc:license> --> + <dct:license rdf:resource="https://creativecommons.org/licenses/by/4.0/"/> + <ombibo:reference rdf:resource="http://www.openisbn.com/isbn/9789462280618/"/> + </owl:Ontology> + + <!-- Contents --> + + <!-- Upper Ontology --> + <!-- Geometry Ontology --> + <!-- Mechanics Ontology --> + <!-- Thermodynamics Ontology --> + <!-- Electromagnetism Ontology --> + <!-- Fluid Mechanics Ontology --> + <!-- Fluid Mechanics Dimensionless Numbers Ontology --> + <!-- Chemical Physics Ontology --> + <!-- Chemistry Ontology --> + <!-- Photometry Ontology --> + <!-- Radiometry and Radiobiology Ontology --> + <!-- Nuclear Physics Ontology --> + <!-- Astronomy and Astrophysics Ontology --> + <!-- Cosmology Ontology --> + <!-- Earth Science Ontology --> + <!-- Materials Science Ontology --> + <!-- Microbiology Ontology --> + <!-- Acoustics Ontology --> + <!-- Sustainability Ontology --> + <!-- Economics Ontology --> + <!-- Information Technology Ontology --> + <!-- Typography Ontology --> + <!-- Shipping Ontology --> + <!-- Common Application Area Ontology --> + <!-- Food Engineering Ontology --> + <!-- Post-Harvest Technology Ontology --> + <!-- Dynamics of Texture and Taste Ontology --> + <!-- Packaging Recycling Ontology --> + <!-- Bibliography --> + + <!-- Upper Ontology --> + + <!-- Contents --> + + <!-- Quantity Upper Ontology --> + <!-- Unit of Measure Upper Ontology --> + <!-- Prefix Upper Ontology --> + <!-- Measure Upper Ontology --> + <!-- Measurement Scale Upper Ontology --> + <!-- Dimension Upper Ontology --> + <!-- System of Units Upper Ontology --> + <!-- Application Area Upper Ontology --> + <!-- LaTeX specific properties Upper Ontology --> + + <owl:AnnotationProperty rdf:about="&om;alternativeLabel"> + <rdfs:label xml:lang="en">alternative label</rdfs:label> + <rdfs:label xml:lang="ja">標識の別名</rdfs:label> + <!-- <om:alternativeLabel xml:lang="en">has alternative label</om:alternativeLabel> --> + <!-- <rdfs:range rdf:resource="&xsd;string"/> --> + </owl:AnnotationProperty> + + <owl:AnnotationProperty rdf:about="&om;longcomment"> + <rdfs:label xml:lang="en">longcomment</rdfs:label> + <rdfs:label xml:lang="ja">詳細な注釈</rdfs:label> + <om:alternativeLabel xml:lang="en">long comment</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">has longcomment</om:alternativeLabel> + <om:alternativeLabel xml:lang="ja">詳細な注釈がある</om:alternativeLabel> + <!-- <rdfs:range rdf:resource="&xsd;string"/> --> + </owl:AnnotationProperty> + + <owl:AnnotationProperty rdf:about="&om;symbol"> + <rdfs:label xml:lang="en">symbol</rdfs:label> + <rdfs:label xml:lang="ja">記号</rdfs:label> + <om:alternativeLabel xml:lang="en">has symbol</om:alternativeLabel> + <om:alternativeLabel xml:lang="ja">記号を持つ</om:alternativeLabel> + <!-- <rdfs:range rdf:resource="&xsd;string"/> --> + </owl:AnnotationProperty> + + <owl:AnnotationProperty rdf:about="&om;alternativeSymbol"> + <rdfs:label xml:lang="en">alternative symbol</rdfs:label> + <rdfs:label xml:lang="ja">別の記号</rdfs:label> + <om:alternativeLabel xml:lang="en">has alternative symbol</om:alternativeLabel> + <om:alternativeLabel xml:lang="ja">別の記号を持つ</om:alternativeLabel> + <!-- <rdfs:range rdf:resource="&xsd;string"/> --> + </owl:AnnotationProperty> + + <owl:AnnotationProperty rdf:about="&om;abbreviation"> + <rdfs:label xml:lang="en">abbreviation</rdfs:label> + <rdfs:label xml:lang="ja">略記</rdfs:label> + <om:alternativeLabel xml:lang="en">has abbreviation</om:alternativeLabel> + <om:alternativeLabel xml:lang="ja">略記がある</om:alternativeLabel> + <!-- <rdfs:domain rdf:resource="&om;SystemOfUnits"/> --> + <!-- <rdfs:range rdf:resource="&xsd;string"/> --> + </owl:AnnotationProperty> + + <owl:AnnotationProperty rdf:about="&skos;hiddenLabel"/> + + <owl:AnnotationProperty rdf:about="&om;unofficialLabel"> + <rdfs:label xml:lang="en">unofficial label</rdfs:label> + <rdfs:label xml:lang="ja">非公式な記号</rdfs:label> + <om:alternativeLabel xml:lang="en">has unofficial label</om:alternativeLabel> + <om:alternativeLabel xml:lang="ja">非公式な記号を持つ</om:alternativeLabel> + <rdfs:comment>Used to specify labels that are used in e.g. every day speech but are not defined in any standard.</rdfs:comment> + <rdfs:subPropertyOf rdf:resource="&skos;hiddenLabel"/> + <!-- <rdfs:range rdf:resource="&xsd;string"/> --> + </owl:AnnotationProperty> + + <owl:AnnotationProperty rdf:about="&om;unofficialAbbreviation"> + <rdfs:label xml:lang="en">unofficial abbreviation</rdfs:label> + <rdfs:label xml:lang="ja">非公式な略記</rdfs:label> + <om:alternativeLabel xml:lang="en">has unofficial abbreviation</om:alternativeLabel> + <om:alternativeLabel xml:lang="ja">非公式な略記がある</om:alternativeLabel> + <rdfs:comment>Used to specify abbreviations that are used in e.g. every day speech but are not defined in any standard.</rdfs:comment> + <rdfs:subPropertyOf rdf:resource="&skos;hiddenLabel"/> + <!-- <rdfs:range rdf:resource="&xsd;string"/> --> + </owl:AnnotationProperty> + + <owl:AnnotationProperty rdf:about="&dc;creator"/> + + <owl:AnnotationProperty rdf:about="&dc;identifier"/> + + <owl:AnnotationProperty rdf:about="&dc;date"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/dc/elements/1.1/isPartOf"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/dc/elements/1.1/publisher"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/dc/elements/1.1/subject"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/dc/elements/1.1/title"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/dc/terms/license"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/ontology/bibo/authorList"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/ontology/bibo/chapter"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/ontology/bibo/degree"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/ontology/bibo/edition"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/ontology/bibo/isbn10"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/ontology/bibo/isbn13"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/ontology/bibo/issuer"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/ontology/bibo/pageEnd"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/ontology/bibo/pageStart"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/ontology/bibo/reproducedIn"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/ontology/bibo/shortTitle"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/ontology/bibo/uri"/> + + <owl:AnnotationProperty rdf:about="http://purl.org/ontology/bibo/volume"/> + + <owl:AnnotationProperty rdf:about="http://xmlns.com/foaf/0.1/based_near"/> + + <owl:AnnotationProperty rdf:about="http://xmlns.com/foaf/0.1/name"/> + + <owl:Class rdf:about="http://purl.org/ontology/bibo/Article"/> + + <owl:Class rdf:about="http://purl.org/ontology/bibo/Book"/> + + <owl:Class rdf:about="http://purl.org/ontology/bibo/BookSection"/> + + <owl:Class rdf:about="http://purl.org/ontology/bibo/Chapter"/> + + <owl:Class rdf:about="http://purl.org/ontology/bibo/Document"/> + + <owl:Class rdf:about="http://purl.org/ontology/bibo/Journal"/> + + <owl:Class rdf:about="http://purl.org/ontology/bibo/Standard"/> + + <owl:Class rdf:about="http://purl.org/ontology/bibo/Thesis"/> + + <owl:Class rdf:about="http://xmlns.com/foaf/0.1/Organization"/> + + <owl:Class rdf:about="http://xmlns.com/foaf/0.1/Person"/> + + <owl:AnnotationProperty rdf:about="&wv;logo"/> + + <owl:AnnotationProperty rdf:about="&wv;illustration"/> + + <!-- Quantity Upper Ontology --> + + <owl:Class rdf:about="&om;Quantity"> + <rdfs:label xml:lang="en">quantity</rdfs:label> + <rdfs:label xml:lang="ja">量</rdfs:label> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <rdfs:comment xml:lang="ja">量とは,ある現象(例: 星・分子・食品)の定量化できる(標準化された)性質(例: 長さ・質量・時間)の表現である。量は(暗黙の)計量的類似性に従って分離される。例: 机の長さ及び椅子の長さは双方とも長さに分類される。</rdfs:comment> + <!-- <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/> --> + <!-- <rdfs:subClassOf rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"/> --> + </owl:Class> + + <owl:ObjectProperty rdf:about="&om;hasPhenomenon"> + <rdfs:label xml:lang="en">has phenomenon</rdfs:label> + <rdfs:label xml:lang="ja">現象がある</rdfs:label> + <rdfs:domain rdf:resource="&om;Quantity"/> + <!-- <rdf:type rdf:resource="&owl;FunctionalProperty"/> --> + </owl:ObjectProperty> + + <owl:ObjectProperty rdf:about="&om;hasContext"> + <rdfs:label xml:lang="en">has context</rdfs:label> + <rdfs:label xml:lang="ja">文脈を持つ</rdfs:label> + <rdfs:domain rdf:resource="&om;Quantity"/> + <!-- <rdf:type rdf:resource="&owl;FunctionalProperty"/> --> + </owl:ObjectProperty> + + <owl:ObjectProperty rdf:about="&om;hasValue"> + <rdfs:label xml:lang="en">has value</rdfs:label> + <rdfs:label xml:lang="ja">値を持つ</rdfs:label> + <rdfs:domain rdf:resource="&om;Quantity"/> + <rdfs:range> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class rdf:about="&om;Measure"/> + <owl:Class rdf:about="&om;Point"/> + </owl:unionOf> + </owl:Class> + </rdfs:range> + </owl:ObjectProperty> + + <owl:ObjectProperty rdf:about="&om;commonlyHasUnit"> + <rdfs:label xml:lang="en">commonly has unit</rdfs:label> + <rdfs:label xml:lang="ja">通常は単位を持つ</rdfs:label> + <om:alternativeLabel xml:lang="en">commonly has unit of measure</om:alternativeLabel> + <om:alternativeLabel xml:lang="ja">通常は測定単位を持つ</om:alternativeLabel> + <rdfs:comment>This property indicates a commonly-used unit.</rdfs:comment> + <rdfs:domain rdf:resource="&om;Quantity"/> + <rdfs:range rdf:resource="&om;Unit"/> + </owl:ObjectProperty> + + <owl:ObjectProperty rdf:about="&om;hasAggregateFunction"> + <rdfs:label xml:lang="en">has aggregate function</rdfs:label> + <rdfs:label xml:lang="ja">集計関数を持つ</rdfs:label> + <rdfs:domain rdf:resource="&om;Quantity"/> + <rdfs:range rdf:resource="&om;Function"/> + </owl:ObjectProperty> + + <owl:Class rdf:about="&om;Function"> + <rdfs:label xml:lang="en">function</rdfs:label> + <rdfs:label xml:lang="ja">関数</rdfs:label> + </owl:Class> + + <om:Function rdf:about="&om;first"> + <rdfs:label xml:lang="en">first</rdfs:label> + <rdfs:label xml:lang="ja">最初</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;last"> + <rdfs:label xml:lang="en">last</rdfs:label> + <rdfs:label xml:lang="ja">最後</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;minimum"> + <rdfs:label xml:lang="en">minimum</rdfs:label> + <rdfs:label xml:lang="ja">最小</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;maximum"> + <rdfs:label xml:lang="en">maximum</rdfs:label> + <rdfs:label xml:lang="ja">最大</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;sum"> + <rdfs:label xml:lang="en">sum</rdfs:label> + <rdfs:label xml:lang="ja">合計</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;average"> + <rdfs:label xml:lang="en">average</rdfs:label> + <rdfs:label xml:lang="ja">平均</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;count"> + <rdfs:label xml:lang="en">count</rdfs:label> + <rdfs:label xml:lang="ja">回数</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;standardDeviation"> + <rdfs:label xml:lang="en">standard deviation</rdfs:label> + <rdfs:label xml:lang="ja">標準偏差</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;product"> + <rdfs:label xml:lang="en">product</rdfs:label> + <rdfs:label xml:lang="ja">積</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;median"> + <rdfs:label xml:lang="en">median</rdfs:label> + <om:alternativeLabel xml:lang="en">50th percentile</om:alternativeLabel> + </om:Function> + + <om:Function rdf:about="&om;10thPercentile"> + <rdfs:label xml:lang="en">10th percentile</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;20thPercentile"> + <rdfs:label xml:lang="en">20th percentile</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;25thPercentile"> + <rdfs:label xml:lang="en">25th percentile</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;30thPercentile"> + <rdfs:label xml:lang="en">30th percentile</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;40thPercentile"> + <rdfs:label xml:lang="en">40th percentile</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;60thPercentile"> + <rdfs:label xml:lang="en">60th percentile</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;70thPercentile"> + <rdfs:label xml:lang="en">70th percentile</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;75thPercentile"> + <rdfs:label xml:lang="en">th percentile</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;80thPercentile"> + <rdfs:label xml:lang="en">80th percentile</rdfs:label> + </om:Function> + + <om:Function rdf:about="&om;90thPercentile"> + <rdfs:label xml:lang="en">90th percentile</rdfs:label> + </om:Function> + + <owl:ObjectProperty rdf:about="&om;hasQuantity"> + <rdfs:label xml:lang="en">has quantity</rdfs:label> + <rdfs:label xml:lang="ja">量を持つ</rdfs:label> + <rdfs:domain> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class rdf:about="&om;SingularUnit"/> + <owl:Class rdf:about="&om;FixedPoint"/> + </owl:unionOf> + </owl:Class> + </rdfs:domain> + <rdfs:range rdf:resource="&om;Quantity"/> + </owl:ObjectProperty> + + <!-- Unit of Measure Upper Ontology --> + + <owl:Class rdf:about="&om;Unit"> + <rdfs:label xml:lang="en">unit</rdfs:label> + <rdfs:label xml:lang="ja">単位</rdfs:label> + <om:alternativeLabel xml:lang="en">unit of measure</om:alternativeLabel> + <om:alternativeLabel xml:lang="ja">測定単位</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">unit of measurement</om:alternativeLabel> + <om:alternativeLabel xml:lang="ja">測定の単位</om:alternativeLabel> + <rdfs:comment xml:lang="en">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".</rdfs:comment> + <rdfs:comment xml:lang="ja">測定単位とは,量の確定的な大きさであり,慣例又は法律によって定義し採用されている。同じ量の測定の標準として用いられ,他の如何なる量の値も当該単位の単純な倍数として表わせる。例えば,長さも量である; メートルは長さの単位であり,確定的な所定の長さを表している。10メートル(又は10 m)とは,「メートル」と呼ばれる確定的な所定の長さの10倍を,実際に意味している。</rdfs:comment> + </owl:Class> + + <owl:Class rdf:about="&om;PrefixedUnit"> + <rdfs:label xml:lang="en">prefixed unit</rdfs:label> + <rdfs:label xml:lang="ja">補助単位</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom rdf:resource="&om;SingularUnit"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:ObjectProperty rdf:about="&om;hasUnit"> + <rdfs:label xml:lang="en">has unit</rdfs:label> + <rdfs:label xml:lang="ja">単位を持つ</rdfs:label> + <rdfs:domain> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class rdf:about="&om;PrefixedUnit"/> + <owl:Class rdf:about="&om;UnitMultiple"/> + <owl:Class rdf:about="&om;SingularUnit"/> + <owl:Class rdf:about="&om;IntervalScale"/> + <owl:Class rdf:about="&om;RatioScale"/> + <owl:Class rdf:about="&om;Measure"/> + </owl:unionOf> + </owl:Class> + </rdfs:domain> + <rdfs:range rdf:resource="&om;Unit"/> + <rdf:type rdf:resource="&owl;FunctionalProperty"/> + </owl:ObjectProperty> + + <owl:ObjectProperty rdf:about="&om;hasPrefix"> + <rdfs:label xml:lang="en">has prefix</rdfs:label> + <rdfs:label xml:lang="ja">補助単位を持つ</rdfs:label> + <rdfs:domain rdf:resource="&om;PrefixedUnit"/> + <rdfs:range rdf:resource="&om;Prefix"/> + <rdf:type rdf:resource="&owl;FunctionalProperty"/> + </owl:ObjectProperty> + + <!-- <owl:ObjectProperty rdf:about="&om;hasSingularUnit"> --> + <!-- <rdfs:label xml:lang="en">has singular unit</rdfs:label> --> + <!-- <rdfs:domain rdf:resource="&om;PrefixedUnit"/> --> + <!-- <rdfs:range rdf:resource="&om;SingularUnit"/> --> + <!-- <rdf:type rdf:resource="&owl;FunctionalProperty"/> --> + <!-- </owl:ObjectProperty> --> + + <owl:Class rdf:about="&om;UnitMultiple"> + <rdfs:label xml:lang="en">unit multiple</rdfs:label> + <rdfs:label xml:lang="ja">単位倍量</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + </owl:Class> + + <owl:DatatypeProperty rdf:about="&om;hasFactor"> + <rdfs:label xml:lang="en">has factor</rdfs:label> + <rdfs:label xml:lang="ja">因子を持つ</rdfs:label> + <rdfs:domain> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class rdf:about="&om;UnitMultiple"/> + <owl:Class rdf:about="&om;SingularUnit"/> + <owl:Class rdf:about="&om;Prefix"/> + <owl:Class rdf:about="&om;Scale"/> + </owl:unionOf> + </owl:Class> + </rdfs:domain> + <rdfs:range rdf:resource="&xsd;decimal"/> + <rdf:type rdf:resource="&owl;FunctionalProperty"/> + </owl:DatatypeProperty> + + <owl:Class rdf:about="&om;SingularUnit"> + <rdfs:label xml:lang="en">singular unit</rdfs:label> + <rdfs:label xml:lang="ja">単数単位</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + </owl:Class> + + <owl:Class rdf:about="&om;CompoundUnit"> + <rdfs:label xml:lang="en">compound unit</rdfs:label> + <rdfs:label xml:lang="ja">複合単位</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + </owl:Class> + + <owl:Class rdf:about="&om;UnitMultiplication"> + <rdfs:label xml:lang="en">unit multiplication</rdfs:label> + <rdfs:label xml:lang="ja">単位乗算</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;CompoundUnit"/> + </owl:Class> + + <owl:ObjectProperty rdf:about="&om;hasTerm1"> + <rdfs:label xml:lang="en">has term 1</rdfs:label> + <rdfs:domain rdf:resource="&om;UnitMultiplication"/> + <rdfs:range> + <!-- <owl:Class> --> + <!-- <owl:unionOf rdf:parseType="Collection"> --> + <owl:Class rdf:about="&om;Unit"/> + <!-- <owl:Class rdf:about="&om;Measure"/> --> + <!-- </owl:unionOf> --> + <!-- </owl:Class> --> + </rdfs:range> + <!-- <rdf:type rdf:resource="&owl;FunctionalProperty"/> --> + </owl:ObjectProperty> + + <owl:ObjectProperty rdf:about="&om;hasTerm2"> + <rdfs:label xml:lang="en">has term 2</rdfs:label> + <rdfs:domain rdf:resource="&om;UnitMultiplication"/> + <rdfs:range> + <!-- <owl:Class> --> + <!-- <owl:unionOf rdf:parseType="Collection"> --> + <owl:Class rdf:about="&om;Unit"/> + <!-- <owl:Class rdf:about="&om;Measure"/> --> + <!-- </owl:unionOf> --> + <!-- </owl:Class> --> + </rdfs:range> + <!-- <rdf:type rdf:resource="&owl;FunctionalProperty"/> --> + </owl:ObjectProperty> + + <!-- <owl:Class rdf:about="&om;UnitMultiplication"> --> + <!-- <owl:equivalentClass> --> + <!-- <owl:Class> --> + <!-- <owl:intersectionOf rdf:parseType="Collection"> --> + <!-- <owl:Restriction> --> + <!-- <owl:onProperty rdf:resource="&om;hasTerm1"/> --> + <!-- <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> --> + <!-- </owl:Restriction> --> + <!-- <owl:Restriction> --> + <!-- <owl:onProperty rdf:resource="&om;hasTerm2"/> --> + <!-- <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> --> + <!-- </owl:Restriction> --> + <!-- </owl:intersectionOf> --> + <!-- </owl:Class> --> + <!-- </owl:equivalentClass> --> + <!-- </owl:Class> --> + + <owl:Class rdf:about="&om;UnitExponentiation"> + <rdfs:label xml:lang="en">unit exponentiation</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;CompoundUnit"/> + </owl:Class> + + <owl:ObjectProperty rdf:about="&om;hasBase"> + <rdfs:label xml:lang="en">has base</rdfs:label> + <rdfs:domain rdf:resource="&om;UnitExponentiation"/> + <rdfs:range> + <!-- <owl:Class> --> + <!-- <owl:unionOf rdf:parseType="Collection"> --> + <owl:Class rdf:about="&om;Unit"/> + <!-- <owl:Class rdf:about="&om;Measure"/> --> + <!-- </owl:unionOf> --> + <!-- </owl:Class> --> + </rdfs:range> + <!-- <rdf:type rdf:resource="&owl;FunctionalProperty"/> --> + </owl:ObjectProperty> + + <owl:DatatypeProperty rdf:about="&om;hasExponent"> + <rdfs:label xml:lang="en">has exponent</rdfs:label> + <rdfs:domain rdf:resource="&om;UnitExponentiation"/> + <rdfs:range rdf:resource="&xsd;integer"/> + <!-- <rdf:type rdf:resource="&owl;FunctionalProperty"/> --> + </owl:DatatypeProperty> + + <!-- <owl:Class rdf:about="&om;UnitExponentiation"> --> + <!-- <owl:equivalentClass> --> + <!-- <owl:Class> --> + <!-- <owl:intersectionOf rdf:parseType="Collection"> --> + <!-- <owl:Restriction> --> + <!-- <owl:onProperty rdf:resource="&om;hasBase"/> --> + <!-- <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> --> + <!-- </owl:Restriction> --> + <!-- <owl:Restriction> --> + <!-- <owl:onProperty rdf:resource="&om;hasExponent"/> --> + <!-- <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> --> + <!-- </owl:Restriction> --> + <!-- </owl:intersectionOf> --> + <!-- </owl:Class> --> + <!-- </owl:equivalentClass> --> + <!-- </owl:Class> --> + + <owl:Class rdf:about="&om;UnitDivision"> + <rdfs:label xml:lang="en">unit division</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;CompoundUnit"/> + </owl:Class> + + <owl:ObjectProperty rdf:about="&om;hasNumerator"> + <rdfs:label xml:lang="en">has numerator</rdfs:label> + <rdfs:domain rdf:resource="&om;UnitDivision"/> + <rdfs:range> + <!-- <owl:Class> --> + <!-- <owl:unionOf rdf:parseType="Collection"> --> + <owl:Class rdf:about="&om;Unit"/> + <!-- <owl:Class rdf:about="&om;Measure"/> --> + <!-- </owl:unionOf> --> + <!-- </owl:Class> --> + </rdfs:range> + <!-- <rdf:type rdf:resource="&owl;FunctionalProperty"/> --> + </owl:ObjectProperty> + + <owl:ObjectProperty rdf:about="&om;hasDenominator"> + <rdfs:label xml:lang="en">has denominator</rdfs:label> + <rdfs:domain rdf:resource="&om;UnitDivision"/> + <rdfs:range> + <!-- <owl:Class> --> + <!-- <owl:unionOf rdf:parseType="Collection"> --> + <owl:Class rdf:about="&om;Unit"/> + <!-- <owl:Class rdf:about="&om;Measure"/> --> + <!-- </owl:unionOf> --> + <!-- </owl:Class> --> + </rdfs:range> + <!-- <rdf:type rdf:resource="&owl;FunctionalProperty"/> --> + </owl:ObjectProperty> + + <!-- <owl:Class rdf:about="&om;UnitDivision"> --> + <!-- <owl:equivalentClass> --> + <!-- <owl:Class> --> + <!-- <owl:intersectionOf rdf:parseType="Collection"> --> + <!-- <owl:Restriction> --> + <!-- <owl:onProperty rdf:resource="&om;hasNumerator"/> --> + <!-- <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> --> + <!-- </owl:Restriction> --> + <!-- <owl:Restriction> --> + <!-- <owl:onProperty rdf:resource="&om;hasDenominator"/> --> + <!-- <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> --> + <!-- </owl:Restriction> --> + <!-- </owl:intersectionOf> --> + <!-- </owl:Class> --> + <!-- </owl:equivalentClass> --> + <!-- </owl:Class> --> + + <!-- <owl:ObjectProperty rdf:about="&om;hasDefinition"> --> + <!-- <rdfs:label xml:lang="en">has definition</rdfs:label> --> + <!-- </owl:ObjectProperty> --> + + <!-- <owl:Class rdf:about="&om;Unit"> --> + <!-- <rdfs:subClassOf> --> + <!-- <owl:Restriction> --> + <!-- <owl:onProperty rdf:resource="&om;hasDefinition"/> --> + <!-- <owl:allValuesFrom> --> + <!-- <owl:Class> --> + <!-- <owl:unionOf rdf:parseType="Collection"> --> + <!-- <owl:Class rdf:about="&om;Quantity"/> --> + <!-- <owl:Class rdf:about="&om;Unit"/> --> + <!-- <owl:Class rdf:about="&om;Measure"/> --> + <!-- </owl:unionOf> --> + <!-- </owl:Class> --> + <!-- </owl:allValuesFrom> --> + <!-- </owl:Restriction> --> + <!-- </rdfs:subClassOf> --> + <!-- </owl:Class> --> + + <!-- Prefix Upper Ontology --> + + <owl:Class rdf:about="&om;Prefix"> + <rdfs:label xml:lang="en">prefix</rdfs:label> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + </owl:Class> + + <!-- Measure Upper Ontology --> + + <owl:Class rdf:about="&om;Measure"> + <rdfs:label xml:lang="en">measure</rdfs:label> + <rdfs:comment xml:lang="en">A measure combines a number to a unit of measure. For example, "3 m" is a measure.</rdfs:comment> + </owl:Class> + + <owl:DatatypeProperty rdf:about="&om;hasNumericalValue"> + <rdfs:label xml:lang="en">has numerical value</rdfs:label> + <rdfs:domain> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class rdf:about="&om;Measure"/> + <owl:Class rdf:about="&om;Point"/> + </owl:unionOf> + </owl:Class> + </rdfs:domain> + <!-- <rdfs:range rdf:resource="&xsd;string"/> --> + <rdf:type rdf:resource="&owl;FunctionalProperty"/> + </owl:DatatypeProperty> + + <!-- Measurement Scale Upper Ontology --> + + <owl:Class rdf:about="&om;Scale"> + <rdfs:label xml:lang="en">scale</rdfs:label> + <om:alternativeLabel xml:lang="en">measurement scale</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">schaal</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">meetschaal</om:alternativeLabel> + <!-- <rdfs:comment xml:lang="en">Measurement scales are concepts used for the expression of quantities. Four types of scales are: nominal scales, ordinal scales, interval scales and ratio scales. The latter two scales are also called cardinal scales. An example of a scale is the Celsius scale, a temperature scale.</rdfs:comment> --> + </owl:Class> + + <owl:Class rdf:about="&om;IntervalScale"> + <rdfs:label xml:lang="en">interval scale</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Scale"/> + </owl:Class> + + <owl:Class rdf:about="&om;RatioScale"> + <rdfs:label xml:lang="en">ratio scale</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Scale"/> + </owl:Class> + + <!-- <owl:Class rdf:about="&om;CardinalScale"> --> + <!-- <rdfs:label xml:lang="en">cardinal scale</rdfs:label> --> + <!-- <rdfs:subClassOf rdf:resource="&om;Scale"/> --> + <!-- </owl:Class> --> + + <!-- <owl:Class rdf:about="&om;IntervalScale"> --> + <!-- <rdf:type rdf:resource="&om;CardinalScale"/> --> + <!-- </owl:Class> --> + + <!-- <owl:Class rdf:about="&om;RatioScale"> --> + <!-- <rdf:type rdf:resource="&om;CardinalScale"/> --> + <!-- </owl:Class> --> + + <!-- <owl:Class rdf:about="&om;Scale"> --> + <!-- <rdfs:subClassOf> --> + <!-- <owl:Restriction> --> + <!-- <owl:onProperty rdf:resource="&om;hasDefinition"/> --> + <!-- <owl:allValuesFrom> --> + <!-- <owl:Class> --> + <!-- <owl:unionOf rdf:parseType="Collection"> --> + <!-- <owl:Class rdf:about="&om;Scale"/> --> + <!-- </owl:unionOf> --> + <!-- </owl:Class> --> + <!-- </owl:allValuesFrom> --> + <!-- </owl:Restriction> --> + <!-- </rdfs:subClassOf> --> + <!-- </owl:Class> --> + + <owl:DatatypeProperty rdf:about="&om;hasOff-Set"> + <rdfs:label xml:lang="en">has off-set</rdfs:label> + <rdfs:domain rdf:resource="&om;Scale"/> + <rdfs:range rdf:resource="&xsd;decimal"/> + </owl:DatatypeProperty> + + <owl:Class rdf:about="&om;Point"> + <rdfs:label xml:lang="en">point</rdfs:label> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + </owl:Class> + + <owl:Class rdf:about="&om;FixedPoint"> + <rdfs:label xml:lang="en">fixed point</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Point"/> + </owl:Class> + + <owl:Class rdf:about="&om;FixedZeroPoint"> + <rdfs:label xml:lang="en">fixed zero point</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;FixedPoint"/> + </owl:Class> + + <owl:ObjectProperty rdf:about="&om;hasPoint"> + <rdfs:label xml:lang="en">has point</rdfs:label> + <rdfs:domain> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class rdf:about="&om;IntervalScale"/> + <owl:Class rdf:about="&om;RatioScale"/> + <owl:Class rdf:about="&om;FixedPoint"/> + </owl:unionOf> + </owl:Class> + </rdfs:domain> + <rdfs:range rdf:resource="&om;Point"/> + </owl:ObjectProperty> + + <owl:Class rdf:about="&om;FixedPoint"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPoint"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;FixedPoint"/> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- <owl:Class rdf:about="&om;FixedPoint"> --> + <!-- <rdfs:subClassOf> --> + <!-- <owl:Restriction> --> + <!-- <owl:onProperty rdf:resource="&om;hasDefinition"/> --> + <!-- <owl:allValuesFrom> --> + <!-- <owl:Class> --> + <!-- <owl:unionOf rdf:parseType="Collection"> --> + <!-- <owl:Class rdf:about="&om;Quantity"/> --> + <!-- <owl:Class rdf:about="&om;FixedPoint"/> --> + <!-- <owl:Class rdf:about="&om;Measure"/> --> + <!-- </owl:unionOf> --> + <!-- </owl:Class> --> + <!-- </owl:allValuesFrom> --> + <!-- </owl:Restriction> --> + <!-- </rdfs:subClassOf> --> + <!-- </owl:Class> --> + + <owl:ObjectProperty rdf:about="&om;hasScale"> + <rdfs:label xml:lang="en">has scale</rdfs:label> + <rdfs:domain> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class rdf:about="&om;Scale"/> + <owl:Class rdf:about="&om;Quantity"/> + <owl:Class rdf:about="&om;ApplicationArea"/> + </owl:unionOf> + </owl:Class> + </rdfs:domain> + <rdfs:range rdf:resource="&om;Scale"/> + </owl:ObjectProperty> + + <!-- Dimension Upper Ontology --> + + <owl:Class rdf:about="&om;Dimension"> + <rdfs:label xml:lang="en">dimension</rdfs:label> + <rdfs:comment xml:lang="en">Dimensions are abstract properties of units and quantities neglecting their vectorial or tensorial character and all numerical factors including their sign.</rdfs:comment> + </owl:Class> + + <owl:ObjectProperty rdf:about="&om;hasDimension"> + <rdfs:label xml:lang="en">has dimension</rdfs:label> + <rdfs:domain> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class rdf:about="&om;Quantity"/> + <owl:Class rdf:about="&om;Unit"/> + <owl:Class rdf:about="&om;Scale"/> + </owl:unionOf> + </owl:Class> + </rdfs:domain> + <rdfs:range rdf:resource="&om;Dimension"/> + </owl:ObjectProperty> + + <owl:DatatypeProperty rdf:about="&om;hasSILengthDimensionExponent"> + <rdfs:label xml:lang="en">has SI length dimension exponent</rdfs:label> + <rdfs:domain rdf:resource="&om;Dimension"/> + <rdfs:range rdf:resource="&xsd;integer"/> + </owl:DatatypeProperty> + + <owl:DatatypeProperty rdf:about="&om;hasSIMassDimensionExponent"> + <rdfs:label xml:lang="en">has SI mass dimension exponent</rdfs:label> + <rdfs:domain rdf:resource="&om;Dimension"/> + <rdfs:range rdf:resource="&xsd;integer"/> + </owl:DatatypeProperty> + + <owl:DatatypeProperty rdf:about="&om;hasSITimeDimensionExponent"> + <rdfs:label xml:lang="en">has SI time dimension exponent</rdfs:label> + <rdfs:domain rdf:resource="&om;Dimension"/> + <rdfs:range rdf:resource="&xsd;integer"/> + </owl:DatatypeProperty> + + <owl:DatatypeProperty rdf:about="&om;hasSIElectricCurrentDimensionExponent"> + <rdfs:label xml:lang="en">has SI electric current dimension exponent</rdfs:label> + <rdfs:domain rdf:resource="&om;Dimension"/> + <rdfs:range rdf:resource="&xsd;integer"/> + </owl:DatatypeProperty> + + <owl:DatatypeProperty rdf:about="&om;hasSIThermodynamicTemperatureDimensionExponent"> + <rdfs:label xml:lang="en">has SI thermodynamic temperature dimension exponent</rdfs:label> + <rdfs:domain rdf:resource="&om;Dimension"/> + <rdfs:range rdf:resource="&xsd;integer"/> + </owl:DatatypeProperty> + + <owl:DatatypeProperty rdf:about="&om;hasSIAmountOfSubstanceDimensionExponent"> + <rdfs:label xml:lang="en">has SI amount of substance dimension exponent</rdfs:label> + <rdfs:domain rdf:resource="&om;Dimension"/> + <rdfs:range rdf:resource="&xsd;integer"/> + </owl:DatatypeProperty> + + <owl:DatatypeProperty rdf:about="&om;hasSILuminousIntensityDimensionExponent"> + <rdfs:label xml:lang="en">has SI luminous intensity dimension exponent</rdfs:label> + <rdfs:domain rdf:resource="&om;Dimension"/> + <rdfs:range rdf:resource="&xsd;integer"/> + </owl:DatatypeProperty> + + <!-- <owl:DatatypeProperty rdf:about="&om;hasCGSESULengthDimensionExponent"> --> + <!-- <rdfs:label xml:lang="en">has CGS ESU length dimension exponent</rdfs:label> --> + <!-- <rdfs:domain rdf:resource="&om;Dimension"/> --> + <!-- <rdfs:range rdf:resource="&xsd;integer"/> --> + <!-- </owl:DatatypeProperty> --> + + <!-- <owl:DatatypeProperty rdf:about="&om;hasCGSESUMassDimensionExponent"> --> + <!-- <rdfs:label xml:lang="en">has CGS ESU mass dimension exponent</rdfs:label> --> + <!-- <rdfs:domain rdf:resource="&om;Dimension"/> --> + <!-- <rdfs:range rdf:resource="&xsd;integer"/> --> + <!-- </owl:DatatypeProperty> --> + + <!-- <owl:DatatypeProperty rdf:about="&om;hasCGSESUTimeDimensionExponent"> --> + <!-- <rdfs:label xml:lang="en">has CGS ESU time dimension exponent</rdfs:label> --> + <!-- <rdfs:domain rdf:resource="&om;Dimension"/> --> + <!-- <rdfs:range rdf:resource="&xsd;integer"/> --> + <!-- </owl:DatatypeProperty> --> + + <!-- <owl:DatatypeProperty rdf:about="&om;hasCGSEMULengthDimensionExponent"> --> + <!-- <rdfs:label xml:lang="en">has CGS EMU length dimension exponent</rdfs:label> --> + <!-- <rdfs:domain rdf:resource="&om;Dimension"/> --> + <!-- <rdfs:range rdf:resource="&xsd;integer"/> --> + <!-- </owl:DatatypeProperty> --> + + <!-- <owl:DatatypeProperty rdf:about="&om;hasCGSEMUMassDimensionExponent"> --> + <!-- <rdfs:label xml:lang="en">has CGS EMU mass dimension exponent</rdfs:label> --> + <!-- <rdfs:domain rdf:resource="&om;Dimension"/> --> + <!-- <rdfs:range rdf:resource="&xsd;integer"/> --> + <!-- </owl:DatatypeProperty> --> + + <!-- <owl:DatatypeProperty rdf:about="&om;hasCGSEMUTimeDimensionExponent"> --> + <!-- <rdfs:label xml:lang="en">has CGS EMU time dimension exponent</rdfs:label> --> + <!-- <rdfs:domain rdf:resource="&om;Dimension"/> --> + <!-- <rdfs:range rdf:resource="&xsd;integer"/> --> + <!-- </owl:DatatypeProperty> --> + + <!-- System of Units Upper Ontology --> + + <owl:Class rdf:about="&om;SystemOfUnits"> + <rdfs:label xml:lang="en">system of units</rdfs:label> + <rdfs:comment xml:lang="en">In order to achieve a coherent, interdependent set of units of measure in the wide variety of units that exist, units are organised in systems of units. A system of units is based on a set of units chosen by convention to be the system’s base units, units that are considered to be mutually independent (i.e., can’t be expressed in terms of each other).</rdfs:comment> + </owl:Class> + + <owl:ObjectProperty rdf:about="&om;hasBaseQuantity"> + <rdfs:label xml:lang="en">has base quantity</rdfs:label> + <rdfs:domain rdf:resource="&om;SystemOfUnits"/> + <rdfs:range rdf:resource="&om;Quantity"/> + </owl:ObjectProperty> + + <owl:ObjectProperty rdf:about="&om;hasBaseUnit"> + <rdfs:label xml:lang="en">has base unit</rdfs:label> + <rdfs:domain rdf:resource="&om;SystemOfUnits"/> + <rdfs:range rdf:resource="&om;Unit"/> + </owl:ObjectProperty> + + <owl:ObjectProperty rdf:about="&om;hasDerivedQuantity"> + <rdfs:label xml:lang="en">has derived quantity</rdfs:label> + <rdfs:domain rdf:resource="&om;SystemOfUnits"/> + <rdfs:range rdf:resource="&om;Quantity"/> + </owl:ObjectProperty> + + <owl:ObjectProperty rdf:about="&om;hasDerivedUnit"> + <rdfs:label xml:lang="en">has derived unit</rdfs:label> + <rdfs:domain rdf:resource="&om;SystemOfUnits"/> + <rdfs:range rdf:resource="&om;Unit"/> + </owl:ObjectProperty> + + <!-- Application Area Upper Ontology --> + + <owl:Class rdf:about="&om;ApplicationArea"> + <rdfs:label xml:lang="en">application area</rdfs:label> + <rdfs:comment xml:lang="en">An application area groups quantities and units of measure for application areas such as scientific disciplines (e.g., thermodynamics, mechanics).</rdfs:comment> + </owl:Class> + + <owl:ObjectProperty rdf:about="&om;usesQuantity"> + <rdfs:label xml:lang="en">uses quantity</rdfs:label> + <rdfs:domain rdf:resource="&om;ApplicationArea"/> + <rdfs:range rdf:resource="&om;Quantity"/> + </owl:ObjectProperty> + + <owl:ObjectProperty rdf:about="&om;usesUnit"> + <rdfs:label xml:lang="en">uses unit</rdfs:label> + <rdfs:domain rdf:resource="&om;ApplicationArea"/> + <rdfs:range rdf:resource="&om;Unit"/> + </owl:ObjectProperty> + + <!-- LaTeX specific properties Upper Ontology --> + + <owl:AnnotationProperty rdf:about="&om;LaTeXCommand"> + <rdfs:label xml:lang="en">LaTeX command</rdfs:label> + <om:alternativeLabel xml:lang="en">typeset by LaTeX command</om:alternativeLabel> + <rdfs:comment xml:lang="en">OMLaTeX command that can be used to render this quantity or unit.</rdfs:comment> + </owl:AnnotationProperty> + + <owl:AnnotationProperty rdf:about="&om;LaTeXSymbol"> + <rdfs:label xml:lang="en">LaTeX symbol</rdfs:label> + <om:alternativeLabel xml:lang="en">has LaTeX symbol</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">LaTeX formatted symbol</om:alternativeLabel> + <rdfs:comment xml:lang="en">OMLaTeX formatted symbol may include commands such as \unit and \E as defined in OMLaTeX.</rdfs:comment> + </owl:AnnotationProperty> + + <owl:AnnotationProperty rdf:about="&om;alternativeLaTeXSymbol"> + <rdfs:label xml:lang="en">alternative LaTeX symbol</rdfs:label> + <om:alternativeLabel xml:lang="en">has alternative LaTeX symbol</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">alternative LaTeX formatted symbol</om:alternativeLabel> + <rdfs:comment xml:lang="en">An alternative OMLaTeX formatted symbol, which may include commands such as \unit and \E as defined in OMLaTeX.</rdfs:comment> + </owl:AnnotationProperty> + + <!-- Geometry Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Prefix Ontologies --> + <!-- Unit of Measure Ontologies --> + <!-- Dimension Ontologies --> + <!-- System of Units Ontologies --> + + <om:ApplicationArea rdf:about="&om;geometry"> + <rdfs:label xml:lang="en">geometry</rdfs:label> + <rdfs:label xml:lang="nl">geometrie</rdfs:label> + <om:usesQuantity rdf:resource="&om;Length"/> + <om:usesQuantity rdf:resource="&om;Breadth"/> + <om:usesQuantity rdf:resource="&om;Height"/> + <om:usesQuantity rdf:resource="&om;Thickness"/> + <om:usesQuantity rdf:resource="&om;Width"/> + <om:usesQuantity rdf:resource="&om;Radius"/> + <om:usesQuantity rdf:resource="&om;Diameter"/> + <om:usesQuantity rdf:resource="&om;Circumference"/> + <om:usesQuantity rdf:resource="&om;Area"/> + <om:usesQuantity rdf:resource="&om;Volume"/> + <om:usesQuantity rdf:resource="&om;Angle"/> + <om:usesQuantity rdf:resource="&om;SolidAngle"/> + <om:usesQuantity rdf:resource="&om;LengthFraction"/> + <om:usesQuantity rdf:resource="&om;Slope"/> + <om:usesUnit rdf:resource="&om;chain"/> + <om:usesUnit rdf:resource="&om;cicero"/> + <om:usesUnit rdf:resource="&om;fathom-USSurvey"/> + <om:usesUnit rdf:resource="&om;fermi"/> + <om:usesUnit rdf:resource="&om;foot-International"/> + <om:usesUnit rdf:resource="&om;foot-USSurvey"/> + <om:usesUnit rdf:resource="&om;furlong-International"/> + <om:usesUnit rdf:resource="&om;inch-International"/> + <om:usesUnit rdf:resource="&om;metre"/> + <om:usesUnit rdf:resource="&om;micrometre"/> + <om:usesUnit rdf:resource="&om;millimetre"/> + <om:usesUnit rdf:resource="&om;centimetre"/> + <om:usesUnit rdf:resource="&om;decimetre"/> + <om:usesUnit rdf:resource="&om;decametre"/> + <om:usesUnit rdf:resource="&om;hectometre"/> + <om:usesUnit rdf:resource="&om;kilometre"/> + <om:usesUnit rdf:resource="&om;megametre"/> + <om:usesUnit rdf:resource="&om;gigametre"/> + <om:usesUnit rdf:resource="&om;micron"/> + <om:usesUnit rdf:resource="&om;mil-Length"/> + <om:usesUnit rdf:resource="&om;mile-Statute"/> + <om:usesUnit rdf:resource="&om;mile-USSurvey"/> + <om:usesUnit rdf:resource="&om;nauticalMile-International"/> + <om:usesUnit rdf:resource="&om;pica-ATA"/> + <om:usesUnit rdf:resource="&om;pica-Postscript"/> + <om:usesUnit rdf:resource="&om;pica-TeX"/> + <om:usesUnit rdf:resource="&om;point-ATA"/> + <om:usesUnit rdf:resource="&om;point-Didot"/> + <om:usesUnit rdf:resource="&om;point-Postscript"/> + <om:usesUnit rdf:resource="&om;point-TeX"/> + <om:usesUnit rdf:resource="&om;rod-US"/> + <om:usesUnit rdf:resource="&om;yard-International"/> + <om:usesUnit rdf:resource="&om;angstrom"/> + <om:usesUnit rdf:resource="&om;attometre"/> + <om:usesUnit rdf:resource="&om;femtometre"/> + <om:usesUnit rdf:resource="&om;picometre"/> + <om:usesUnit rdf:resource="&om;nanometre"/> + <om:usesUnit rdf:resource="&om;astronomicalUnit"/> + <om:usesUnit rdf:resource="&om;lightYear"/> + <om:usesUnit rdf:resource="&om;terametre"/> + <om:usesUnit rdf:resource="&om;petametre"/> + <om:usesUnit rdf:resource="&om;exametre"/> + <om:usesUnit rdf:resource="&om;parsec"/> + <om:usesUnit rdf:resource="&om;megaparsec"/> + <om:usesUnit rdf:resource="&om;acre-International"/> + <om:usesUnit rdf:resource="&om;acre-USSurvey"/> + <om:usesUnit rdf:resource="&om;are"/> + <om:usesUnit rdf:resource="&om;barn"/> + <om:usesUnit rdf:resource="&om;centiare"/> + <om:usesUnit rdf:resource="&om;circularMil"/> + <om:usesUnit rdf:resource="&om;hectare"/> + <om:usesUnit rdf:resource="&om;squareCentimetre"/> + <om:usesUnit rdf:resource="&om;squareDecametre"/> + <om:usesUnit rdf:resource="&om;squareDecimetre"/> + <om:usesUnit rdf:resource="&om;squareGigametre"/> + <om:usesUnit rdf:resource="&om;squareHectometre"/> + <om:usesUnit rdf:resource="&om;squareKilometre"/> + <om:usesUnit rdf:resource="&om;squareMegametre"/> + <om:usesUnit rdf:resource="&om;squareMetre"/> + <om:usesUnit rdf:resource="&om;squareMicrometre"/> + <om:usesUnit rdf:resource="&om;squareMillimetre"/> + <om:usesUnit rdf:resource="&om;squareAttometre"/> + <om:usesUnit rdf:resource="&om;squareFemtometre"/> + <om:usesUnit rdf:resource="&om;squareNanometre"/> + <om:usesUnit rdf:resource="&om;squarePicometre"/> + <om:usesUnit rdf:resource="&om;squareExametre"/> + <om:usesUnit rdf:resource="&om;squarePetametre"/> + <om:usesUnit rdf:resource="&om;squareTerametre"/> + <om:usesUnit rdf:resource="&om;squareAngstrom"/> + <om:usesUnit rdf:resource="&om;squareInch-International"/> + <om:usesUnit rdf:resource="&om;squareFoot-International"/> + <om:usesUnit rdf:resource="&om;squareYard-International"/> + <om:usesUnit rdf:resource="&om;squareMile-International"/> + <om:usesUnit rdf:resource="&om;acreFoot"/> + <om:usesUnit rdf:resource="&om;barrel-US"/> + <om:usesUnit rdf:resource="&om;bushel-US"/> + <om:usesUnit rdf:resource="&om;cord"/> + <om:usesUnit rdf:resource="&om;cubicCentimetre"/> + <om:usesUnit rdf:resource="&om;cubicDecametre"/> + <om:usesUnit rdf:resource="&om;cubicDecimetre"/> + <om:usesUnit rdf:resource="&om;cubicGigametre"/> + <om:usesUnit rdf:resource="&om;cubicHectometre"/> + <om:usesUnit rdf:resource="&om;cubicKilometre"/> + <om:usesUnit rdf:resource="&om;cubicMegametre"/> + <om:usesUnit rdf:resource="&om;cubicMetre"/> + <om:usesUnit rdf:resource="&om;cubicMicrometre"/> + <om:usesUnit rdf:resource="&om;cubicMillimetre"/> + <om:usesUnit rdf:resource="&om;cubicAngstrom"/> + <om:usesUnit rdf:resource="&om;cup-USCustomary"/> + <om:usesUnit rdf:resource="&om;cubicParsec"/> + <om:usesUnit rdf:resource="&om;cubicKiloparsec"/> + <om:usesUnit rdf:resource="&om;dryGallon-US"/> + <om:usesUnit rdf:resource="&om;dryPint-US"/> + <om:usesUnit rdf:resource="&om;dryQuart-US"/> + <om:usesUnit rdf:resource="&om;fluidOunce-Imperial"/> + <om:usesUnit rdf:resource="&om;fluidOunce-US"/> + <om:usesUnit rdf:resource="&om;gallon-Imperial"/> + <om:usesUnit rdf:resource="&om;gallon-US"/> + <om:usesUnit rdf:resource="&om;gill-Imperial"/> + <om:usesUnit rdf:resource="&om;gill-US"/> + <om:usesUnit rdf:resource="&om;litre"/> + <om:usesUnit rdf:resource="&om;microlitre"/> + <om:usesUnit rdf:resource="&om;millilitre"/> + <om:usesUnit rdf:resource="&om;centilitre"/> + <om:usesUnit rdf:resource="&om;decilitre"/> + <om:usesUnit rdf:resource="&om;decalitre"/> + <om:usesUnit rdf:resource="&om;hectolitre"/> + <om:usesUnit rdf:resource="&om;kilolitre"/> + <om:usesUnit rdf:resource="&om;megalitre"/> + <om:usesUnit rdf:resource="&om;gigalitre"/> + <om:usesUnit rdf:resource="&om;liquidPint-US"/> + <om:usesUnit rdf:resource="&om;liquidQuart-US"/> + <om:usesUnit rdf:resource="&om;peck-US"/> + <om:usesUnit rdf:resource="&om;pint-Imperial"/> + <om:usesUnit rdf:resource="&om;quart-Imperial"/> + <om:usesUnit rdf:resource="&om;stere"/> + <om:usesUnit rdf:resource="&om;tablespoon-US"/> + <om:usesUnit rdf:resource="&om;teaspoon-US"/> + <om:usesUnit rdf:resource="&om;dessertspoon"/> + <om:usesUnit rdf:resource="&om;ton-Register"/> + <om:usesUnit rdf:resource="&om;cubicAttometre"/> + <om:usesUnit rdf:resource="&om;cubicFemtometre"/> + <om:usesUnit rdf:resource="&om;cubicNanometre"/> + <om:usesUnit rdf:resource="&om;cubicPicometre"/> + <om:usesUnit rdf:resource="&om;attolitre"/> + <om:usesUnit rdf:resource="&om;femtolitre"/> + <om:usesUnit rdf:resource="&om;picolitre"/> + <om:usesUnit rdf:resource="&om;nanolitre"/> + <om:usesUnit rdf:resource="&om;cubicExametre"/> + <om:usesUnit rdf:resource="&om;cubicPetametre"/> + <om:usesUnit rdf:resource="&om;cubicTerametre"/> + <om:usesUnit rdf:resource="&om;teralitre"/> + <om:usesUnit rdf:resource="&om;petalitre"/> + <om:usesUnit rdf:resource="&om;exalitre"/> + <om:usesUnit rdf:resource="&om;degree"/> + <om:usesUnit rdf:resource="&om;gon"/> + <om:usesUnit rdf:resource="&om;metrePerMetre"/> + <om:usesUnit rdf:resource="&om;mil-Angle"/> + <om:usesUnit rdf:resource="&om;minute-Angle"/> + <om:usesUnit rdf:resource="&om;radian"/> + <om:usesUnit rdf:resource="&om;microradian"/> + <om:usesUnit rdf:resource="&om;milliradian"/> + <om:usesUnit rdf:resource="&om;centiradian"/> + <om:usesUnit rdf:resource="&om;deciradian"/> + <om:usesUnit rdf:resource="&om;revolution"/> + <om:usesUnit rdf:resource="&om;second-Angle"/> + <om:usesUnit rdf:resource="&om;attoradian"/> + <om:usesUnit rdf:resource="&om;femtoradian"/> + <om:usesUnit rdf:resource="&om;picoradian"/> + <om:usesUnit rdf:resource="&om;nanoradian"/> + <om:usesUnit rdf:resource="&om;millisecond-Angle"/> + <om:usesUnit rdf:resource="&om;microsecond-Angle"/> + <om:usesUnit rdf:resource="&om;degreeSquared"/> + <om:usesUnit rdf:resource="&om;steradian"/> + <om:usesUnit rdf:resource="&om;microsteradian"/> + <om:usesUnit rdf:resource="&om;millisteradian"/> + <om:usesUnit rdf:resource="&om;centisteradian"/> + <om:usesUnit rdf:resource="&om;decisteradian"/> + <om:usesUnit rdf:resource="&om;attosteradian"/> + <om:usesUnit rdf:resource="&om;femtosteradian"/> + <om:usesUnit rdf:resource="&om;picosteradian"/> + <om:usesUnit rdf:resource="&om;nanosteradian"/> + <om:usesUnit rdf:resource="&om;metrePerMetre"/> + <om:usesUnit rdf:resource="&om;millimetrePerMetre"/> + </om:ApplicationArea> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Length Upper Ontology --> + <!-- Length Subclass Upper Ontology --> + <!-- Area Upper Ontology --> + <!-- Volume Upper Ontology --> + <!-- Angle Upper Ontology --> + <!-- Solid Angle Upper Ontology --> + <!-- Solid Angle Subclass Upper Ontology --> + <!-- Length Fraction Upper Ontology --> + <!-- Length Fraction Subclass Upper Ontology --> + + <!-- Length Upper Ontology --> + + <owl:Class rdf:about="&om;Length"> + <rdfs:label xml:lang="en">length</rdfs:label> + <rdfs:label xml:lang="nl">lengte</rdfs:label> + <rdfs:label xml:lang="zh">长度</rdfs:label> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>l</om:symbol> + <om:alternativeSymbol>L</om:alternativeSymbol> + <!-- <om:vectorial_or_tensorial_character rdf:resource="&om;scalar"/> --> + </owl:Class> + + <!-- Length Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;Breadth"> + <rdfs:label xml:lang="en">breadth</rdfs:label> + <rdfs:label xml:lang="nl">breedte</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Length"/> + <om:symbol>b</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Depth"> + <rdfs:label xml:lang="en">depth</rdfs:label> + <rdfs:label xml:lang="nl">diepte</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Length"/> + <om:symbol>d</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Distance"> + <rdfs:label xml:lang="en">distance</rdfs:label> + <rdfs:label xml:lang="nl">afstand</rdfs:label> + <rdfs:label xml:lang="zh">距离</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Length"/> + <om:symbol>d</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Height"> + <rdfs:label xml:lang="en">height</rdfs:label> + <rdfs:label xml:lang="nl">hoogte</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Length"/> + <om:symbol>h</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Thickness"> + <rdfs:label xml:lang="en">thickness</rdfs:label> + <rdfs:label xml:lang="nl">dikte</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Length"/> + <om:symbol>d</om:symbol> + <om:alternativeSymbol>δ</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;Width"> + <rdfs:label xml:lang="en">width</rdfs:label> + <rdfs:label xml:lang="nl">breedte</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Length"/> + <om:symbol>w</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Radius"> + <rdfs:label xml:lang="en">radius</rdfs:label> + <rdfs:label xml:lang="nl">straal</rdfs:label> + <rdfs:label xml:lang="zh">半径</rdfs:label> + <om:alternativeLabel xml:lang="nl">radius</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Length"/> + <om:symbol>r</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Diameter"> + <rdfs:label xml:lang="en">diameter</rdfs:label> + <rdfs:label xml:lang="nl">diameter</rdfs:label> + <rdfs:label xml:lang="zh">直径</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Length"/> + <om:symbol>d</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Circumference"> + <rdfs:label xml:lang="en">circumference</rdfs:label> + <rdfs:label xml:lang="nl">omtrek</rdfs:label> + <!-- <rdfs:label xml:lang="zh">圓周</rdfs:label> --> + <rdfs:label xml:lang="zh">圆周</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Length"/> + <om:symbol>C</om:symbol> + </owl:Class> + + <!-- Area Upper Ontology --> + + <owl:Class rdf:about="&om;Area"> + <rdfs:label xml:lang="en">area</rdfs:label> + <rdfs:label xml:lang="nl">oppervlakte</rdfs:label> + <rdfs:label xml:lang="zh">面积</rdfs:label> + <om:alternativeLabel xml:lang="nl">oppervlak</om:alternativeLabel> + <rdfs:comment xml:lang="en">Area expresses the two-dimensional size of a defined part of a surface, typically a region bounded by a closed curve. It is a derived quantity in the International System of Units. Area is length squared.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>A</om:symbol> + <om:alternativeSymbol>S</om:alternativeSymbol> + </owl:Class> + + <!-- Volume Upper Ontology --> + + <owl:Class rdf:about="&om;Volume"> + <rdfs:label xml:lang="en">volume</rdfs:label> + <rdfs:label xml:lang="nl">volume</rdfs:label> + <rdfs:label xml:lang="zh">体积</rdfs:label> + <om:alternativeLabel xml:lang="nl">inhoud</om:alternativeLabel> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>V</om:symbol> + <om:alternativeSymbol>v</om:alternativeSymbol> + </owl:Class> + + <!-- Angle Upper Ontology --> + + <owl:Class rdf:about="&om;Angle"> + <rdfs:label xml:lang="en">angle</rdfs:label> + <rdfs:label xml:lang="nl">hoek</rdfs:label> + <!-- <rdfs:label xml:lang="zh">角</rdfs:label> --> + <rdfs:label xml:lang="zh">角度</rdfs:label> + <om:alternativeLabel xml:lang="en">plane angle</om:alternativeLabel> + <rdfs:comment xml:lang="en">Angle is the ratio between an arc and its radius.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>α</om:symbol> + <om:alternativeSymbol>β</om:alternativeSymbol> + <om:alternativeSymbol>γ</om:alternativeSymbol> + <om:alternativeSymbol>θ</om:alternativeSymbol> + <om:alternativeSymbol>φ</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;Angle"> + <om:commonlyHasUnit rdf:resource="&om;metrePerMetre"/> + </owl:Class> + + <!-- Solid Angle Upper Ontology --> + + <owl:Class rdf:about="&om;SolidAngle"> + <rdfs:label xml:lang="en">solid angle</rdfs:label> + <rdfs:label xml:lang="nl">ruimtehoek</rdfs:label> + <!-- <rdfs:label xml:lang="zh">立體角</rdfs:label> --> + <rdfs:label xml:lang="zh">立体角</rdfs:label> + <rdfs:comment xml:lang="en">Solid angle is the ratio of the surface of a portion of a sphere enclosed by the conical surface that forms an angle to the square of the radius of the sphere.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Ω</om:symbol> + <om:alternativeSymbol>ω</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;SolidAngle"> + <om:commonlyHasUnit rdf:resource="&om;squareMetrePerSquareMetre"/> + </owl:Class> + + <!-- Solid Angle Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;AngularSize"> + <rdfs:label xml:lang="en">angular size</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SolidAngle"/> + </owl:Class> + + <!-- Length Fraction Upper Ontology --> + + <owl:Class rdf:about="&om;LengthFraction"> + <rdfs:label xml:lang="en">length fraction</rdfs:label> + <rdfs:label xml:lang="nl">lengtefractie</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <owl:Class rdf:about="&om;LengthFraction"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Length Fraction Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;Slope"> + <rdfs:label xml:lang="en">slope</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;LengthFraction"/> + </owl:Class> + + <!-- Prefix Ontologies --> + + <!-- Contents --> + + <!-- SI Prefix Ontology --> + + <!-- SI Prefix Ontologies --> + + <owl:Class rdf:about="&om;SIPrefix"> + <rdfs:label xml:lang="en">SI prefix</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Prefix"/> + </owl:Class> + + <om:SIPrefix rdf:about="&om;yocto"> + <rdfs:label xml:lang="en">yocto</rdfs:label> + <rdfs:label xml:lang="nl">yocto</rdfs:label> + <om:symbol>y</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">0.000000000000000000000001</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;zepto"> + <rdfs:label xml:lang="en">zepto</rdfs:label> + <rdfs:label xml:lang="nl">zepto</rdfs:label> + <om:symbol>z</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">0.000000000000000000001</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;atto"> + <rdfs:label xml:lang="en">atto</rdfs:label> + <rdfs:label xml:lang="nl">atto</rdfs:label> + <om:symbol>a</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">0.000000000000000001</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;femto"> + <rdfs:label xml:lang="en">femto</rdfs:label> + <rdfs:label xml:lang="nl">femto</rdfs:label> +<!-- <rdfs:label xml:lang="zh">飛</rdfs:label> --> + <om:symbol>f</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">0.000000000000001</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;pico"> + <rdfs:label xml:lang="en">pico</rdfs:label> + <rdfs:label xml:lang="nl">pico</rdfs:label> +<!-- <rdfs:label xml:lang="zh">皮</rdfs:label> --> + <om:symbol>p</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">0.000000000001</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;nano"> + <rdfs:label xml:lang="en">nano</rdfs:label> + <rdfs:label xml:lang="nl">nano</rdfs:label> +<!-- <rdfs:label xml:lang="zh">纳</rdfs:label> --> + <om:symbol>n</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">0.000000001</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;micro"> + <rdfs:label xml:lang="en">micro</rdfs:label> + <rdfs:label xml:lang="nl">micro</rdfs:label> +<!-- <rdfs:label xml:lang="zh">微</rdfs:label> --> + <om:symbol>μ</om:symbol> + <om:alternativeSymbol>u</om:alternativeSymbol> + <om:hasFactor rdf:datatype="&xsd;decimal">0.000001</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;milli"> + <rdfs:label xml:lang="en">milli</rdfs:label> + <rdfs:label xml:lang="nl">milli</rdfs:label> +<!-- <rdfs:label xml:lang="zh">毫</rdfs:label> --> + <om:symbol>m</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">0.001</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;centi"> + <rdfs:label xml:lang="en">centi</rdfs:label> + <rdfs:label xml:lang="nl">centi</rdfs:label> +<!-- <rdfs:label xml:lang="zh">厘</rdfs:label> --> + <om:symbol>c</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">0.01</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;deci"> + <rdfs:label xml:lang="en">deci</rdfs:label> + <rdfs:label xml:lang="nl">deci</rdfs:label> +<!-- <rdfs:label xml:lang="zh">分</rdfs:label> --> + <om:symbol>d</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">0.1</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;deca"> + <rdfs:label xml:lang="en">deca</rdfs:label> + <rdfs:label xml:lang="nl">deca</rdfs:label> + <om:alternativeLabel xml:lang="en">deka</om:alternativeLabel> + <om:symbol>da</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">10</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;hecto"> + <rdfs:label xml:lang="en">hecto</rdfs:label> + <rdfs:label xml:lang="nl">hecto</rdfs:label> + <om:symbol>h</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">100</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;kilo"> + <rdfs:label xml:lang="en">kilo</rdfs:label> + <rdfs:label xml:lang="nl">kilo</rdfs:label> +<!-- <rdfs:label xml:lang="zh">千</rdfs:label> --> + <om:symbol>k</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">1000</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;mega"> + <rdfs:label xml:lang="en">mega</rdfs:label> + <rdfs:label xml:lang="nl">mega</rdfs:label> +<!-- <rdfs:label xml:lang="zh">兆</rdfs:label> --> + <om:symbol>M</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">1000000</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;giga"> + <rdfs:label xml:lang="en">giga</rdfs:label> + <rdfs:label xml:lang="nl">giga</rdfs:label> +<!-- <rdfs:label xml:lang="zh">吉</rdfs:label> --> + <om:symbol>G</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">1000000000</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;tera"> + <rdfs:label xml:lang="en">tera</rdfs:label> + <rdfs:label xml:lang="nl">tera</rdfs:label> +<!-- <rdfs:label xml:lang="zh">太</rdfs:label> --> + <om:symbol>T</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">1000000000000</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;peta"> + <rdfs:label xml:lang="en">peta</rdfs:label> + <rdfs:label xml:lang="nl">peta</rdfs:label> +<!-- <rdfs:label xml:lang="zh">拍</rdfs:label> --> + <om:symbol>P</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">1000000000000000</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;exa"> + <rdfs:label xml:lang="en">exa</rdfs:label> + <rdfs:label xml:lang="nl">exa</rdfs:label> +<!-- <rdfs:label xml:lang="zh">艾</rdfs:label> --> + <om:symbol>E</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">1000000000000000000</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;zetta"> + <rdfs:label xml:lang="en">zetta</rdfs:label> + <rdfs:label xml:lang="nl">zetta</rdfs:label> +<!-- <rdfs:label xml:lang="zh">泽</rdfs:label> --> + <om:symbol>Z</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">1000000000000000000000</om:hasFactor> + </om:SIPrefix> + + <om:SIPrefix rdf:about="&om;yotta"> + <rdfs:label xml:lang="en">yotta</rdfs:label> + <rdfs:label xml:lang="nl">yotta</rdfs:label> +<!-- <rdfs:label xml:lang="zh">尧</rdfs:label> --> + <om:symbol>Y</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">1000000000000000000000000</om:hasFactor> + </om:SIPrefix> + + <!-- Unit of Measure Ontologies --> + + <!-- Contents --> + + <!-- Metre Ontology --> + <!-- Metre Multiples and Submultiples Ontology --> + <!-- Length Unit Ontology --> + <!-- Square Metre Ontology --> + <!-- Square Metre Multiples and Submultiples Ontology --> + <!-- Are Ontology --> + <!-- Are Multiples and Submultiples Ontology --> + <!-- Area Unit Ontology --> + <!-- Cubic Metre Ontology --> + <!-- Cubic Metre Multiples and Submultiples Ontology --> + <!-- Litre Ontology --> + <!-- Litre Multiples and Submultiples Ontology --> + <!-- Volume Unit Ontology --> + <!-- Radian Ontology --> + <!-- Radian Multiples and Submultiples Ontology --> + <!-- Angle Unit Ontology --> + <!-- Steradian Ontology --> + <!-- Steradian Multiples and Submultiples Ontology --> + <!-- Solid Angle Unit Ontology --> + <!-- Metre Per Metre Ontology --> + <!-- Metre Per Metre Multiples and Submultiples Ontology --> + + <!-- Metre Ontology --> + + <om:Unit rdf:about="&om;metre"> + <rdfs:label xml:lang="en">metre</rdfs:label> + <rdfs:label xml:lang="nl">meter</rdfs:label> + <rdfs:label xml:lang="zh">米</rdfs:label> + <om:alternativeLabel xml:lang="en">meter</om:alternativeLabel> + <om:symbol>m</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <owl:Thing rdf:about="&om;pathTravelledByLightInVacuumDuringATimeIntervalOf1299792458OfASecond"> + <rdfs:label xml:lang="en">path travelled by light in vacuum during a time interval of 1/299 792 458 of a second</rdfs:label> + </owl:Thing> + + <Length rdf:about="&om;lengthOfThePathTravelledByLightInVacuumDuringATimeIntervalOf1299792458OfASecond"> + <rdfs:label xml:lang="en">length of the path travelled by light in vacuum during a time interval of 1/299 792 458 of a second</rdfs:label> + <om:hasPhenomenon rdf:resource="&om;pathTravelledByLightInVacuumDuringATimeIntervalOf1299792458OfASecond"/> + </Length> + + <om:Unit rdf:about="&om;metre"> + <rdfs:comment xml:lang="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.</rdfs:comment> + <om:longcomment xml:lang="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.</om:longcomment> + <om:hasQuantity rdf:resource="&om;lengthOfThePathTravelledByLightInVacuumDuringATimeIntervalOf1299792458OfASecond"/> + </om:Unit> + + <owl:Class rdf:about="&om;Length"> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Breadth"> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Depth"> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Distance"> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Height"> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Thickness"> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Width"> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Radius"> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Diameter"> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Circumference"> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + </owl:Class> + + <owl:Class rdf:about="&om;LengthUnit"> + <rdfs:label xml:lang="en">length unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;angstrom"/> + <om:Unit rdf:about="&om;astronomicalUnit"/> + <om:Unit rdf:about="&om;BirminghamGauge"/> + <om:Unit rdf:about="&om;chain"/> + <om:Unit rdf:about="&om;cicero"/> + <om:Unit rdf:about="&om;fathom-USSurvey"/> + <om:Unit rdf:about="&om;fermi"/> + <om:Unit rdf:about="&om;foot-International"/> + <om:Unit rdf:about="&om;foot-USSurvey"/> + <om:Unit rdf:about="&om;FrenchGauge"/> + <om:Unit rdf:about="&om;furlong-International"/> + <om:Unit rdf:about="&om;inch-International"/> + <om:Unit rdf:about="&om;lightYear"/> + <om:Unit rdf:about="&om;metre"/> + <om:Unit rdf:about="&om;micron"/> + <om:Unit rdf:about="&om;mil-Length"/> + <om:Unit rdf:about="&om;mile-Statute"/> + <om:Unit rdf:about="&om;mile-USSurvey"/> + <om:Unit rdf:about="&om;nauticalMile-International"/> + <om:Unit rdf:about="&om;parsec"/> + <om:Unit rdf:about="&om;pica-ATA"/> + <om:Unit rdf:about="&om;pica-Postscript"/> + <om:Unit rdf:about="&om;pica-TeX"/> + <om:Unit rdf:about="&om;point-ATA"/> + <om:Unit rdf:about="&om;point-Didot"/> + <om:Unit rdf:about="&om;point-Postscript"/> + <om:Unit rdf:about="&om;point-TeX"/> + <om:Unit rdf:about="&om;rod-US"/> + <om:Unit rdf:about="&om;solarRadius"/> + <om:Unit rdf:about="&om;yard-International"/> + <om:PrefixedUnit rdf:about="&om;gigaparsec"/> + <om:PrefixedUnit rdf:about="&om;kiloparsec"/> + <om:PrefixedUnit rdf:about="&om;megaparsec"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedMetre"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Length"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;LengthUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Metre Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctometre"> + <rdfs:label xml:lang="en">yoctometre</rdfs:label> + <rdfs:label xml:lang="nl">yoctometer</rdfs:label> + <rdfs:comment xml:lang="en">The yoctometre is a unit of length defined as 1.0e-24 metre.</rdfs:comment> + <om:symbol>ym</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptometre"> + <rdfs:label xml:lang="en">zeptometre</rdfs:label> + <rdfs:label xml:lang="nl">zeptometer</rdfs:label> + <rdfs:comment xml:lang="en">The zeptometre is a unit of length defined as 1.0e-21 metre.</rdfs:comment> + <om:symbol>zm</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attometre"> + <rdfs:label xml:lang="en">attometre</rdfs:label> + <rdfs:label xml:lang="nl">attometer</rdfs:label> + <rdfs:comment xml:lang="en">The attometre is a unit of length defined as 1.0e-18 metre.</rdfs:comment> + <om:symbol>am</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtometre"> + <rdfs:label xml:lang="en">femtometre</rdfs:label> + <rdfs:label xml:lang="nl">femtometer</rdfs:label> + <!-- <rdfs:label xml:lang="zh">飛米</rdfs:label> --> + <rdfs:label xml:lang="zh">1/(10^15)米</rdfs:label> + <rdfs:comment xml:lang="en">The femtometre is a unit of length defined as 1.0e-15 metre.</rdfs:comment> + <om:symbol>fm</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picometre"> + <rdfs:label xml:lang="en">picometre</rdfs:label> + <rdfs:label xml:lang="nl">picometer</rdfs:label> + <!-- <rdfs:label xml:lang="zh">皮米</rdfs:label> --> + <rdfs:label xml:lang="zh">1/(10^12)米</rdfs:label> + <rdfs:comment xml:lang="en">The picometre is a unit of length defined as 1.0e-12 metre.</rdfs:comment> + <om:symbol>pm</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanometre"> + <rdfs:label xml:lang="en">nanometre</rdfs:label> + <rdfs:label xml:lang="nl">nanometer</rdfs:label> +<!-- <rdfs:label xml:lang="zh">纳米</rdfs:label> --> + <rdfs:comment xml:lang="en">The nanometre is a unit of length defined as 1.0e-9 metre.</rdfs:comment> + <om:symbol>nm</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;micrometre"> + <rdfs:label xml:lang="en">micrometre</rdfs:label> + <rdfs:label xml:lang="nl">micrometer</rdfs:label> + <rdfs:label xml:lang="zh">微米</rdfs:label> + <rdfs:comment xml:lang="en">The micrometre is a unit of length defined as 1.0e-6 metre.</rdfs:comment> + <om:symbol>μm</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millimetre"> + <rdfs:label xml:lang="en">millimetre</rdfs:label> + <rdfs:label xml:lang="nl">millimeter</rdfs:label> + <rdfs:label xml:lang="zh">毫米</rdfs:label> + <rdfs:comment xml:lang="en">The millimetre is a unit of length defined as 1.0e-3 metre.</rdfs:comment> + <om:symbol>mm</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centimetre"> + <rdfs:label xml:lang="en">centimetre</rdfs:label> + <rdfs:label xml:lang="nl">centimeter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">厘米</rdfs:label> --> + <rdfs:comment xml:lang="en">The centimetre is a unit of length defined as 1.0e-2 metre.</rdfs:comment> + <om:symbol>cm</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decimetre"> + <rdfs:label xml:lang="en">decimetre</rdfs:label> + <rdfs:label xml:lang="nl">decimeter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">分米</rdfs:label> --> + <rdfs:comment xml:lang="en">The decimetre is a unit of length defined as 1.0e-1 metre.</rdfs:comment> + <om:symbol>dm</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decametre"> + <rdfs:label xml:lang="en">decametre</rdfs:label> + <rdfs:label xml:lang="nl">decameter</rdfs:label> + <rdfs:comment xml:lang="en">The decametre is a unit of length defined as 1.0e1 metre.</rdfs:comment> + <om:symbol>dam</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectometre"> + <rdfs:label xml:lang="en">hectometre</rdfs:label> + <rdfs:label xml:lang="nl">hectometer</rdfs:label> + <rdfs:comment xml:lang="en">The hectometre is a unit of length defined as 1.0e2 metre.</rdfs:comment> + <om:symbol>hm</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilometre"> + <rdfs:label xml:lang="en">kilometre</rdfs:label> + <rdfs:label xml:lang="nl">kilometer</rdfs:label> + <!-- <rdfs:label xml:lang="zh">千米</rdfs:label> --> + <rdfs:label xml:lang="zh">公里</rdfs:label> + <rdfs:comment xml:lang="en">The kilometre is a unit of length defined as 1.0e3 metre.</rdfs:comment> + <om:symbol>km</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megametre"> + <rdfs:label xml:lang="en">megametre</rdfs:label> + <rdfs:label xml:lang="nl">megameter</rdfs:label> + <!-- <rdfs:label xml:lang="zh">兆米</rdfs:label> --> + <rdfs:label xml:lang="zh">百万米</rdfs:label> + <rdfs:comment xml:lang="en">The megametre is a unit of length defined as 1.0e6 metre.</rdfs:comment> + <om:symbol>Mm</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigametre"> + <rdfs:label xml:lang="en">gigametre</rdfs:label> + <rdfs:label xml:lang="nl">gigameter</rdfs:label> + <!-- <rdfs:label xml:lang="zh">吉米</rdfs:label> --> + <rdfs:label xml:lang="zh">10^9米</rdfs:label> + <rdfs:comment xml:lang="en">The gigametre is a unit of length defined as 1.0e9 metre.</rdfs:comment> + <om:symbol>Gm</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;terametre"> + <rdfs:label xml:lang="en">terametre</rdfs:label> + <rdfs:label xml:lang="nl">terameter</rdfs:label> + <!-- <rdfs:label xml:lang="zh">太米</rdfs:label> --> + <rdfs:label xml:lang="zh">10^12米</rdfs:label> + <rdfs:comment xml:lang="en">The terametre is a unit of length defined as 1.0e12 metre.</rdfs:comment> + <om:unofficialAbbreviation>10^9 km</om:unofficialAbbreviation> + <om:symbol>Tm</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petametre"> + <rdfs:label xml:lang="en">petametre</rdfs:label> + <rdfs:label xml:lang="nl">petameter</rdfs:label> + <!-- <rdfs:label xml:lang="zh">拍米</rdfs:label> --> + <rdfs:label xml:lang="zh">10^15米</rdfs:label> + <rdfs:comment xml:lang="en">The petametre is a unit of length defined as 1.0e15 metre.</rdfs:comment> + <om:symbol>Pm</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exametre"> + <rdfs:label xml:lang="en">exametre</rdfs:label> + <rdfs:label xml:lang="nl">exameter</rdfs:label> + <!-- <rdfs:label xml:lang="zh">艾米</rdfs:label> --> + <rdfs:label xml:lang="zh">千兆兆米</rdfs:label> + <rdfs:comment xml:lang="en">The exametre is a unit of length defined as 1.0e18 metre.</rdfs:comment> + <om:symbol>Em</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettametre"> + <rdfs:label xml:lang="en">zettametre</rdfs:label> + <rdfs:label xml:lang="nl">zettameter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">泽米</rdfs:label> --> + <rdfs:comment xml:lang="en">The zettametre is a unit of length defined as 1.0e21 metre.</rdfs:comment> + <om:symbol>Zm</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottametre"> + <rdfs:label xml:lang="en">yottametre</rdfs:label> + <rdfs:label xml:lang="nl">yottameter</rdfs:label> + <!-- <rdfs:label xml:lang="zh">尧米</rdfs:label> --> + <rdfs:label xml:lang="zh">10^24米</rdfs:label> + <rdfs:comment xml:lang="en">The yottametre is a unit of length defined as 1.0e24 metre.</rdfs:comment> + <om:symbol>Ym</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedMetre"> + <rdfs:label xml:lang="en">prefixed metre</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;metre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Length"> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Breadth"> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Depth"> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Distance"> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Height"> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Thickness"> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Width"> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Radius"> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Diameter"> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Circumference"> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + </owl:Class> + + <!-- Length Unit Ontology --> + + <om:Unit rdf:about="&om;angstrom"> + <rdfs:label xml:lang="en">angstrom</rdfs:label> + <rdfs:label xml:lang="nl">ångström</rdfs:label> + <om:unofficialLabel xml:lang="en">ångström</om:unofficialLabel> + <om:unofficialLabel xml:lang="nl">angstrom</om:unofficialLabel> + <rdfs:comment xml:lang="en">The angstrom 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.</rdfs:comment> + <om:symbol>Å</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- <om:hasDefinition rdf:resource="&om;_1.0e-10Metre"/> --> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.00000000010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;BirminghamGauge"> + <rdfs:label xml:lang="en">Birmingham gauge</rdfs:label> +<!-- <om:alternativeLabel xml:lang="en">gauge</om:alternativeLabel> --> + <om:symbol>G</om:symbol> + <om:alternativeSymbol>GA</om:alternativeSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;chain"> + <rdfs:label xml:lang="en">chain</rdfs:label> + <rdfs:comment xml:lang="en">The chain is a unit of length defined as 20.1168 metre.</rdfs:comment> + <om:symbol>ch</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">20.1168</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;fathom-USSurvey"> + <rdfs:label xml:lang="en">fathom (US survey)</rdfs:label> + <om:alternativeLabel xml:lang="en">US survey fathom</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US survey fathom is a unit of length defined as 1.828804 metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">1.828804</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;fermi"> + <rdfs:label xml:lang="en">fermi</rdfs:label> + <rdfs:label xml:lang="nl">fermi</rdfs:label> + <rdfs:comment xml:lang="en">The fermi is a unit of length defined as 1.0e-15 metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0000000000000010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;foot-International"> + <rdfs:label xml:lang="en">foot (international)</rdfs:label> + <om:alternativeLabel xml:lang="en">international foot</om:alternativeLabel> + <!-- <rdfs:label xml:lang="zh">英尺</rdfs:label> --> + <rdfs:label xml:lang="zh">英尺(国际)</rdfs:label> + <rdfs:comment xml:lang="en">The international foot is a unit of length defined as 3.048e-1 metre.</rdfs:comment> + <om:symbol>ft</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.3048</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;foot-USSurvey"> + <rdfs:label xml:lang="en">foot (US survey)</rdfs:label> + <om:alternativeLabel xml:lang="en">US survey foot</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US survey foot is a unit of length defined as 3.048006e-1 metre.</rdfs:comment> + <om:symbol>ft</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.3048006</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;FrenchGauge"> + <rdfs:label xml:lang="en">French gauge</rdfs:label> + <om:symbol>Fr</om:symbol> + <om:alternativeSymbol>Fg</om:alternativeSymbol> + <om:alternativeSymbol>FR</om:alternativeSymbol> + <om:alternativeSymbol>F</om:alternativeSymbol> + <om:alternativeSymbol>CH</om:alternativeSymbol> + <om:alternativeSymbol>Ch</om:alternativeSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;furlong-International"> + <rdfs:label xml:lang="en">furlong (international)</rdfs:label> + <om:alternativeLabel xml:lang="en">international furlong</om:alternativeLabel> + <rdfs:comment xml:lang="en">The international furlong is a unit of length defined as 201.168 metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">201.168</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;inch-International"> + <rdfs:label xml:lang="en">inch (international)</rdfs:label> + <!-- <rdfs:label xml:lang="zh">英寸</rdfs:label> --> + <rdfs:label xml:lang="zh">英寸(国际)</rdfs:label> + <om:alternativeLabel xml:lang="en">international inch</om:alternativeLabel> + <rdfs:comment xml:lang="en">The international inch is a unit of length defined as 2.54e-2 metre.</rdfs:comment> + <om:symbol>in</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0254</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;micron"> + <rdfs:label xml:lang="en">micron</rdfs:label> + <rdfs:label xml:lang="nl">micron</rdfs:label> + <rdfs:comment xml:lang="en">The micron is a unit of length defined as 1.0e-6 metre.</rdfs:comment> + <om:symbol>μ</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0000010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;mil-Length"> + <rdfs:label xml:lang="en">mil (length)</rdfs:label> + <om:alternativeLabel xml:lang="en">thou</om:alternativeLabel> + <rdfs:comment xml:lang="en">The mil (length) is a unit of length defined as 2.54e-5 metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0000254</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;mile-Statute"> + <rdfs:label xml:lang="en">mile (statute)</rdfs:label> + <om:alternativeLabel xml:lang="en">statute mile</om:alternativeLabel> + <rdfs:comment xml:lang="en">The statute mile is a unit of length defined as 1.609344e3 metre.</rdfs:comment> + <om:symbol>mi</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">1609.344</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;mile-USSurvey"> + <rdfs:label xml:lang="en">mile (US survey)</rdfs:label> + <om:alternativeLabel xml:lang="en">US survey mile</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US survey mile is a unit of length defined as 1.609347e3 metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">1609.347</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;nauticalMile-International"> + <rdfs:label xml:lang="en">nautical mile (international)</rdfs:label> + <rdfs:label xml:lang="nl">zeemijl (internationaal)</rdfs:label> + <!-- <rdfs:label xml:lang="zh">海里</rdfs:label> --> + <rdfs:label xml:lang="zh">海里(国际)</rdfs:label> + <om:alternativeLabel xml:lang="en">international nautical mile</om:alternativeLabel> + <rdfs:comment xml:lang="en">The international nautical mile is a unit of length defined as 1852 metre.</rdfs:comment> + <om:symbol>nmi</om:symbol> + <om:alternativeSymbol>M</om:alternativeSymbol> + <om:alternativeSymbol>NM</om:alternativeSymbol> + <om:alternativeSymbol>nm</om:alternativeSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">1852</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;rod-US"> + <rdfs:label xml:lang="en">rod (US)</rdfs:label> + <om:alternativeLabel xml:lang="en">US rod</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">perch</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">pole</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US rod is a unit of length defined as 5.029210 metre.</rdfs:comment> + <om:symbol>rd</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">5.029210</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;yard-International"> + <rdfs:label xml:lang="en">yard (international)</rdfs:label> + <!-- <rdfs:label xml:lang="zh">碼</rdfs:label> --> + <rdfs:label xml:lang="zh">码(国际)</rdfs:label> + <om:alternativeLabel xml:lang="en">international yard</om:alternativeLabel> + <rdfs:comment xml:lang="en">The international yard is a unit of length defined as 9.144e-1 metre.</rdfs:comment> + <om:symbol>yd</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.9144</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e-10Metre"> + <om:hasNumericalValue>1.0e-10</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.0e-15Metre"> + <om:hasNumericalValue>1.0e-15</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.0e-6Metre"> + <om:hasNumericalValue>1.0e-6</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.495978707e11Metre"> + <om:hasNumericalValue>1.495978707e11</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.609344e3Metre"> + <om:hasNumericalValue>1.609344e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.609347e3Metre"> + <om:hasNumericalValue>1.609347e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.828804Metre"> + <om:hasNumericalValue>1.828804</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1852Metre"> + <om:hasNumericalValue>1852</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_2.011684e1Metre"> + <om:hasNumericalValue>2.011684e1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_2.54e-2Metre"> + <om:hasNumericalValue>2.54e-2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_2.54e-5Metre"> + <om:hasNumericalValue>2.54e-5</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_201.168Metre"> + <om:hasNumericalValue>201.168</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_3.048e-1Metre"> + <om:hasNumericalValue>3.048e-1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_3.048006e-1Metre"> + <om:hasNumericalValue>3.048006e-1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_3.08567758149137e16Metre"> + <om:hasNumericalValue>3.08567758149137e16</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_5.029210Metre"> + <om:hasNumericalValue>5.029210</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_9.144e-1Metre"> + <om:hasNumericalValue>9.144e-1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_9.46073e15Metre"> + <om:hasNumericalValue>9.46073e15</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Length"> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + </owl:Class> + + <owl:Class rdf:about="&om;Breadth"> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + </owl:Class> + + <owl:Class rdf:about="&om;Depth"> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + </owl:Class> + + <owl:Class rdf:about="&om;Distance"> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + </owl:Class> + + <owl:Class rdf:about="&om;Height"> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + </owl:Class> + + <owl:Class rdf:about="&om;Thickness"> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + </owl:Class> + + <owl:Class rdf:about="&om;Width"> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + </owl:Class> + + <owl:Class rdf:about="&om;Radius"> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + </owl:Class> + + <owl:Class rdf:about="&om;Diameter"> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + </owl:Class> + + <owl:Class rdf:about="&om;Circumference"> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + </owl:Class> + + <!-- Square Metre Ontology --> + + <om:UnitExponentiation rdf:about="&om;squareMetre"> + <rdfs:label xml:lang="en">square metre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante meter</rdfs:label> + <rdfs:label xml:lang="zh">平方米</rdfs:label> + <rdfs:comment xml:lang="en">Square metre is a unit of area defined as the area of a square whose sides measure exactly one metre.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>m2</om:symbol> + <om:hasBase rdf:resource="&om;metre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:UnitExponentiation> + + <owl:Class rdf:about="&om;Area"> + <om:commonlyHasUnit rdf:resource="&om;squareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;AreaUnit"> + <rdfs:label xml:lang="en">area unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;acre-International"/> + <om:Unit rdf:about="&om;acre-USSurvey"/> + <om:Unit rdf:about="&om;are"/> + <om:Unit rdf:about="&om;barn"/> + <om:Unit rdf:about="&om;circularMil"/> + <om:UnitExponentiation rdf:about="&om;squareMetre"/> + <om:UnitExponentiation rdf:about="&om;squareAngstrom"/> + <om:UnitExponentiation rdf:about="&om;squareInch-International"/> + <om:UnitExponentiation rdf:about="&om;squareFoot-International"/> + <om:UnitExponentiation rdf:about="&om;squareYard-International"/> + <om:UnitExponentiation rdf:about="&om;squareMile-International"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedAre"/> + <owl:Class rdf:about="&om;SquarePrefixedMetre"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Area"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;AreaUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Square Metre Multiples and Submultiples Ontology --> + + <om:SquarePrefixedMetre rdf:about="&om;squareYoctometre"> + <rdfs:label xml:lang="en">square yoctometre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante yoctometer</rdfs:label> + <om:symbol>ym2</om:symbol> + <om:hasBase rdf:resource="&om;yoctometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squareZeptometre"> + <rdfs:label xml:lang="en">square zeptometre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante zeptometer</rdfs:label> + <om:symbol>zm2</om:symbol> + <om:hasBase rdf:resource="&om;zeptometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squareAttometre"> + <rdfs:label xml:lang="en">square attometre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante attometer</rdfs:label> + <om:symbol>am2</om:symbol> + <om:hasBase rdf:resource="&om;attometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squareFemtometre"> + <rdfs:label xml:lang="en">square femtometre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante femtometer</rdfs:label> +<!-- <rdfs:label xml:lang="zh">平方飛米</rdfs:label> --> + <om:symbol>fm2</om:symbol> + <om:hasBase rdf:resource="&om;femtometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squarePicometre"> + <rdfs:label xml:lang="en">square picometre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante picometer</rdfs:label> +<!-- <rdfs:label xml:lang="zh">平方皮米</rdfs:label> --> + <om:symbol>pm2</om:symbol> + <om:hasBase rdf:resource="&om;picometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squareNanometre"> + <rdfs:label xml:lang="en">square nanometre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante nanometer</rdfs:label> +<!-- <rdfs:label xml:lang="zh">平方纳米</rdfs:label> --> + <om:symbol>nm2</om:symbol> + <om:hasBase rdf:resource="&om;nanometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squareMicrometre"> + <rdfs:label xml:lang="en">square micrometre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante micrometer</rdfs:label> +<!-- <rdfs:label xml:lang="zh">平方微米</rdfs:label> --> + <om:symbol>μm2</om:symbol> + <om:hasBase rdf:resource="&om;micrometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squareMillimetre"> + <rdfs:label xml:lang="en">square millimetre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante millimeter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">平方毫米</rdfs:label> --> + <om:symbol>mm2</om:symbol> + <om:hasBase rdf:resource="&om;millimetre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squareCentimetre"> + <rdfs:label xml:lang="en">square centimetre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante centimeter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">平方厘米</rdfs:label> --> + <om:symbol>cm2</om:symbol> + <om:hasBase rdf:resource="&om;centimetre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squareDecimetre"> + <rdfs:label xml:lang="en">square decimetre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante decimeter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">平方分米</rdfs:label> --> + <om:symbol>dm2</om:symbol> + <om:hasBase rdf:resource="&om;decimetre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squareDecametre"> + <rdfs:label xml:lang="en">square decametre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante decameter</rdfs:label> + <om:symbol>dam2</om:symbol> + <om:hasBase rdf:resource="&om;decametre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squareHectometre"> + <rdfs:label xml:lang="en">square hectometre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante hectometer</rdfs:label> + <om:symbol>hm2</om:symbol> + <om:hasBase rdf:resource="&om;hectometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squareKilometre"> + <rdfs:label xml:lang="en">square kilometre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante kilometer</rdfs:label> +<!-- <rdfs:label xml:lang="zh">平方千米</rdfs:label> --> + <om:unofficialAbbreviation>10^6 m2</om:unofficialAbbreviation> + <om:symbol>km2</om:symbol> + <om:hasBase rdf:resource="&om;kilometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squareMegametre"> + <rdfs:label xml:lang="en">square megametre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante megameter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">平方兆米</rdfs:label> --> + <om:symbol>Mm2</om:symbol> + <om:hasBase rdf:resource="&om;megametre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squareGigametre"> + <rdfs:label xml:lang="en">square gigametre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante gigameter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">平方吉米</rdfs:label> --> + <om:symbol>Gm2</om:symbol> + <om:hasBase rdf:resource="&om;gigametre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squareTerametre"> + <rdfs:label xml:lang="en">square terametre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante terameter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">平方太米</rdfs:label> --> + <om:symbol>Tm2</om:symbol> + <om:hasBase rdf:resource="&om;terametre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squarePetametre"> + <rdfs:label xml:lang="en">square petametre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante petameter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">平方拍米</rdfs:label> --> + <om:symbol>Pm2</om:symbol> + <om:hasBase rdf:resource="&om;petametre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squareExametre"> + <rdfs:label xml:lang="en">square exametre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante exameter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">平方艾米</rdfs:label> --> + <om:symbol>Em2</om:symbol> + <om:hasBase rdf:resource="&om;exametre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squareZettametre"> + <rdfs:label xml:lang="en">square zettametre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante zettameter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">平方泽米</rdfs:label> --> + <om:symbol>Zm2</om:symbol> + <om:hasBase rdf:resource="&om;zettametre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <om:SquarePrefixedMetre rdf:about="&om;squareYottametre"> + <rdfs:label xml:lang="en">square yottametre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante yottameter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">平方尧米</rdfs:label> --> + <om:symbol>Ym2</om:symbol> + <om:hasBase rdf:resource="&om;yottametre"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:SquarePrefixedMetre> + + <owl:Class rdf:about="&om;SquarePrefixedMetre"> + <rdfs:label xml:lang="en">square prefixed metre</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitExponentiation"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasBase"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedMetre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasBase"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasExponent"/> + <owl:hasValue rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">2</owl:hasValue> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasExponent"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Area"> + <om:commonlyHasUnit rdf:resource="&om;squareAttometre"/> + <om:commonlyHasUnit rdf:resource="&om;squareCentimetre"/> + <om:commonlyHasUnit rdf:resource="&om;squareDecametre"/> + <om:commonlyHasUnit rdf:resource="&om;squareDecimetre"/> + <om:commonlyHasUnit rdf:resource="&om;squareExametre"/> + <om:commonlyHasUnit rdf:resource="&om;squareFemtometre"/> + <om:commonlyHasUnit rdf:resource="&om;squareGigametre"/> + <om:commonlyHasUnit rdf:resource="&om;squareHectometre"/> + <om:commonlyHasUnit rdf:resource="&om;squareKilometre"/> + <om:commonlyHasUnit rdf:resource="&om;squareMegametre"/> + <om:commonlyHasUnit rdf:resource="&om;squareMicrometre"/> + <om:commonlyHasUnit rdf:resource="&om;squareMillimetre"/> + <om:commonlyHasUnit rdf:resource="&om;squareNanometre"/> + <om:commonlyHasUnit rdf:resource="&om;squarePetametre"/> + <om:commonlyHasUnit rdf:resource="&om;squarePicometre"/> + <om:commonlyHasUnit rdf:resource="&om;squareTerametre"/> + </owl:Class> + + <!-- Are Ontology --> + + <om:Unit rdf:about="&om;are"> + <rdfs:label xml:lang="en">are</rdfs:label> + <rdfs:label xml:lang="nl">are</rdfs:label> + <rdfs:comment xml:lang="en">The are is a unit of area defined as 100 square metre.</rdfs:comment> + <om:symbol>a</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">100</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;squareMetre"/> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e2SquareMetre"> + <om:hasNumericalValue>1.0e2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;squareMetre"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Area"> + <om:commonlyHasUnit rdf:resource="&om;are"/> + </owl:Class> + + <!-- Are Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;centiare"> + <rdfs:label xml:lang="en">centiare</rdfs:label> + <rdfs:label xml:lang="nl">centiare</rdfs:label> + <rdfs:comment xml:lang="en">The centiare is a unit of area defined as 1.0e-2 are.</rdfs:comment> + <om:symbol>ca</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;are"/> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectare"> + <rdfs:label xml:lang="en">hectare</rdfs:label> + <rdfs:label xml:lang="nl">hectare</rdfs:label> +<!-- <rdfs:label xml:lang="zh">公顷</rdfs:label> --> + <rdfs:comment xml:lang="en">The hectare is a unit of area defined as 1.0e2 are.</rdfs:comment> + <om:symbol>ha</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;are"/> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedAre"> + <rdfs:label xml:lang="en">prefixed are</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;are"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Area"> + <om:commonlyHasUnit rdf:resource="&om;centiare"/> + <om:commonlyHasUnit rdf:resource="&om;hectare"/> + </owl:Class> + + <!-- Area Unit Ontology --> + + <om:Unit rdf:about="&om;acre-International"> + <rdfs:label xml:lang="en">acre (international)</rdfs:label> + <!-- <rdfs:label xml:lang="zh">英亩</rdfs:label> --> + <rdfs:label xml:lang="zh">英亩(国际)</rdfs:label> + <om:alternativeLabel xml:lang="en">international acre</om:alternativeLabel> + <rdfs:comment xml:lang="en">The international acre is a unit of area defined as 4.0468564224e3 square metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:symbol>ac</om:symbol> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">4046.8564224</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;squareMetre"/> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;acre-USSurvey"> + <rdfs:label xml:lang="en">acre (US survey)</rdfs:label> + <!-- <rdfs:label xml:lang="zh">英亩</rdfs:label> --> + <rdfs:label xml:lang="zh">英亩(美国调查)</rdfs:label> + <om:alternativeLabel xml:lang="en">US survey acre</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US survey acre is a unit of area defined as 4.046872609874252e3 square metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:symbol>ac</om:symbol> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">4046.872609874252</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;squareMetre"/> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;barn"> + <rdfs:label xml:lang="en">barn</rdfs:label> + <rdfs:comment xml:lang="en">The barn is a unit of area defined as 1.0e-28 square metre.</rdfs:comment> + <om:symbol>b</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.00000000000000000000000000010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;squareMetre"/> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;circularMil"> + <rdfs:label xml:lang="en">circular mil</rdfs:label> + <rdfs:comment xml:lang="en">The cicular mil is a unit of area defined as 5.067075e-10 square metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0000000005067075</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;squareMetre"/> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:Unit> + + <om:UnitExponentiation rdf:about="&om;squareAngstrom"> + <rdfs:label xml:lang="en">square angstrom</rdfs:label> + <om:symbol>Å2</om:symbol> + <om:hasBase rdf:resource="&om;angstrom"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:UnitExponentiation> + + <om:UnitExponentiation rdf:about="&om;squareInch-International"> + <rdfs:label xml:lang="en">square inch (international)</rdfs:label> + <om:symbol>in2</om:symbol> + <om:hasBase rdf:resource="&om;inch-International"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:UnitExponentiation> + + <om:UnitExponentiation rdf:about="&om;squareFoot-International"> + <rdfs:label xml:lang="en">square foot (international)</rdfs:label> + <om:symbol>ft2</om:symbol> + <om:hasBase rdf:resource="&om;foot-International"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:UnitExponentiation> + + <om:UnitExponentiation rdf:about="&om;squareYard-International"> + <rdfs:label xml:lang="en">square yard (international)</rdfs:label> + <om:symbol>yd2</om:symbol> + <om:hasBase rdf:resource="&om;yard-International"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:UnitExponentiation> + + <om:UnitExponentiation rdf:about="&om;squareMile-Statute"> + <rdfs:label xml:lang="en">square mile (statute)</rdfs:label> + <om:symbol>mi2</om:symbol> + <om:hasBase rdf:resource="&om;mile-International"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:UnitExponentiation> + + <!-- <om:Measure rdf:about="&om;_1.0e-28SquareMetre"> + <om:hasNumericalValue>1.0e-28</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;squareMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.0468564224e3SquareMetre"> + <om:hasNumericalValue>4.0468564224e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;squareMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.046872609874252e3SquareMetre"> + <om:hasNumericalValue>4.046872609874252e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;squareMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_5.067075e-10SquareMetre"> + <om:hasNumericalValue>5.067075e-10</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;squareMetre"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Area"> + <om:commonlyHasUnit rdf:resource="&om;acre-International"/> + <om:commonlyHasUnit rdf:resource="&om;acre-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;barn"/> + <om:commonlyHasUnit rdf:resource="&om;circularMil"/> + <om:commonlyHasUnit rdf:resource="&om;squareAngstrom"/> + <om:commonlyHasUnit rdf:resource="&om;squareInch-International"/> + <om:commonlyHasUnit rdf:resource="&om;squareFoot-International"/> + <om:commonlyHasUnit rdf:resource="&om;squareYard-International"/> + <om:commonlyHasUnit rdf:resource="&om;squareMile-International"/> + </owl:Class> + + <!-- Cubic Metre Ontology --> + + <om:UnitExponentiation rdf:about="&om;cubicMetre"> + <rdfs:label xml:lang="en">cubic metre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke meter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">立方米</rdfs:label> --> + <rdfs:comment xml:lang="en">Cubic metre is a unit of volume defined as the volume of a cube whose sides measure exactly one metre.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>m3</om:symbol> + <om:hasBase rdf:resource="&om;metre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:UnitExponentiation> + + <owl:Class rdf:about="&om;Volume"> + <om:commonlyHasUnit rdf:resource="&om;cubicMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumeUnit"> + <rdfs:label xml:lang="en">volume unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;acreFoot"/> + <om:Unit rdf:about="&om;barrel-US"/> + <om:Unit rdf:about="&om;bushel-US"/> + <om:Unit rdf:about="&om;cord"/> + <om:Unit rdf:about="&om;cup-USCustomary"/> + <om:Unit rdf:about="&om;dryGallon-US"/> + <om:Unit rdf:about="&om;dryPint-US"/> + <om:Unit rdf:about="&om;dryQuart-US"/> + <om:Unit rdf:about="&om;fluidOunce-Imperial"/> + <om:Unit rdf:about="&om;fluidOunce-US"/> + <om:Unit rdf:about="&om;gallon-Imperial"/> + <om:Unit rdf:about="&om;gallon-US"/> + <om:Unit rdf:about="&om;gill-Imperial"/> + <om:Unit rdf:about="&om;gill-US"/> + <om:Unit rdf:about="&om;litre"/> + <om:Unit rdf:about="&om;liquidPint-US"/> + <om:Unit rdf:about="&om;liquidQuart-US"/> + <om:Unit rdf:about="&om;peck-US"/> + <om:Unit rdf:about="&om;pint-Imperial"/> + <om:Unit rdf:about="&om;quart-Imperial"/> + <om:Unit rdf:about="&om;stere"/> + <om:Unit rdf:about="&om;tablespoon-US"/> + <om:Unit rdf:about="&om;teaspoon-US"/> + <om:Unit rdf:about="&om;dessertspoon"/> + <om:Unit rdf:about="&om;ton-Register"/> + <om:UnitExponentiation rdf:about="&om;cubicMetre"/> + <om:UnitExponentiation rdf:about="&om;cubicParsec"/> + <om:UnitExponentiation rdf:about="&om;cubicKiloparsec"/> + <om:UnitExponentiation rdf:about="&om;cubicAngstrom"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedLitre"/> + <owl:Class rdf:about="&om;CubicPrefixedMetre"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Volume"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;VolumeUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Cubic Metre Multiples and Submultiples Ontology --> + + <om:CubicPrefixedMetre rdf:about="&om;cubicYoctometre"> + <rdfs:label xml:lang="en">cubic yoctometre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke yoctometer</rdfs:label> + <om:symbol>ym3</om:symbol> + <om:hasBase rdf:resource="&om;yoctometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicZeptometre"> + <rdfs:label xml:lang="en">cubic zeptometre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke zeptometer</rdfs:label> + <om:symbol>zm3</om:symbol> + <om:hasBase rdf:resource="&om;zeptometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicAttometre"> + <rdfs:label xml:lang="en">cubic attometre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke attometer</rdfs:label> + <om:symbol>am3</om:symbol> + <om:hasBase rdf:resource="&om;attometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicFemtometre"> + <rdfs:label xml:lang="en">cubic femtometre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke femtometer</rdfs:label> +<!-- <rdfs:label xml:lang="zh">立方飛米</rdfs:label> --> + <om:symbol>fm3</om:symbol> + <om:hasBase rdf:resource="&om;femtometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicPicometre"> + <rdfs:label xml:lang="en">cubic picometre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke picometer</rdfs:label> +<!-- <rdfs:label xml:lang="zh">立方皮米</rdfs:label> --> + <om:symbol>pm3</om:symbol> + <om:hasBase rdf:resource="&om;picometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicNanometre"> + <rdfs:label xml:lang="en">cubic nanometre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke nanometer</rdfs:label> +<!-- <rdfs:label xml:lang="zh">立方纳米</rdfs:label> --> + <om:symbol>nm3</om:symbol> + <om:hasBase rdf:resource="&om;nanometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicMicrometre"> + <rdfs:label xml:lang="en">cubic micrometre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke micrometer</rdfs:label> +<!-- <rdfs:label xml:lang="zh">立方微米</rdfs:label> --> + <om:symbol>μm3</om:symbol> + <om:hasBase rdf:resource="&om;micrometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicMillimetre"> + <rdfs:label xml:lang="en">cubic millimetre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke millimeter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">立方毫米</rdfs:label> --> + <om:symbol>mm3</om:symbol> + <om:hasBase rdf:resource="&om;millimetre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicCentimetre"> + <rdfs:label xml:lang="en">cubic centimetre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke centimeter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">立方厘米</rdfs:label> --> + <om:symbol>cm3</om:symbol> + <om:hasBase rdf:resource="&om;centimetre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicDecimetre"> + <rdfs:label xml:lang="en">cubic decimetre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke decimeter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">立方分米</rdfs:label> --> + <om:symbol>dm3</om:symbol> + <om:hasBase rdf:resource="&om;decimetre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicDecametre"> + <rdfs:label xml:lang="en">cubic decametre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke decameter</rdfs:label> + <om:symbol>dam3</om:symbol> + <om:hasBase rdf:resource="&om;decametre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicHectometre"> + <rdfs:label xml:lang="en">cubic hectometre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke hectometer</rdfs:label> + <om:symbol>hm3</om:symbol> + <om:hasBase rdf:resource="&om;hectometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicKilometre"> + <rdfs:label xml:lang="en">cubic kilometre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke kilometer</rdfs:label> +<!-- <rdfs:label xml:lang="zh">立方千米</rdfs:label> --> + <om:symbol>km3</om:symbol> + <om:hasBase rdf:resource="&om;kilometre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicMegametre"> + <rdfs:label xml:lang="en">cubic megametre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke megameter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">立方兆米</rdfs:label> --> + <om:symbol>Mm3</om:symbol> + <om:hasBase rdf:resource="&om;megametre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicGigametre"> + <rdfs:label xml:lang="en">cubic gigametre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke gigameter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">立方吉米</rdfs:label> --> + <om:symbol>Gm3</om:symbol> + <om:hasBase rdf:resource="&om;gigametre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicTerametre"> + <rdfs:label xml:lang="en">cubic terametre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke terameter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">立方太米</rdfs:label> --> + <om:symbol>Tm3</om:symbol> + <om:hasBase rdf:resource="&om;terametre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicPetametre"> + <rdfs:label xml:lang="en">cubic petametre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke petameter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">立方拍米</rdfs:label> --> + <om:symbol>Pm3</om:symbol> + <om:hasBase rdf:resource="&om;petametre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicExametre"> + <rdfs:label xml:lang="en">cubic exametre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke exameter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">立方艾米</rdfs:label> --> + <om:symbol>Em3</om:symbol> + <om:hasBase rdf:resource="&om;exametre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicZettametre"> + <rdfs:label xml:lang="en">cubic zettametre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke zettameter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">立方泽米</rdfs:label> --> + <om:symbol>Zm3</om:symbol> + <om:hasBase rdf:resource="&om;zettametre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <om:CubicPrefixedMetre rdf:about="&om;cubicYottametre"> + <rdfs:label xml:lang="en">cubic yottametre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke yottameter</rdfs:label> +<!-- <rdfs:label xml:lang="zh">立方尧米</rdfs:label> --> + <om:symbol>Ym3</om:symbol> + <om:hasBase rdf:resource="&om;yottametre"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:CubicPrefixedMetre> + + <owl:Class rdf:about="&om;CubicPrefixedMetre"> + <rdfs:label xml:lang="en">cubic prefixed metre</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitExponentiation"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasBase"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedMetre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasBase"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasExponent"/> + <owl:hasValue rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">3</owl:hasValue> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasExponent"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Volume"> + <om:commonlyHasUnit rdf:resource="&om;cubicAttometre"/> + <om:commonlyHasUnit rdf:resource="&om;cubicCentimetre"/> + <om:commonlyHasUnit rdf:resource="&om;cubicDecametre"/> + <om:commonlyHasUnit rdf:resource="&om;cubicDecimetre"/> + <om:commonlyHasUnit rdf:resource="&om;cubicExametre"/> + <om:commonlyHasUnit rdf:resource="&om;cubicFemtometre"/> + <om:commonlyHasUnit rdf:resource="&om;cubicGigametre"/> + <om:commonlyHasUnit rdf:resource="&om;cubicHectometre"/> + <om:commonlyHasUnit rdf:resource="&om;cubicKilometre"/> + <om:commonlyHasUnit rdf:resource="&om;cubicMegametre"/> + <om:commonlyHasUnit rdf:resource="&om;cubicMicrometre"/> + <om:commonlyHasUnit rdf:resource="&om;cubicMillimetre"/> + <om:commonlyHasUnit rdf:resource="&om;cubicNanometre"/> + <om:commonlyHasUnit rdf:resource="&om;cubicPetametre"/> + <om:commonlyHasUnit rdf:resource="&om;cubicPicometre"/> + <om:commonlyHasUnit rdf:resource="&om;cubicTerametre"/> + </owl:Class> + + <!-- Litre Ontology --> + + <om:Unit rdf:about="&om;litre"> + <rdfs:label xml:lang="en">litre</rdfs:label> + <rdfs:label xml:lang="nl">liter</rdfs:label> + <!-- <rdfs:label xml:lang="zh">公升</rdfs:label> --> + <rdfs:label xml:lang="zh">升</rdfs:label> + <om:alternativeLabel xml:lang="en">liter</om:alternativeLabel> + <rdfs:comment xml:lang="en">The litre is a unit of volume defined as 1.0e-3 cubic metre.</rdfs:comment> + <om:symbol>l</om:symbol> + <om:alternativeSymbol>L</om:alternativeSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;Volume"> + <om:commonlyHasUnit rdf:resource="&om;litre"/> + </owl:Class> + + <!-- Litre Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctolitre"> + <rdfs:label xml:lang="en">yoctolitre</rdfs:label> + <rdfs:label xml:lang="nl">yoctoliter</rdfs:label> + <om:symbol>yl</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptolitre"> + <rdfs:label xml:lang="en">zeptolitre</rdfs:label> + <rdfs:label xml:lang="nl">zeptoliter</rdfs:label> + <om:symbol>zl</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attolitre"> + <rdfs:label xml:lang="en">attolitre</rdfs:label> + <rdfs:label xml:lang="nl">attoliter</rdfs:label> + <om:symbol>al</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtolitre"> + <rdfs:label xml:lang="en">femtolitre</rdfs:label> + <rdfs:label xml:lang="nl">femtoliter</rdfs:label> + <om:symbol>fl</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picolitre"> + <rdfs:label xml:lang="en">picolitre</rdfs:label> + <rdfs:label xml:lang="nl">picoliter</rdfs:label> + <om:symbol>pl</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanolitre"> + <rdfs:label xml:lang="en">nanolitre</rdfs:label> + <rdfs:label xml:lang="nl">nanoliter</rdfs:label> + <om:symbol>nl</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microlitre"> + <rdfs:label xml:lang="en">microlitre</rdfs:label> + <rdfs:label xml:lang="nl">microliter</rdfs:label> + <om:symbol>μl</om:symbol> + <om:unofficialAbbreviation>ul</om:unofficialAbbreviation> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millilitre"> + <rdfs:label xml:lang="en">millilitre</rdfs:label> + <rdfs:label xml:lang="nl">milliliter</rdfs:label> + <om:symbol>ml</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centilitre"> + <rdfs:label xml:lang="en">centilitre</rdfs:label> + <rdfs:label xml:lang="nl">centiliter</rdfs:label> + <om:symbol>cl</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decilitre"> + <rdfs:label xml:lang="en">decilitre</rdfs:label> + <rdfs:label xml:lang="nl">deciliter</rdfs:label> + <om:symbol>dl</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decalitre"> + <rdfs:label xml:lang="en">decalitre</rdfs:label> + <rdfs:label xml:lang="nl">decaliter</rdfs:label> + <om:symbol>dal</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectolitre"> + <rdfs:label xml:lang="en">hectolitre</rdfs:label> + <rdfs:label xml:lang="nl">hectoliter</rdfs:label> + <om:symbol>hl</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilolitre"> + <rdfs:label xml:lang="en">kilolitre</rdfs:label> + <rdfs:label xml:lang="nl">kiloliter</rdfs:label> + <om:symbol>kl</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megalitre"> + <rdfs:label xml:lang="en">megalitre</rdfs:label> + <rdfs:label xml:lang="nl">megaliter</rdfs:label> + <om:symbol>Ml</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigalitre"> + <rdfs:label xml:lang="en">gigalitre</rdfs:label> + <rdfs:label xml:lang="nl">gigaliter</rdfs:label> + <om:symbol>Gl</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;teralitre"> + <rdfs:label xml:lang="en">teralitre</rdfs:label> + <rdfs:label xml:lang="nl">teraliter</rdfs:label> + <om:symbol>Tl</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petalitre"> + <rdfs:label xml:lang="en">petalitre</rdfs:label> + <rdfs:label xml:lang="nl">petaliter</rdfs:label> + <om:symbol>Pl</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exalitre"> + <rdfs:label xml:lang="en">exalitre</rdfs:label> + <rdfs:label xml:lang="nl">exaliter</rdfs:label> + <om:symbol>El</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettalitre"> + <rdfs:label xml:lang="en">zettalitre</rdfs:label> + <rdfs:label xml:lang="nl">zettaliter</rdfs:label> + <om:symbol>Zl</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottalitre"> + <rdfs:label xml:lang="en">yottalitre</rdfs:label> + <rdfs:label xml:lang="nl">yottaliter</rdfs:label> + <om:symbol>Yl</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:PrefixedUnit> + + <om:UnitMultiple rdf:about="&om;_25Millilitre"> + <rdfs:label xml:lang="en">25 millilitre</rdfs:label> + <rdfs:label xml:lang="nl">25 milliliter</rdfs:label> + <om:symbol>25 ml</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">25</om:hasFactor> + <om:hasUnit rdf:resource="&om;millilitre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:UnitMultiple> + + <!-- <om:Measure rdf:about="&om;_25Millilitre"> --> + <!-- <om:hasNumericalValue>25</om:hasNumericalValue> --> + <!-- <om:hasUnit rdf:resource="&om;millilitre"/> --> + <!-- </om:Measure> --> + + <owl:Class rdf:about="&om;PrefixedLitre"> + <rdfs:label xml:lang="en">prefixed litre</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;litre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Volume"> + <om:commonlyHasUnit rdf:resource="&om;attolitre"/> + <om:commonlyHasUnit rdf:resource="&om;centilitre"/> + <om:commonlyHasUnit rdf:resource="&om;decalitre"/> + <om:commonlyHasUnit rdf:resource="&om;decilitre"/> + <om:commonlyHasUnit rdf:resource="&om;exalitre"/> + <om:commonlyHasUnit rdf:resource="&om;femtolitre"/> + <om:commonlyHasUnit rdf:resource="&om;gigalitre"/> + <om:commonlyHasUnit rdf:resource="&om;hectolitre"/> + <om:commonlyHasUnit rdf:resource="&om;kilolitre"/> + <om:commonlyHasUnit rdf:resource="&om;megalitre"/> + <om:commonlyHasUnit rdf:resource="&om;microlitre"/> + <om:commonlyHasUnit rdf:resource="&om;millilitre"/> + <om:commonlyHasUnit rdf:resource="&om;nanolitre"/> + <om:commonlyHasUnit rdf:resource="&om;petalitre"/> + <om:commonlyHasUnit rdf:resource="&om;picolitre"/> + <om:commonlyHasUnit rdf:resource="&om;teralitre"/> + </owl:Class> + + <!-- Volume Unit Ontology --> + + <om:Unit rdf:about="&om;acreFoot"> + <rdfs:label xml:lang="en">acre foot</rdfs:label> + <rdfs:comment xml:lang="en">The acre foot is a unit of volume defined as 1.233489e3 cubic metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">1233.489</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;barrel-US"> + <rdfs:label xml:lang="en">barrel (US)</rdfs:label> + <om:alternativeLabel xml:lang="en">US barrel</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US barrel is a unit of volume defined as 1.589873e-1 cubic metre.</rdfs:comment> + <om:symbol>bbl</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.1589873</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;bushel-US"> + <rdfs:label xml:lang="en">bushel (US)</rdfs:label> + <om:alternativeLabel xml:lang="en">US bushel</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US bushel is a unit of volume defined as 3.523907e-2 cubic metre.</rdfs:comment> + <om:symbol>bu</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.03523907</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;cord"> + <rdfs:label xml:lang="en">cord</rdfs:label> + <rdfs:comment xml:lang="en">The cord is a unit of volume defined as 3.624556 cubic metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">3.624556</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;cup-USCustomary"> + <rdfs:label xml:lang="en">cup (US customary)</rdfs:label> + <om:alternativeLabel xml:lang="en">US customary cup</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US customary cup is a unit of volume defined as 2.365882e-4 cubic metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0002365882</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + <om:LaTeXCommand>\cupUnit</om:LaTeXCommand> + </om:Unit> + + <om:Unit rdf:about="&om;dryGallon-US"> + <rdfs:label xml:lang="en">dry gallon (US)</rdfs:label> + <om:alternativeLabel xml:lang="en">gallon (US dry)</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">US dry gallon</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US dry gallon is a unit of volume defined as 4.40488377086e-3 cubic metre.</rdfs:comment> + <om:symbol>gal</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.00440488377086</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;dryPint-US"> + <rdfs:label xml:lang="en">dry pint (US)</rdfs:label> + <om:alternativeLabel xml:lang="en">pint (US dry)</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">US dry pint</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US dry pint is a unit of volume defined as 5.506105e-4 cubic metre.</rdfs:comment> + <om:symbol>dry pt</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0005506105</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;dryQuart-US"> + <rdfs:label xml:lang="en">dry quart (US)</rdfs:label> + <om:alternativeLabel xml:lang="en">quart (US dry)</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">US dry quart</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US dry quart is a unit of volume defined as 1.101221e-3 cubic metre.</rdfs:comment> + <om:symbol>dry qt</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.001101221</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;fluidOunce-Imperial"> + <rdfs:label xml:lang="en">fluid ounce (imperial)</rdfs:label> + <om:alternativeLabel xml:lang="en">ounce (imperial fluid)</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">imperial fluid ounce</om:alternativeLabel> + <rdfs:comment xml:lang="en">The imperial fluid ounce is a unit of volume defined as 2.841306e-5 cubic metre.</rdfs:comment> + <om:symbol>fl oz</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.00002841306</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;fluidOunce-US"> + <rdfs:label xml:lang="en">fluid ounce (US)</rdfs:label> + <om:alternativeLabel xml:lang="en">ounce (US fluid)</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">US fluid ounce</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US fluid ounce is a unit of volume defined as 2.957353e-5 cubic metre.</rdfs:comment> + <om:symbol>fl oz</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.00002957353</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;gallon-Imperial"> + <rdfs:label xml:lang="en">gallon (imperial)</rdfs:label> + <om:alternativeLabel xml:lang="en">imperial gallon</om:alternativeLabel> + <rdfs:comment xml:lang="en">The imperial gallon is a unit of volume defined as 4.54609e-3 cubic metre.</rdfs:comment> + <om:symbol>gal</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.00454609</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;gallon-US"> + <rdfs:label xml:lang="en">gallon (US)</rdfs:label> + <om:alternativeLabel xml:lang="en">US gallon</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US gallon is a unit of volume defined as 3.785412e-3 cubic metre.</rdfs:comment> + <om:symbol>gal</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.003785412</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;gill-Imperial"> + <rdfs:label xml:lang="en">gill (imperial)</rdfs:label> + <om:alternativeLabel xml:lang="en">imperial gill</om:alternativeLabel> + <rdfs:comment xml:lang="en">The imperial gill is a unit of volume defined as 1.420653e-4 cubic metre.</rdfs:comment> + <om:symbol>gi</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0001420653</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;gill-US"> + <rdfs:label xml:lang="en">gill (US)</rdfs:label> + <om:alternativeLabel xml:lang="en">US gill</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US gill is a unit of volume defined as 1.182941e-4 cubic metre.</rdfs:comment> + <om:symbol>gi</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0001182941</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;liquidPint-US"> + <rdfs:label xml:lang="en">liquid pint (US)</rdfs:label> + <om:alternativeLabel xml:lang="en">pint (US liquid)</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">US liquid pint</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US liquid pint is a unit of volume defined as 4.731765e-4 cubic metre.</rdfs:comment> + <om:symbol>liq pt</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0004731765</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;liquidQuart-US"> + <rdfs:label xml:lang="en">liquid quart (US)</rdfs:label> + <om:alternativeLabel xml:lang="en">quart (US liquid)</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">US liquid quart</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US liquid quart is a unit of volume defined as 9.463529e-4 cubic metre.</rdfs:comment> + <om:symbol>liq qt</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0009463529</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;peck-US"> + <rdfs:label xml:lang="en">peck (US)</rdfs:label> + <om:alternativeLabel xml:lang="en">US peck</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US peck is a unit of volume defined as 8.809768e-3 cubic metre.</rdfs:comment> + <om:symbol>pk</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.008809768</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;pint-Imperial"> + <rdfs:label xml:lang="en">pint (imperial)</rdfs:label> + <om:alternativeLabel xml:lang="en">imperial pint</om:alternativeLabel> + <rdfs:comment xml:lang="en">The pint is a unit of volume defined as 568.26125 millilitre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">568.26125</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;millilitre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;quart-Imperial"> + <rdfs:label xml:lang="en">quart (imperial)</rdfs:label> + <om:alternativeLabel xml:lang="en">imperial quart</om:alternativeLabel> + <rdfs:comment xml:lang="en">The imperial quart is a unit of volume defined as 1.1365 litre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">1.1365</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;stere"> + <rdfs:label xml:lang="en">stere</rdfs:label> + <rdfs:comment xml:lang="en">The stere is a unit of volume defined as cubic metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;tablespoon-US"> + <rdfs:label xml:lang="en">tablespoon (US)</rdfs:label> + <om:alternativeLabel xml:lang="en">US tablespoon</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US tablespoon is a unit of volume defined as 1.478676e-5 cubic metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.00001478676</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;teaspoon-US"> + <rdfs:label xml:lang="en">teaspoon (US)</rdfs:label> + <om:alternativeLabel xml:lang="en">US teaspoon</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US teaspoon is a unit of volume defined as 4.928922e-6 cubic metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.000004928922</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;dessertspoon"> + <rdfs:label xml:lang="en">dessertspoon</rdfs:label> + <rdfs:comment xml:lang="en">The desserspoon is a unit of volume defined as 2 teaspoon.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">2</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;teaspoon-US"/> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;ton-Register"> + <rdfs:label xml:lang="en">ton (register)</rdfs:label> + <om:alternativeLabel xml:lang="en">register ton</om:alternativeLabel> + <rdfs:comment xml:lang="en">The register ton is a unit of volume defined as 100 cubic foot = 2.8316846592 cubic metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <!-- <om:hasFactor rdf:datatype="&xsd;decimal">2.8316846592</om:hasFactor> --> + <!-- hasDefinition --> <!-- <om:hasUnit rdf:resource="&om;cubicMetre"/> --> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:Unit> + + <om:UnitExponentiation rdf:about="&om;cubicAngstrom"> + <rdfs:label xml:lang="en">cubic angstrom</rdfs:label> + <om:symbol>Å3</om:symbol> + <om:hasBase rdf:resource="&om;angstrom"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:UnitExponentiation> + + <om:Unit rdf:about="&om;bar-Food"> + <rdfs:label xml:lang="en">bar (food)</rdfs:label> + <rdfs:label xml:lang="nl">reep</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;bottle"> + <rdfs:label xml:lang="en">bottle</rdfs:label> + <rdfs:label xml:lang="nl">fles</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;bowl"> + <rdfs:label xml:lang="en">bowl</rdfs:label> + <rdfs:label xml:lang="nl">schaaltje</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;cup"> + <rdfs:label xml:lang="en">cup</rdfs:label> + <rdfs:label xml:lang="nl">kopje</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;dash"> + <rdfs:label xml:lang="en">dash</rdfs:label> + <rdfs:label xml:lang="nl">scheutje</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;deepBowl"> + <rdfs:label xml:lang="en">deep bowl</rdfs:label> + <rdfs:label xml:lang="nl">diep bord</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;drop"> + <rdfs:label xml:lang="en">drop</rdfs:label> + <rdfs:label xml:lang="nl">druppel</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;fillet"> + <rdfs:label xml:lang="en">fillet</rdfs:label> + <rdfs:label xml:lang="nl">filet</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;glass"> + <rdfs:label xml:lang="en">glass</rdfs:label> + <rdfs:label xml:lang="nl">glas</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;handful"> + <rdfs:label xml:lang="en">handful</rdfs:label> + <rdfs:label xml:lang="nl">handje</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;piece"> + <rdfs:label xml:lang="en">piece</rdfs:label> + <rdfs:label xml:lang="nl">stuks</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;pinch"> + <rdfs:label xml:lang="en">pinch</rdfs:label> + <rdfs:label xml:lang="nl">mespunt</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;portion"> + <rdfs:label xml:lang="en">portion</rdfs:label> + <rdfs:label xml:lang="nl">portie</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;scoop"> + <rdfs:label xml:lang="en">scoop</rdfs:label> + <rdfs:label xml:lang="nl">bolletje</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;servingSpoon"> + <rdfs:label xml:lang="en">serving spoon</rdfs:label> + <rdfs:label xml:lang="nl">opscheplepel</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;slice"> + <rdfs:label xml:lang="en">slice</rdfs:label> + <rdfs:label xml:lang="nl">snee</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;spread"> + <rdfs:label xml:lang="en">spread</rdfs:label> + <rdfs:label xml:lang="nl">broodbelegging</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;wedge"> + <rdfs:label xml:lang="en">wedge</rdfs:label> + <rdfs:label xml:lang="nl">punt</rdfs:label> + </om:Unit> + + <om:Unit rdf:about="&om;wineGlass"> + <rdfs:label xml:lang="en">wine glass</rdfs:label> + <rdfs:label xml:lang="nl">wijnglas</rdfs:label> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e-3CubicMetre"> + <om:hasNumericalValue>1.0e-3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.101221e-3CubicMetre"> + <om:hasNumericalValue>1.101221e-3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.1365Litre"> + <om:hasNumericalValue>1.1365</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;litre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.182941e-4CubicMetre"> + <om:hasNumericalValue>1.182941e-4</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.233489e3CubicMetre"> + <om:hasNumericalValue>1.233489e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.420653e-4CubicMetre"> + <om:hasNumericalValue>1.420653e-4</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.478676e-5CubicMetre"> + <om:hasNumericalValue>1.478676e-5</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.589873e-1CubicMetre"> + <om:hasNumericalValue>1.589873e-1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_2Teaspoon-US"> + <om:hasNumericalValue>2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;teaspoon-US"/> + </om:Measure> + + <om:Measure rdf:about="&om;_2.365882e-4CubicMetre"> + <om:hasNumericalValue>2.365882e-4</om:hasNumericalValue> + <om:hasUnit rdf --> + + <!-- <om:Measure rdf:about="&om;_25Millilitre-Measure"> --> + <!-- <om:hasNumericalValue>25</om:hasNumericalValue> --> + <!-- <om:hasUnit rdf:resource="&om;millilitre"/> --> + <!-- </om:Measure> --> + + <!-- <om:Measure rdf:about="&om;_2.831658CubicMetre"> + <om:hasNumericalValue>2.831658</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_2.841306e-5CubicMetre"> + <om:hasNumericalValue>2.841306e-5</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_2.957353e-5CubicMetre"> + <om:hasNumericalValue>2.957353e-5</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_3.523907e-2CubicMetre"> + <om:hasNumericalValue>3.523907e-2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_3.624556CubicMetre"> + <om:hasNumericalValue>3.624556</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_3.785412e-3CubicMetre"> + <om:hasNumericalValue>3.785412e-3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.40488377086e-3CubicMetre"> + <om:hasNumericalValue>4.40488377086e-3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.54609e-3CubicMetre"> + <om:hasNumericalValue>4.54609e-3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.731765e-4CubicMetre"> + <om:hasNumericalValue>4.731765e-4</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.928922e-6CubicMetre"> + <om:hasNumericalValue>4.928922e-6</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_5.506105e-4CubicMetre"> + <om:hasNumericalValue>5.506105e-4</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_568.26125Millilitre"> + <om:hasNumericalValue>568.26125</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;millilitre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_8.809768e-3CubicMetre"> + <om:hasNumericalValue>8.809768e-3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_9.463529e-4CubicMetre"> + <om:hasNumericalValue>9.463529e-4</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;cubicMetre"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Volume"> + <om:commonlyHasUnit rdf:resource="&om;acreFoot"/> + <om:commonlyHasUnit rdf:resource="&om;barrel-US"/> + <om:commonlyHasUnit rdf:resource="&om;bushel-US"/> + <om:commonlyHasUnit rdf:resource="&om;cord"/> + <om:commonlyHasUnit rdf:resource="&om;cup-USCustomary"/> + <om:commonlyHasUnit rdf:resource="&om;dryGallon-US"/> + <om:commonlyHasUnit rdf:resource="&om;dryPint-US"/> + <om:commonlyHasUnit rdf:resource="&om;dryQuart-US"/> + <om:commonlyHasUnit rdf:resource="&om;fluidOunce-Imperial"/> + <om:commonlyHasUnit rdf:resource="&om;fluidOunce-US"/> + <om:commonlyHasUnit rdf:resource="&om;gallon-Imperial"/> + <om:commonlyHasUnit rdf:resource="&om;gallon-US"/> + <om:commonlyHasUnit rdf:resource="&om;gill-Imperial"/> + <om:commonlyHasUnit rdf:resource="&om;gill-US"/> + <om:commonlyHasUnit rdf:resource="&om;liquidPint-US"/> + <om:commonlyHasUnit rdf:resource="&om;liquidQuart-US"/> + <om:commonlyHasUnit rdf:resource="&om;peck-US"/> + <om:commonlyHasUnit rdf:resource="&om;pint-Imperial"/> + <om:commonlyHasUnit rdf:resource="&om;quart-Imperial"/> + <om:commonlyHasUnit rdf:resource="&om;stere"/> + <om:commonlyHasUnit rdf:resource="&om;tablespoon-US"/> + <om:commonlyHasUnit rdf:resource="&om;teaspoon-US"/> + <om:commonlyHasUnit rdf:resource="&om;dessertspoon"/> + <om:commonlyHasUnit rdf:resource="&om;ton-Register"/> + <om:commonlyHasUnit rdf:resource="&om;cubicAngstrom"/> + </owl:Class> + + <!-- Radian Ontology --> + + <om:Unit rdf:about="&om;radian"> + <rdfs:label xml:lang="en">radian</rdfs:label> + <rdfs:label xml:lang="nl">radiaal</rdfs:label> + <rdfs:label xml:lang="zh">弧度</rdfs:label> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>rad</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;metrePerMetre"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <owl:Class rdf:about="&om;Angle"> + <om:commonlyHasUnit rdf:resource="&om;radian"/> + </owl:Class> + + <owl:Class rdf:about="&om;AngleUnit"> + <rdfs:label xml:lang="en">angle unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;degree"/> + <om:Unit rdf:about="&om;gon"/> + <om:Unit rdf:about="&om;mil-Angle"/> + <om:Unit rdf:about="&om;minute-Angle"/> + <om:Unit rdf:about="&om;radian"/> + <om:Unit rdf:about="&om;revolution"/> + <om:Unit rdf:about="&om;second-Angle"/> + <om:PrefixedUnit rdf:about="&om;millisecond-Angle"/> + <om:PrefixedUnit rdf:about="&om;microsecond-Angle"/> + <om:UnitDivision rdf:about="&om;metrePerMetre"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedRadian"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Angle"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;AngleUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Radian Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctoradian"> + <rdfs:label xml:lang="en">yoctoradian</rdfs:label> + <rdfs:label xml:lang="nl">yoctoradiaal</rdfs:label> + <om:symbol>yrad</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;radian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptoradian"> + <rdfs:label xml:lang="en">zeptoradian</rdfs:label> + <rdfs:label xml:lang="nl">zeptoradiaal</rdfs:label> + <om:symbol>zrad</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;radian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attoradian"> + <rdfs:label xml:lang="en">attoradian</rdfs:label> + <rdfs:label xml:lang="nl">attoradiaal</rdfs:label> + <om:symbol>arad</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;radian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtoradian"> + <rdfs:label xml:lang="en">femtoradian</rdfs:label> + <rdfs:label xml:lang="nl">femtoradiaal</rdfs:label> + <om:symbol>frad</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;radian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picoradian"> + <rdfs:label xml:lang="en">picoradian</rdfs:label> + <rdfs:label xml:lang="nl">picoradiaal</rdfs:label> + <om:symbol>prad</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;radian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanoradian"> + <rdfs:label xml:lang="en">nanoradian</rdfs:label> + <rdfs:label xml:lang="nl">nanoradiaal</rdfs:label> + <om:symbol>nrad</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;radian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microradian"> + <rdfs:label xml:lang="en">microradian</rdfs:label> + <rdfs:label xml:lang="nl">microradiaal</rdfs:label> + <om:symbol>μrad</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;radian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;milliradian"> + <rdfs:label xml:lang="en">milliradian</rdfs:label> + <rdfs:label xml:lang="nl">milliradiaal</rdfs:label> + <om:symbol>mrad</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;radian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centiradian"> + <rdfs:label xml:lang="en">centiradian</rdfs:label> + <rdfs:label xml:lang="nl">centiradiaal</rdfs:label> + <om:symbol>crad</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;radian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;deciradian"> + <rdfs:label xml:lang="en">deciradian</rdfs:label> + <rdfs:label xml:lang="nl">deciradiaal</rdfs:label> + <om:symbol>drad</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;radian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedRadian"> + <rdfs:label xml:lang="en">prefixed radian</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;radian"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Angle"> + <om:commonlyHasUnit rdf:resource="&om;attoradian"/> + <om:commonlyHasUnit rdf:resource="&om;centiradian"/> + <om:commonlyHasUnit rdf:resource="&om;deciradian"/> + <om:commonlyHasUnit rdf:resource="&om;femtoradian"/> + <om:commonlyHasUnit rdf:resource="&om;microradian"/> + <om:commonlyHasUnit rdf:resource="&om;milliradian"/> + <om:commonlyHasUnit rdf:resource="&om;nanoradian"/> + <om:commonlyHasUnit rdf:resource="&om;picoradian"/> + </owl:Class> + + <!-- Angle Unit Ontology --> + + <om:Unit rdf:about="&om;degree"> + <rdfs:label xml:lang="en">degree</rdfs:label> + <rdfs:label xml:lang="nl">graad</rdfs:label> + <rdfs:label xml:lang="zh">度</rdfs:label> + <rdfs:comment xml:lang="en">The degree is a unit of angle defined as 1.745329e-2 radian.</rdfs:comment> + <om:symbol>°</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.01745329</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;radian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <om:Unit rdf:about="&om;gon"> + <rdfs:label xml:lang="en">gon</rdfs:label> + <om:alternativeLabel xml:lang="en">grade</om:alternativeLabel> + <rdfs:comment xml:lang="en">The gon is a unit of angle defined as 1.570796e-2 radian.</rdfs:comment> + <om:symbol>gon</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.01570796</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;radian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <om:PrefixedUnit rdf:about="&om;microsecond-Angle"> + <rdfs:label xml:lang="en">microsecond (angle)</rdfs:label> + <rdfs:label xml:lang="nl">microseconde (hoek)</rdfs:label> + <om:alternativeLabel xml:lang="en">microsecond of arc</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">microarcsecond</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">microboogseconde</om:alternativeLabel> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:symbol>μas</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Angle"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:Unit rdf:about="&om;mil-Angle"> + <rdfs:label xml:lang="en">mil (angle)</rdfs:label> + <rdfs:comment xml:lang="en">The mil (angle) is a unit of angle defined as 9.817477e-4 radian.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0009817477</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;radian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <om:PrefixedUnit rdf:about="&om;millisecond-Angle"> + <rdfs:label xml:lang="en">millisecond (angle)</rdfs:label> + <rdfs:label xml:lang="nl">milliseconde (hoek)</rdfs:label> + <om:alternativeLabel xml:lang="en">millisecond of arc</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">milliarcsecond</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">milliboogseconde</om:alternativeLabel> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:symbol>mas</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Angle"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:Unit rdf:about="&om;minute-Angle"> + <rdfs:label xml:lang="en">minute (angle)</rdfs:label> + <rdfs:label xml:lang="nl">minuut (hoek)</rdfs:label> + <!-- <rdfs:label xml:lang="zh">角分</rdfs:label> --> + <rdfs:label xml:lang="zh">分钟(角)</rdfs:label> + <om:alternativeLabel xml:lang="en">minute of arc</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">arcminute</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">arcminuut</om:alternativeLabel> + <rdfs:comment xml:lang="en">The minute (angle) is a unit of angle defined as 2.908882e-4 radian.</rdfs:comment> + <om:symbol>'</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0002908882</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;radian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <om:Unit rdf:about="&om;revolution"> + <rdfs:label xml:lang="en">revolution</rdfs:label> + <rdfs:comment xml:lang="en">The revolution is a unit of angle defined as 6.283185 radian.</rdfs:comment> + <om:symbol>r</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">6.283185</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;radian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <om:Unit rdf:about="&om;second-Angle"> + <rdfs:label xml:lang="en">second (angle)</rdfs:label> + <rdfs:label xml:lang="nl">seconde (hoek)</rdfs:label> + <!-- <rdfs:label xml:lang="zh">角秒</rdfs:label> --> + <rdfs:label xml:lang="zh">秒(角度)</rdfs:label> + <om:alternativeLabel xml:lang="en">second of arc</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">arcsecond</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">boogseconde</om:alternativeLabel> + <rdfs:comment xml:lang="en">The second (angle) is a unit of angle defined as 4.848137e-6 radian.</rdfs:comment> + <om:symbol>"</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.000004848137</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;radian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.570796e-2Radian"> + <om:hasNumericalValue>1.570796e-2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;radian"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.745329e-2Radian"> + <om:hasNumericalValue>1.745329e-2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;radian"/> + </om:Measure> + + <om:Measure rdf:about="&om;_2.908882e-4Radian"> + <om:hasNumericalValue>2.908882e-4</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;radian"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.848137e-6Radian"> + <om:hasNumericalValue>4.848137e-6</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;radian"/> + </om:Measure> + + <om:Measure rdf:about="&om;_6.283185Radian"> + <om:hasNumericalValue>6.283185</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;radian"/> + </om:Measure> + + <om:Measure rdf:about="&om;_9.817477e-4Radian"> + <om:hasNumericalValue>9.817477e-4</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;radian"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Angle"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;gon"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;revolution"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMetre"/> + </owl:Class> + + <!-- Steradian Ontology --> + + <om:Unit rdf:about="&om;steradian"> + <rdfs:label xml:lang="en">steradian</rdfs:label> + <rdfs:label xml:lang="nl">steradiaal</rdfs:label> + <rdfs:label xml:lang="zh">球面度</rdfs:label> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>sr</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;squareMetrePerSquareMetre"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <owl:Class rdf:about="&om;SolidAngle"> + <om:commonlyHasUnit rdf:resource="&om;steradian"/> + </owl:Class> + + <owl:Class rdf:about="&om;SolidAngleUnit"> + <rdfs:label xml:lang="en">solid angle unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;steradian"/> + <om:UnitDivision rdf:about="&om;squareMetrePerSquareMetre"/> + <om:UnitExponentiation rdf:about="&om;degreeSquared"/> + <om:UnitExponentiation rdf:about="&om;second-AngleSquared"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedSteradian"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;SolidAngle"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;SolidAngleUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Steradian Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctosteradian"> + <rdfs:label xml:lang="en">yoctosteradian</rdfs:label> + <rdfs:label xml:lang="nl">yoctosteradiaal</rdfs:label> + <om:symbol>ysr</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;steradian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptosteradian"> + <rdfs:label xml:lang="en">zeptosteradian</rdfs:label> + <rdfs:label xml:lang="nl">zeptosteradiaal</rdfs:label> + <om:symbol>zsr</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;steradian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attosteradian"> + <rdfs:label xml:lang="en">attosteradian</rdfs:label> + <rdfs:label xml:lang="nl">attosteradiaal</rdfs:label> + <om:symbol>asr</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;steradian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtosteradian"> + <rdfs:label xml:lang="en">femtosteradian</rdfs:label> + <rdfs:label xml:lang="nl">femtosteradiaal</rdfs:label> + <om:symbol>fsr</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;steradian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picosteradian"> + <rdfs:label xml:lang="en">picosteradian</rdfs:label> + <rdfs:label xml:lang="nl">picosteradiaal</rdfs:label> + <om:symbol>psr</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;steradian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanosteradian"> + <rdfs:label xml:lang="en">nanosteradian</rdfs:label> + <rdfs:label xml:lang="nl">nanosteradiaal</rdfs:label> + <om:symbol>nsr</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;steradian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microsteradian"> + <rdfs:label xml:lang="en">microsteradian</rdfs:label> + <rdfs:label xml:lang="nl">microsteradiaal</rdfs:label> + <om:symbol>μsr</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;steradian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millisteradian"> + <rdfs:label xml:lang="en">millisteradian</rdfs:label> + <rdfs:label xml:lang="nl">millisteradiaal</rdfs:label> + <om:symbol>msr</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;steradian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centisteradian"> + <rdfs:label xml:lang="en">centisteradian</rdfs:label> + <rdfs:label xml:lang="nl">centisteradiaal</rdfs:label> + <om:symbol>csr</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;steradian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decisteradian"> + <rdfs:label xml:lang="en">decisteradian</rdfs:label> + <rdfs:label xml:lang="nl">decisteradiaal</rdfs:label> + <om:symbol>dsr</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;steradian"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedSteradian"> + <rdfs:label xml:lang="en">prefixed steradian</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;steradian"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;SolidAngle"> + <om:commonlyHasUnit rdf:resource="&om;attosteradian"/> + <om:commonlyHasUnit rdf:resource="&om;centisteradian"/> + <om:commonlyHasUnit rdf:resource="&om;decisteradian"/> + <om:commonlyHasUnit rdf:resource="&om;femtosteradian"/> + <om:commonlyHasUnit rdf:resource="&om;microsteradian"/> + <om:commonlyHasUnit rdf:resource="&om;millisteradian"/> + <om:commonlyHasUnit rdf:resource="&om;nanosteradian"/> + <om:commonlyHasUnit rdf:resource="&om;picosteradian"/> + </owl:Class> + + <!-- Solid Angle Unit Ontology --> + + <om:UnitExponentiation rdf:about="&om;degreeSquared"> + <rdfs:label xml:lang="en">degree squared</rdfs:label> + <!-- <om:symbol>°2</om:symbol> --> + <!-- <om:LaTeXSymbol>^{\circ 2}</om:LaTeXSymbol> --> + <om:hasBase rdf:resource="&om;degree"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitExponentiation> + + <om:UnitExponentiation rdf:about="&om;second-AngleSquared"> + <rdfs:label xml:lang="en">second (angle) squared</rdfs:label> + <om:alternativeLabel xml:lang="en">arcsecond squared</om:alternativeLabel> + <om:symbol>arcsec2</om:symbol> + <om:hasBase rdf:resource="&om;second-Angle"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitExponentiation> + + <owl:Class rdf:about="&om;SolidAngle"> + <om:commonlyHasUnit rdf:resource="&om;degreeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;second-AngleSquared"/> + </owl:Class> + + <!-- Metre Per Metre Ontology --> + + <om:UnitDivision rdf:about="&om;metrePerMetre"> + <rdfs:label xml:lang="en">metre per metre</rdfs:label> + <rdfs:label xml:lang="nl">meter per meter</rdfs:label> + <om:symbol>m/m</om:symbol> + <om:alternativeSymbol>m m-1</om:alternativeSymbol> + <om:alternativeSymbol>m·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;LengthFraction"> + <om:commonlyHasUnit rdf:resource="&om;metrePerMetre"/> + </owl:Class> + + <!-- Metre Per Metre Multiples and Submultiples Ontology --> + + <om:UnitDivision rdf:about="&om;millimetrePerMetre"> + <rdfs:label xml:lang="en">millimetre per metre</rdfs:label> + <rdfs:label xml:lang="nl">millimeter per meter</rdfs:label> + <om:symbol>mm/m</om:symbol> + <om:alternativeSymbol>mm m-1</om:alternativeSymbol> + <om:alternativeSymbol>mm·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;millimetre"/> + <om:hasDenominator rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;LengthFraction"> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerMetre"/> + </owl:Class> + + <!-- Dimension Ontologies --> + + <!-- Contents --> + + <!-- Length Dimension Ontology --> + <!-- Area Dimension Ontology --> + <!-- Volume Dimension Ontology --> + <!-- Dimension One Ontology --> + + <!-- Length Dimension Ontology --> + + <om:Dimension rdf:about="&om;length-Dimension"> + <rdfs:label xml:lang="en">length dimension</rdfs:label> + <rdfs:label xml:lang="nl">lengtedimensie</rdfs:label> + <om:symbol>L</om:symbol> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Length"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;length-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Area Dimension Ontology --> + + <om:Dimension rdf:about="&om;area-Dimension"> + <rdfs:label xml:lang="en">area dimension</rdfs:label> + <rdfs:label xml:lang="nl">oppervlaktedimensie</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Area"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;area-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Volume Dimension Ontology --> + + <om:Dimension rdf:about="&om;volume-Dimension"> + <rdfs:label xml:lang="en">volume dimension</rdfs:label> + <rdfs:label xml:lang="nl">volumedimensie</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">3</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Volume"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;volume-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Dimension One Ontology --> + + <om:Dimension rdf:about="&om;dimensionOne"> + <rdfs:label xml:lang="en">dimensionOne</rdfs:label> + <om:symbol>1</om:symbol> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Angle"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;SolidAngle"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- System of Units Ontologies --> + + <!-- Contents --> + + <!-- Apothecaries' System of Weights Ontology --> + <!-- Avoirdupois System of Units Ontology --> + <!-- British System of Units Ontology --> + <!-- Centimetre-Gram-Second System of Units Ontology --> + <!-- Centimetre-Gram-Second Electromagnetic System of Units Ontology --> + <!-- Centimetre-Gram-Second Electrostatic System of Units Ontology --> + <!-- Centimetre-Gram-Second-Biot System of Units Ontology --> + <!-- Centimetre-Gram-Second-Franklin System of Units Ontology --> + <!-- Gaussian System of Units Ontology --> + <!-- Imperial System Ontology --> + <!-- International System of Units Ontology --> + <!-- Metre-Kilogram-Second-Ampere System of Units Ontology --> + <!-- Troy System of Units Ontology --> + + <!-- Apothecaries' System of Weights Ontology --> + + <!-- <SystemOfUnits rdf:about="&om;apothecariesSystemOfWeights"> --> + <!-- <rdfs:label xml:lang="en">apothecaries' system of weights</rdfs:label> --> + <!-- <rdfs:label xml:lang="nl">apothecaries-systeem</rdfs:label> --> + <!-- </SystemOfUnits> --> + + <!-- Avoirdupois System of Units Ontology --> + + <!-- <SystemOfUnits rdf:about="&om;avoirdupoisSystemOfUnits"> --> + <!-- <rdfs:label xml:lang="en">avoirdupois system of units</rdfs:label> --> + <!-- <rdfs:label xml:lang="nl">avoirdupois-systeem</rdfs:label> --> + <!-- </SystemOfUnits> --> + + <!-- British System of Units Ontology --> + + <!-- <SystemOfUnits rdf:about="&om;BritishSystemOfUnits"> --> + <!-- <rdfs:label xml:lang="en">British system of units</rdfs:label> --> + <!-- <rdfs:label xml:lang="nl">Britse systeem van eenheden</rdfs:label> --> + <!-- <alternativeLabel xml:lang="en">foot-pound-second system of units</alternativeLabel> --> + <!-- </SystemOfUnits> --> + + <!-- Centimetre-Gram-Second System of Units Ontology --> + + <SystemOfUnits rdf:about="&om;centimetre-Gram-SecondSystemOfUnits"> + <rdfs:label xml:lang="en">centimetre-gram-second system of units</rdfs:label> + <rdfs:label xml:lang="nl">centimeter-gram-seconde-systeem</rdfs:label> + <abbreviation rdf:datatype="http://www.w3.org/2001/XMLSchema#string">cgs</abbreviation> + <abbreviation rdf:datatype="http://www.w3.org/2001/XMLSchema#string">CGS</abbreviation> + <hasBaseQuantity rdf:resource="&om;Length"/> + <hasBaseQuantity rdf:resource="&om;Mass"/> + <hasBaseQuantity rdf:resource="&om;Time"/> + <hasDerivedQuantity rdf:resource="&om;Frequency"/> + <hasDerivedQuantity rdf:resource="&om;Force"/> + <hasDerivedQuantity rdf:resource="&om;Energy"/> + <hasDerivedQuantity rdf:resource="&om;Pressure"/> + <hasDerivedQuantity rdf:resource="&om;DynamicViscosity"/> + <hasDerivedQuantity rdf:resource="&om;KinematicViscosity"/> + <hasDerivedQuantity rdf:resource="&om;Acceleration"/> + <hasDerivedQuantity rdf:resource="&om;Luminance"/> + <hasDerivedQuantity rdf:resource="&om;Illuminance"/> + <hasBaseUnit rdf:resource="&om;centimetre"/> + <hasBaseUnit rdf:resource="&om;gram"/> + <hasBaseUnit rdf:resource="&om;second-Time"/> + <hasDerivedUnit rdf:resource="&om;hertz"/> + <hasDerivedUnit rdf:resource="&om;dyne"/> + <hasDerivedUnit rdf:resource="&om;erg"/> + <hasDerivedUnit rdf:resource="&om;microbar"/> + <hasDerivedUnit rdf:resource="&om;poise"/> + <hasDerivedUnit rdf:resource="&om;stokes"/> + <hasDerivedUnit rdf:resource="&om;gal"/> + <hasDerivedUnit rdf:resource="&om;stilb"/> + <hasDerivedUnit rdf:resource="&om;phot"/> + </SystemOfUnits> + + <!-- Centimetre-Gram-Second Electromagnetic System of Units Ontology --> + + <SystemOfUnits rdf:about="&om;centimetre-Gram-SecondElectromagneticSystemOfUnits"> + <rdfs:label xml:lang="en">centimetre-gram-second electromagnetic system of units</rdfs:label> + <rdfs:label xml:lang="nl">centimeter-gram-seconde electromagnetische systeem</rdfs:label> + <alternativeLabel xml:lang="en">centimetre, gram, second electromagnetic system of units</alternativeLabel> + <alternativeLabel xml:lang="en">CGS electromagnetic system of units</alternativeLabel> + <alternativeLabel xml:lang="en">electromagnetic CGS system of units</alternativeLabel> + <abbreviation rdf:datatype="http://www.w3.org/2001/XMLSchema#string">emu</abbreviation> + <abbreviation rdf:datatype="http://www.w3.org/2001/XMLSchema#string">EMU</abbreviation> + <hasBaseQuantity rdf:resource="&om;Length"/> + <hasBaseQuantity rdf:resource="&om;Mass"/> + <hasBaseQuantity rdf:resource="&om;Time"/> + <hasDerivedQuantity rdf:resource="&om;ElectricCurrent"/> + <hasDerivedQuantity rdf:resource="&om;ElectricCharge"/> + <hasDerivedQuantity rdf:resource="&om;Capacitance"/> + <hasDerivedQuantity rdf:resource="&om;Inductance"/> + <hasDerivedQuantity rdf:resource="&om;ElectricalConductance"/> + <hasDerivedQuantity rdf:resource="&om;ElectricalResistance"/> + <hasDerivedQuantity rdf:resource="&om;ElectricPotential"/> + <hasDerivedQuantity rdf:resource="&om;MagneticField"/> + <hasDerivedQuantity rdf:resource="&om;MagneticFluxDensity"/> + <hasDerivedQuantity rdf:resource="&om;MagneticFlux"/> + <hasDerivedQuantity rdf:resource="&om;MagnetomotiveForce"/> + <hasBaseUnit rdf:resource="&om;centimetre"/> + <hasBaseUnit rdf:resource="&om;gram"/> + <hasBaseUnit rdf:resource="&om;second-Time"/> + <hasDerivedUnit rdf:resource="&om;abampere"/> + <hasDerivedUnit rdf:resource="&om;abcoulomb"/> + <hasDerivedUnit rdf:resource="&om;abfarad"/> + <hasDerivedUnit rdf:resource="&om;abhenry"/> + <hasDerivedUnit rdf:resource="&om;abmho"/> + <hasDerivedUnit rdf:resource="&om;abohm"/> + <hasDerivedUnit rdf:resource="&om;abvolt"/> + <hasDerivedUnit rdf:resource="&om;oersted"/> + <hasDerivedUnit rdf:resource="&om;gauss"/> + <hasDerivedUnit rdf:resource="&om;maxwell"/> + <hasDerivedUnit rdf:resource="&om;gilbert"/> + </SystemOfUnits> + + <!-- Centimetre-Gram-Second Electrostatic System of Units Ontology --> + + <SystemOfUnits rdf:about="&om;centimetre-Gram-SecondElectrostaticSystemOfUnits"> + <rdfs:label xml:lang="en">centimetre-gram-second electrostatic system of units</rdfs:label> + <rdfs:label xml:lang="nl">centimeter-gram-seconde electrostatische systeem</rdfs:label> + <alternativeLabel xml:lang="en">CGS electrostatic system of units</alternativeLabel> + <alternativeLabel xml:lang="en">electrostatic CGS system of units</alternativeLabel> + <abbreviation rdf:datatype="http://www.w3.org/2001/XMLSchema#string">esu</abbreviation> + <abbreviation rdf:datatype="http://www.w3.org/2001/XMLSchema#string">ESU</abbreviation> + <hasBaseQuantity rdf:resource="&om;Length"/> + <hasBaseQuantity rdf:resource="&om;Mass"/> + <hasBaseQuantity rdf:resource="&om;Time"/> + <hasDerivedQuantity rdf:resource="&om;ElectricCharge"/> + <hasDerivedQuantity rdf:resource="&om;ElectricCurrent"/> + <hasDerivedQuantity rdf:resource="&om;ElectricPotential"/> + <hasDerivedQuantity rdf:resource="&om;MagneticFluxDensity"/> + <hasDerivedQuantity rdf:resource="&om;Capacitance"/> + <hasDerivedQuantity rdf:resource="&om;Inductance"/> + <hasDerivedQuantity rdf:resource="&om;ElectricalConductance"/> + <hasDerivedQuantity rdf:resource="&om;ElectricalResistance"/> + <hasDerivedQuantity rdf:resource="&om;MagneticFlux"/> + <hasDerivedQuantity rdf:resource="&om;MagnetomotiveForce"/> + <hasBaseUnit rdf:resource="&om;centimetre"/> + <hasBaseUnit rdf:resource="&om;gram"/> + <hasBaseUnit rdf:resource="&om;second-Time"/> + <hasDerivedUnit rdf:resource="&om;statcoulomb"/> + <hasDerivedUnit rdf:resource="&om;statampere"/> + <hasDerivedUnit rdf:resource="&om;statvolt"/> + <hasDerivedUnit rdf:resource="&om;stattesla"/> + <hasDerivedUnit rdf:resource="&om;statfarad"/> + <hasDerivedUnit rdf:resource="&om;stathenry"/> + <hasDerivedUnit rdf:resource="&om;statmho"/> + <hasDerivedUnit rdf:resource="&om;statohm"/> + <hasDerivedUnit rdf:resource="&om;statweber"/> + </SystemOfUnits> + + <!-- Centimetre-Gram-Second-Biot System of Units Ontology --> + + <SystemOfUnits rdf:about="&om;centimetre-Gram-Second-BiotSystemOfUnits"> + <rdfs:label xml:lang="en">centimetre-gram-second-biot system of units</rdfs:label> + <rdfs:label xml:lang="nl">centimeter-gram-seconde-biot-systeem</rdfs:label> + <abbreviation rdf:datatype="http://www.w3.org/2001/XMLSchema#string">cm-g-s-Bi</abbreviation> + <hasBaseQuantity rdf:resource="&om;Length"/> + <hasBaseQuantity rdf:resource="&om;Mass"/> + <hasBaseQuantity rdf:resource="&om;Time"/> + <hasBaseQuantity rdf:resource="&om;ElectricCurrent"/> + <hasBaseUnit rdf:resource="&om;centimetre"/> + <hasBaseUnit rdf:resource="&om;gram"/> + <hasBaseUnit rdf:resource="&om;second-Time"/> + <hasBaseUnit rdf:resource="&om;biot"/> + </SystemOfUnits> + + <!-- Centimetre-Gram-Second-Franklin System of Units Ontology --> + + <SystemOfUnits rdf:about="&om;centimetre-Gram-Second-FranklinSystemOfUnits"> + <rdfs:label xml:lang="en">centimetre-gram-second-franklin system of units</rdfs:label> + <rdfs:label xml:lang="nl">centimeter-gram-seconde-franklin-systeem</rdfs:label> + <abbreviation rdf:datatype="http://www.w3.org/2001/XMLSchema#string">cm-g-s-Fr</abbreviation> + <hasBaseQuantity rdf:resource="&om;Length"/> + <hasBaseQuantity rdf:resource="&om;Mass"/> + <hasBaseQuantity rdf:resource="&om;Time"/> + <hasBaseQuantity rdf:resource="&om;ElectricCharge"/> + <hasBaseUnit rdf:resource="&om;centimetre"/> + <hasBaseUnit rdf:resource="&om;gram"/> + <hasBaseUnit rdf:resource="&om;second-Time"/> + <hasBaseUnit rdf:resource="&om;franklin"/> + </SystemOfUnits> + + <!-- Gaussian System of Units Ontology --> + + <SystemOfUnits rdf:about="&om;GaussianSystemOfUnits"> + <rdfs:label xml:lang="en">Gaussian system of units</rdfs:label> + <rdfs:label xml:lang="nl">Gaussische eenhedenstelsel</rdfs:label> + <rdfs:label xml:lang="zh">高斯系统单位</rdfs:label> + <alternativeLabel xml:lang="en">Gaussian CGS system of units</alternativeLabel> + <alternativeLabel xml:lang="en">mixed CGS system of units</alternativeLabel> + <alternativeLabel xml:lang="en">symmetrised CGS system of units</alternativeLabel> + <hasBaseQuantity rdf:resource="&om;Length"/> + <hasBaseQuantity rdf:resource="&om;Mass"/> + <hasBaseQuantity rdf:resource="&om;Time"/> + <hasDerivedQuantity rdf:resource="&om;ElectricCharge"/> + <hasDerivedQuantity rdf:resource="&om;ElectricCurrent"/> + <hasDerivedQuantity rdf:resource="&om;ElectricPotential"/> + <hasDerivedQuantity rdf:resource="&om;MagneticFluxDensity"/> + <hasDerivedQuantity rdf:resource="&om;Capacitance"/> + <hasDerivedQuantity rdf:resource="&om;Inductance"/> + <hasDerivedQuantity rdf:resource="&om;ElectricalConductance"/> + <hasDerivedQuantity rdf:resource="&om;ElectricalResistance"/> + <hasDerivedQuantity rdf:resource="&om;MagneticFlux"/> + <hasDerivedQuantity rdf:resource="&om;MagneticField"/> + <hasDerivedQuantity rdf:resource="&om;MagnetomotiveForce"/> + <hasBaseUnit rdf:resource="&om;centimetre"/> + <hasBaseUnit rdf:resource="&om;gram"/> + <hasBaseUnit rdf:resource="&om;second-Time"/> + <hasDerivedUnit rdf:resource="&om;statcoulomb"/> + <hasDerivedUnit rdf:resource="&om;abampere"/> + <hasDerivedUnit rdf:resource="&om;statampere"/> + <hasDerivedUnit rdf:resource="&om;statvolt"/> + <hasDerivedUnit rdf:resource="&om;stattesla"/> + <hasDerivedUnit rdf:resource="&om;statfarad"/> + <hasDerivedUnit rdf:resource="&om;stathenry"/> + <hasDerivedUnit rdf:resource="&om;statmho"/> + <hasDerivedUnit rdf:resource="&om;statohm"/> + <hasDerivedUnit rdf:resource="&om;statweber"/> + <hasDerivedUnit rdf:resource="&om;abcoulomb"/> + <hasDerivedUnit rdf:resource="&om;abfarad"/> + <hasDerivedUnit rdf:resource="&om;abhenry"/> + <hasDerivedUnit rdf:resource="&om;abmho"/> + <hasDerivedUnit rdf:resource="&om;abohm"/> + <hasDerivedUnit rdf:resource="&om;abvolt"/> + <hasDerivedUnit rdf:resource="&om;oersted"/> + <hasDerivedUnit rdf:resource="&om;gauss"/> + <hasDerivedUnit rdf:resource="&om;maxwell"/> + <hasDerivedUnit rdf:resource="&om;gilbert"/> + </SystemOfUnits> + + <!-- Imperial System Ontology --> + + <!-- <SystemOfUnits rdf:about="&om;imperialSystem"> --> + <!-- <rdfs:label xml:lang="en">imperial System</rdfs:label> --> + <!-- <rdfs:label xml:lang="nl">imperiaal stelsel</rdfs:label> --> + <!-- </SystemOfUnits> --> + + <!-- International System of Units Ontology --> + + <SystemOfUnits rdf:about="&om;InternationalSystemOfUnits"> + <rdfs:label xml:lang="en">International System of Units</rdfs:label> + <rdfs:label xml:lang="nl">Internationale Stelsel van Eenheden</rdfs:label> + <rdfs:label xml:lang="zh">国际单位制</rdfs:label> + <om:abbreviation>SI</om:abbreviation> + <hasBaseQuantity rdf:resource="&om;Length"/> + <hasBaseQuantity rdf:resource="&om;Mass"/> + <hasBaseQuantity rdf:resource="&om;Time"/> + <hasBaseQuantity rdf:resource="&om;ElectricCurrent"/> + <hasBaseQuantity rdf:resource="&om;ThermodynamicTemperature"/> + <hasBaseQuantity rdf:resource="&om;AmountOfSubstance"/> + <hasBaseQuantity rdf:resource="&om;LuminousIntensity"/> + <hasDerivedQuantity rdf:resource="&om;Area"/> + <hasDerivedQuantity rdf:resource="&om;Volume"/> + <hasDerivedQuantity rdf:resource="&om;Angle"/> + <hasDerivedQuantity rdf:resource="&om;SolidAngle"/> + <hasDerivedQuantity rdf:resource="&om;Speed"/> + <hasDerivedQuantity rdf:resource="&om;Acceleration"/> + <hasDerivedQuantity rdf:resource="&om;Force"/> + <hasDerivedQuantity rdf:resource="&om;Momentum"/> + <hasDerivedQuantity rdf:resource="&om;Frequency"/> + <hasDerivedQuantity rdf:resource="&om;Wavenumber"/> + <hasDerivedQuantity rdf:resource="&om;AngularSpeed"/> + <hasDerivedQuantity rdf:resource="&om;AngularAcceleration"/> + <hasDerivedQuantity rdf:resource="&om;AngularMomentum"/> + <hasDerivedQuantity rdf:resource="&om;Density"/> + <hasDerivedQuantity rdf:resource="&om;SpecificVolume"/> + <hasDerivedQuantity rdf:resource="&om;Energy"/> + <hasDerivedQuantity rdf:resource="&om;Power"/> + <hasDerivedQuantity rdf:resource="&om;Torque"/> + <hasDerivedQuantity rdf:resource="&om;Pressure"/> + <hasDerivedQuantity rdf:resource="&om;Action"/> + <hasDerivedQuantity rdf:resource="&om;SurfaceTension"/> + <hasDerivedQuantity rdf:resource="&om;DynamicViscosity"/> + <hasDerivedQuantity rdf:resource="&om;Irradiance"/> + <hasDerivedQuantity rdf:resource="&om;HeatCapacity"/> + <hasDerivedQuantity rdf:resource="&om;SpecificHeatCapacity"/> + <hasDerivedQuantity rdf:resource="&om;ElectricCharge"/> + <hasDerivedQuantity rdf:resource="&om;CurrentDensity"/> + <hasDerivedQuantity rdf:resource="&om;ElectricPotential"/> + <hasDerivedQuantity rdf:resource="&om;MagneticFluxDensity"/> + <hasDerivedQuantity rdf:resource="&om;Capacitance"/> + <hasDerivedQuantity rdf:resource="&om;Inductance"/> + <hasDerivedQuantity rdf:resource="&om;ElectricalConductance"/> + <hasDerivedQuantity rdf:resource="&om;ElectricalResistance"/> + <hasDerivedQuantity rdf:resource="&om;ElectricalConductivity"/> + <hasDerivedQuantity rdf:resource="&om;ElectricalResistivity"/> + <hasDerivedQuantity rdf:resource="&om;MagneticFlux"/> + <hasDerivedQuantity rdf:resource="&om;MagnetomotiveForce"/> + <hasDerivedQuantity rdf:resource="&om;Inductance"/> + <hasDerivedQuantity rdf:resource="&om;Capacitance"/> + <hasDerivedQuantity rdf:resource="&om;PermeabilityOfFreeSpace"/> + <hasDerivedQuantity rdf:resource="&om;Permittivity"/> + <hasDerivedQuantity rdf:resource="&om;MagneticFluxDensity"/> + <hasDerivedQuantity rdf:resource="&om;Luminance"/> + <hasDerivedQuantity rdf:resource="&om;LuminousFlux"/> + <hasDerivedQuantity rdf:resource="&om;LuminousEnergy"/> + <hasDerivedQuantity rdf:resource="&om;Illuminance"/> + <hasDerivedQuantity rdf:resource="&om;Exposure"/> + <hasDerivedQuantity rdf:resource="&om;LuminousEfficacy"/> + <hasDerivedQuantity rdf:resource="&om;AbsorbedDose"/> + <hasDerivedQuantity rdf:resource="&om;AbsorbedDoseRate"/> + <hasDerivedQuantity rdf:resource="&om;DoseEquivalent"/> + <hasDerivedQuantity rdf:resource="&om;Activity"/> + <hasDerivedQuantity rdf:resource="&om;MolarMass"/> + <hasDerivedQuantity rdf:resource="&om;MolarHeatCapacity"/> + <hasDerivedQuantity rdf:resource="&om;CatalyticActivity"/> + <om:hasBaseUnit rdf:resource="&om;metre"/> + <om:hasBaseUnit rdf:resource="&om;kilogram"/> + <om:hasBaseUnit rdf:resource="&om;second-Time"/> + <om:hasBaseUnit rdf:resource="&om;ampere"/> + <om:hasBaseUnit rdf:resource="&om;kelvin"/> + <om:hasBaseUnit rdf:resource="&om;mole"/> + <om:hasBaseUnit rdf:resource="&om;candela"/> + <om:hasDerivedUnit rdf:resource="&om;squareMetre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicMetre"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;reciprocalMetre"/> + <om:hasDerivedUnit rdf:resource="&om;reciprocalAngstrom"/> + <om:hasDerivedUnit rdf:resource="&om;kilogramPerCubicmetre"/> + <om:hasDerivedUnit rdf:resource="&om;gramPerCubicmetre"/> + <om:hasDerivedUnit rdf:resource="&om;milligramPerCubicmetre"/> + <om:hasDerivedUnit rdf:resource="&om;gramPerCubicCentimetre"/> + <om:hasDerivedUnit rdf:resource="&om;microgramPerCubicCentimetre"/> + <om:hasDerivedUnit rdf:resource="&om;kilogramPerCubicDecimetre"/> + <om:hasDerivedUnit rdf:resource="&om;unifiedAtomicMassUnitPerCubicAngstrom"/> + <om:hasDerivedUnit rdf:resource="&om;cubicMetrePerKilogram"/> + <om:hasDerivedUnit rdf:resource="&om;litrePerKilogram"/> + <om:hasDerivedUnit rdf:resource="&om;amperePerSquareMetre"/> + <om:hasDerivedUnit rdf:resource="&om;amperePerMetre"/> + <om:hasDerivedUnit rdf:resource="&om;molePerCubicmetre"/> + <om:hasDerivedUnit rdf:resource="&om;candelaPerSquareMetre"/> + <om:hasDerivedUnit rdf:resource="&om;radian"/> + <om:hasDerivedUnit rdf:resource="&om;steradian"/> + <om:hasDerivedUnit rdf:resource="&om;hertz"/> + <om:hasDerivedUnit rdf:resource="&om;newton"/> + <om:hasDerivedUnit rdf:resource="&om;pascal"/> + <om:hasDerivedUnit rdf:resource="&om;joule"/> + <om:hasDerivedUnit rdf:resource="&om;watt"/> + <om:hasDerivedUnit rdf:resource="&om;coulomb"/> + <om:hasDerivedUnit rdf:resource="&om;volt"/> + <om:hasDerivedUnit rdf:resource="&om;farad"/> + <om:hasDerivedUnit rdf:resource="&om;ohm"/> + <om:hasDerivedUnit rdf:resource="&om;siemens"/> + <om:hasDerivedUnit rdf:resource="&om;weber"/> + <om:hasDerivedUnit rdf:resource="&om;tesla"/> + <om:hasDerivedUnit rdf:resource="&om;henry"/> + <om:hasDerivedUnit rdf:resource="&om;degreeCelsius"/> + <om:hasDerivedUnit rdf:resource="&om;lumen"/> + <om:hasDerivedUnit rdf:resource="&om;lux"/> + <om:hasDerivedUnit rdf:resource="&om;becquerel"/> + <om:hasDerivedUnit rdf:resource="&om;gray"/> + <om:hasDerivedUnit rdf:resource="&om;sievert"/> + <om:hasDerivedUnit rdf:resource="&om;katal"/> + <om:hasDerivedUnit rdf:resource="&om;radianPerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;radianPerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;pascalSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;newtonMetre"/> + <om:hasDerivedUnit rdf:resource="&om;wattPerSquareMetre"/> + <om:hasDerivedUnit rdf:resource="&om;wattPerSteradian"/> + <om:hasDerivedUnit rdf:resource="&om;wattPerSquareMetreSteradian"/> + <om:hasDerivedUnit rdf:resource="&om;joulePerKelvin"/> + <om:hasDerivedUnit rdf:resource="&om;joulePerKelvinKilogram"/> + <om:hasDerivedUnit rdf:resource="&om;joulePerKilogram"/> + <om:hasDerivedUnit rdf:resource="&om;wattPerMetreKelvin"/> + <om:hasDerivedUnit rdf:resource="&om;joulePerCubicmetre"/> + <om:hasDerivedUnit rdf:resource="&om;voltPerMetre"/> + <om:hasDerivedUnit rdf:resource="&om;coulombPerCubicmetre"/> + <om:hasDerivedUnit rdf:resource="&om;coulombPerSquareMetre"/> + <om:hasDerivedUnit rdf:resource="&om;faradPerMetre"/> + <om:hasDerivedUnit rdf:resource="&om;henryPerMetre"/> + <om:hasDerivedUnit rdf:resource="&om;joulePerMole"/> + <om:hasDerivedUnit rdf:resource="&om;joulePerKelvinMole"/> + <om:hasDerivedUnit rdf:resource="&om;coulombPerKilogram"/> + <om:hasDerivedUnit rdf:resource="&om;grayPerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;milligrayPerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;yoctometre"/> + <om:hasDerivedUnit rdf:resource="&om;zeptometre"/> + <om:hasDerivedUnit rdf:resource="&om;attometre"/> + <om:hasDerivedUnit rdf:resource="&om;picometre"/> + <om:hasDerivedUnit rdf:resource="&om;femtometre"/> + <om:hasDerivedUnit rdf:resource="&om;nanometre"/> + <om:hasDerivedUnit rdf:resource="&om;micrometre"/> + <om:hasDerivedUnit rdf:resource="&om;millimetre"/> + <om:hasDerivedUnit rdf:resource="&om;centimetre"/> + <om:hasDerivedUnit rdf:resource="&om;decimetre"/> + <om:hasDerivedUnit rdf:resource="&om;decametre"/> + <om:hasDerivedUnit rdf:resource="&om;hectometre"/> + <om:hasDerivedUnit rdf:resource="&om;kilometre"/> + <om:hasDerivedUnit rdf:resource="&om;megametre"/> + <om:hasDerivedUnit rdf:resource="&om;gigametre"/> + <om:hasDerivedUnit rdf:resource="&om;terametre"/> + <om:hasDerivedUnit rdf:resource="&om;petametre"/> + <om:hasDerivedUnit rdf:resource="&om;exametre"/> + <om:hasDerivedUnit rdf:resource="&om;zettametre"/> + <om:hasDerivedUnit rdf:resource="&om;yottametre"/> + <om:hasDerivedUnit rdf:resource="&om;yoctogram"/> + <om:hasDerivedUnit rdf:resource="&om;zeptogram"/> + <om:hasDerivedUnit rdf:resource="&om;attogram"/> + <om:hasDerivedUnit rdf:resource="&om;picogram"/> + <om:hasDerivedUnit rdf:resource="&om;femtogram"/> + <om:hasDerivedUnit rdf:resource="&om;nanogram"/> + <om:hasDerivedUnit rdf:resource="&om;microgram"/> + <om:hasDerivedUnit rdf:resource="&om;milligram"/> + <om:hasDerivedUnit rdf:resource="&om;centigram"/> + <om:hasDerivedUnit rdf:resource="&om;decigram"/> + <om:hasDerivedUnit rdf:resource="&om;gram"/> + <om:hasDerivedUnit rdf:resource="&om;decagram"/> + <om:hasDerivedUnit rdf:resource="&om;hectogram"/> + <om:hasDerivedUnit rdf:resource="&om;megagram"/> + <om:hasDerivedUnit rdf:resource="&om;gigagram"/> + <om:hasDerivedUnit rdf:resource="&om;teragram"/> + <om:hasDerivedUnit rdf:resource="&om;petagram"/> + <om:hasDerivedUnit rdf:resource="&om;exagram"/> + <om:hasDerivedUnit rdf:resource="&om;zettagram"/> + <om:hasDerivedUnit rdf:resource="&om;yottagram"/> + <om:hasDerivedUnit rdf:resource="&om;yoctosecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;zeptosecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;attosecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;picosecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;femtosecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;nanosecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;microsecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;millisecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;centisecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;decisecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;decasecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;hectosecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;kilosecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;megasecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;gigasecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;terasecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;petasecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;exasecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;zettasecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;yottasecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;yoctoampere"/> + <om:hasDerivedUnit rdf:resource="&om;zeptoampere"/> + <om:hasDerivedUnit rdf:resource="&om;attoampere"/> + <om:hasDerivedUnit rdf:resource="&om;picoampere"/> + <om:hasDerivedUnit rdf:resource="&om;femtoampere"/> + <om:hasDerivedUnit rdf:resource="&om;nanoampere"/> + <om:hasDerivedUnit rdf:resource="&om;microampere"/> + <om:hasDerivedUnit rdf:resource="&om;milliampere"/> + <om:hasDerivedUnit rdf:resource="&om;centiampere"/> + <om:hasDerivedUnit rdf:resource="&om;deciampere"/> + <om:hasDerivedUnit rdf:resource="&om;decaampere"/> + <om:hasDerivedUnit rdf:resource="&om;hectoampere"/> + <om:hasDerivedUnit rdf:resource="&om;kiloampere"/> + <om:hasDerivedUnit rdf:resource="&om;megaampere"/> + <om:hasDerivedUnit rdf:resource="&om;gigaampere"/> + <om:hasDerivedUnit rdf:resource="&om;teraampere"/> + <om:hasDerivedUnit rdf:resource="&om;petaampere"/> + <om:hasDerivedUnit rdf:resource="&om;exaampere"/> + <om:hasDerivedUnit rdf:resource="&om;zettaampere"/> + <om:hasDerivedUnit rdf:resource="&om;yottaampere"/> + <om:hasDerivedUnit rdf:resource="&om;yoctokelvin"/> + <om:hasDerivedUnit rdf:resource="&om;zeptokelvin"/> + <om:hasDerivedUnit rdf:resource="&om;attokelvin"/> + <om:hasDerivedUnit rdf:resource="&om;picokelvin"/> + <om:hasDerivedUnit rdf:resource="&om;femtokelvin"/> + <om:hasDerivedUnit rdf:resource="&om;nanokelvin"/> + <om:hasDerivedUnit rdf:resource="&om;microkelvin"/> + <om:hasDerivedUnit rdf:resource="&om;millikelvin"/> + <om:hasDerivedUnit rdf:resource="&om;centikelvin"/> + <om:hasDerivedUnit rdf:resource="&om;decikelvin"/> + <om:hasDerivedUnit rdf:resource="&om;decakelvin"/> + <om:hasDerivedUnit rdf:resource="&om;hectokelvin"/> + <om:hasDerivedUnit rdf:resource="&om;kilokelvin"/> + <om:hasDerivedUnit rdf:resource="&om;megakelvin"/> + <om:hasDerivedUnit rdf:resource="&om;gigakelvin"/> + <om:hasDerivedUnit rdf:resource="&om;terakelvin"/> + <om:hasDerivedUnit rdf:resource="&om;petakelvin"/> + <om:hasDerivedUnit rdf:resource="&om;exakelvin"/> + <om:hasDerivedUnit rdf:resource="&om;zettakelvin"/> + <om:hasDerivedUnit rdf:resource="&om;yottakelvin"/> + <om:hasDerivedUnit rdf:resource="&om;yoctomole"/> + <om:hasDerivedUnit rdf:resource="&om;zeptomole"/> + <om:hasDerivedUnit rdf:resource="&om;attomole"/> + <om:hasDerivedUnit rdf:resource="&om;picomole"/> + <om:hasDerivedUnit rdf:resource="&om;femtomole"/> + <om:hasDerivedUnit rdf:resource="&om;nanomole"/> + <om:hasDerivedUnit rdf:resource="&om;micromole"/> + <om:hasDerivedUnit rdf:resource="&om;millimole"/> + <om:hasDerivedUnit rdf:resource="&om;centimole"/> + <om:hasDerivedUnit rdf:resource="&om;decimole"/> + <om:hasDerivedUnit rdf:resource="&om;decamole"/> + <om:hasDerivedUnit rdf:resource="&om;hectomole"/> + <om:hasDerivedUnit rdf:resource="&om;kilomole"/> + <om:hasDerivedUnit rdf:resource="&om;megamole"/> + <om:hasDerivedUnit rdf:resource="&om;gigamole"/> + <om:hasDerivedUnit rdf:resource="&om;teramole"/> + <om:hasDerivedUnit rdf:resource="&om;petamole"/> + <om:hasDerivedUnit rdf:resource="&om;examole"/> + <om:hasDerivedUnit rdf:resource="&om;zettamole"/> + <om:hasDerivedUnit rdf:resource="&om;yottamole"/> + <om:hasDerivedUnit rdf:resource="&om;yoctocandela"/> + <om:hasDerivedUnit rdf:resource="&om;zeptocandela"/> + <om:hasDerivedUnit rdf:resource="&om;attocandela"/> + <om:hasDerivedUnit rdf:resource="&om;picocandela"/> + <om:hasDerivedUnit rdf:resource="&om;femtocandela"/> + <om:hasDerivedUnit rdf:resource="&om;nanocandela"/> + <om:hasDerivedUnit rdf:resource="&om;microcandela"/> + <om:hasDerivedUnit rdf:resource="&om;millicandela"/> + <om:hasDerivedUnit rdf:resource="&om;centicandela"/> + <om:hasDerivedUnit rdf:resource="&om;decicandela"/> + <om:hasDerivedUnit rdf:resource="&om;decacandela"/> + <om:hasDerivedUnit rdf:resource="&om;hectocandela"/> + <om:hasDerivedUnit rdf:resource="&om;kilocandela"/> + <om:hasDerivedUnit rdf:resource="&om;megacandela"/> + <om:hasDerivedUnit rdf:resource="&om;gigacandela"/> + <om:hasDerivedUnit rdf:resource="&om;teracandela"/> + <om:hasDerivedUnit rdf:resource="&om;petacandela"/> + <om:hasDerivedUnit rdf:resource="&om;exacandela"/> + <om:hasDerivedUnit rdf:resource="&om;zettacandela"/> + <om:hasDerivedUnit rdf:resource="&om;yottacandela"/> + <om:hasDerivedUnit rdf:resource="&om;squareYoctometre"/> + <om:hasDerivedUnit rdf:resource="&om;squareZeptometre"/> + <om:hasDerivedUnit rdf:resource="&om;squareAttometre"/> + <om:hasDerivedUnit rdf:resource="&om;squarePicometre"/> + <om:hasDerivedUnit rdf:resource="&om;squareFemtometre"/> + <om:hasDerivedUnit rdf:resource="&om;squareNanometre"/> + <om:hasDerivedUnit rdf:resource="&om;squareMicrometre"/> + <om:hasDerivedUnit rdf:resource="&om;squareMillimetre"/> + <om:hasDerivedUnit rdf:resource="&om;squareCentimetre"/> + <om:hasDerivedUnit rdf:resource="&om;squareDecimetre"/> + <om:hasDerivedUnit rdf:resource="&om;squareDecametre"/> + <om:hasDerivedUnit rdf:resource="&om;squareHectometre"/> + <om:hasDerivedUnit rdf:resource="&om;squareKilometre"/> + <om:hasDerivedUnit rdf:resource="&om;squareMegametre"/> + <om:hasDerivedUnit rdf:resource="&om;squareGigametre"/> + <om:hasDerivedUnit rdf:resource="&om;squareTerametre"/> + <om:hasDerivedUnit rdf:resource="&om;squarePetametre"/> + <om:hasDerivedUnit rdf:resource="&om;squareExametre"/> + <om:hasDerivedUnit rdf:resource="&om;squareZettametre"/> + <om:hasDerivedUnit rdf:resource="&om;squareYottametre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicYoctometre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicZeptometre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicAttometre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicPicometre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicFemtometre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicNanometre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicMicrometre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicMillimetre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicCentimetre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicDecimetre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicDecametre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicHectometre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicKilometre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicMegametre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicGigametre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicTerametre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicPetametre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicExametre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicZettametre"/> + <om:hasDerivedUnit rdf:resource="&om;cubicYottametre"/> + <om:hasDerivedUnit rdf:resource="&om;yoctometrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;zeptometrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;attometrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;picometrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;femtometrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;nanometrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;micrometrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;millimetrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;centimetrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;decimetrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;decametrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;hectometrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;kilometrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;megametrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;gigametrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;terametrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;petametrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;exametrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;zettametrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;yottametrePerSecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerYoctosecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerZeptosecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerAttosecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerPicosecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerFemtosecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerNanosecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerMicrosecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerMillisecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerCentisecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerDecisecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerDecasecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerHectosecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerKilosecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerMegasecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerGigasecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerTerasecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerPetasecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerExasecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerZettasecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerYottasecond-Time"/> + <om:hasDerivedUnit rdf:resource="&om;yoctometrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;zeptometrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;attometrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;picometrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;femtometrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;nanometrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;micrometrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;millimetrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;centimetrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;decimetrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;decametrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;hectometrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;kilometrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;megametrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;gigametrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;terametrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;petametrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;exametrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;zettametrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;yottametrePerSecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerYoctosecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerZeptosecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerAttosecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerPicosecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerFemtosecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerNanosecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerMicrosecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerMillisecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerCentisecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerDecisecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerDecasecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerHectosecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerKilosecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerMegasecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerGigasecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerTerasecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerPetasecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerExasecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerZettasecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;metrePerYottasecond-TimeSquared"/> + <om:hasDerivedUnit rdf:resource="&om;yoctoradian"/> + <om:hasDerivedUnit rdf:resource="&om;zeptoradian"/> + <om:hasDerivedUnit rdf:resource="&om;attoradian"/> + <om:hasDerivedUnit rdf:resource="&om;picoradian"/> + <om:hasDerivedUnit rdf:resource="&om;femtoradian"/> + <om:hasDerivedUnit rdf:resource="&om;nanoradian"/> + <om:hasDerivedUnit rdf:resource="&om;microradian"/> + <om:hasDerivedUnit rdf:resource="&om;milliradian"/> + <om:hasDerivedUnit rdf:resource="&om;centiradian"/> + <om:hasDerivedUnit rdf:resource="&om;deciradian"/> + <om:hasDerivedUnit rdf:resource="&om;yoctosteradian"/> + <om:hasDerivedUnit rdf:resource="&om;zeptosteradian"/> + <om:hasDerivedUnit rdf:resource="&om;attosteradian"/> + <om:hasDerivedUnit rdf:resource="&om;picosteradian"/> + <om:hasDerivedUnit rdf:resource="&om;femtosteradian"/> + <om:hasDerivedUnit rdf:resource="&om;nanosteradian"/> + <om:hasDerivedUnit rdf:resource="&om;microsteradian"/> + <om:hasDerivedUnit rdf:resource="&om;millisteradian"/> + <om:hasDerivedUnit rdf:resource="&om;centisteradian"/> + <om:hasDerivedUnit rdf:resource="&om;decisteradian"/> + <om:hasDerivedUnit rdf:resource="&om;yoctohertz"/> + <om:hasDerivedUnit rdf:resource="&om;zeptohertz"/> + <om:hasDerivedUnit rdf:resource="&om;attohertz"/> + <om:hasDerivedUnit rdf:resource="&om;picohertz"/> + <om:hasDerivedUnit rdf:resource="&om;femtohertz"/> + <om:hasDerivedUnit rdf:resource="&om;nanohertz"/> + <om:hasDerivedUnit rdf:resource="&om;microhertz"/> + <om:hasDerivedUnit rdf:resource="&om;millihertz"/> + <om:hasDerivedUnit rdf:resource="&om;centihertz"/> + <om:hasDerivedUnit rdf:resource="&om;decihertz"/> + <om:hasDerivedUnit rdf:resource="&om;decahertz"/> + <om:hasDerivedUnit rdf:resource="&om;hectohertz"/> + <om:hasDerivedUnit rdf:resource="&om;kilohertz"/> + <om:hasDerivedUnit rdf:resource="&om;megahertz"/> + <om:hasDerivedUnit rdf:resource="&om;gigahertz"/> + <om:hasDerivedUnit rdf:resource="&om;terahertz"/> + <om:hasDerivedUnit rdf:resource="&om;petahertz"/> + <om:hasDerivedUnit rdf:resource="&om;exahertz"/> + <om:hasDerivedUnit rdf:resource="&om;zettahertz"/> + <om:hasDerivedUnit rdf:resource="&om;yottahertz"/> + <om:hasDerivedUnit rdf:resource="&om;yoctonewton"/> + <om:hasDerivedUnit rdf:resource="&om;zeptonewton"/> + <om:hasDerivedUnit rdf:resource="&om;attonewton"/> + <om:hasDerivedUnit rdf:resource="&om;piconewton"/> + <om:hasDerivedUnit rdf:resource="&om;femtonewton"/> + <om:hasDerivedUnit rdf:resource="&om;nanonewton"/> + <om:hasDerivedUnit rdf:resource="&om;micronewton"/> + <om:hasDerivedUnit rdf:resource="&om;millinewton"/> + <om:hasDerivedUnit rdf:resource="&om;centinewton"/> + <om:hasDerivedUnit rdf:resource="&om;decinewton"/> + <om:hasDerivedUnit rdf:resource="&om;decanewton"/> + <om:hasDerivedUnit rdf:resource="&om;hectonewton"/> + <om:hasDerivedUnit rdf:resource="&om;kilonewton"/> + <om:hasDerivedUnit rdf:resource="&om;meganewton"/> + <om:hasDerivedUnit rdf:resource="&om;giganewton"/> + <om:hasDerivedUnit rdf:resource="&om;teranewton"/> + <om:hasDerivedUnit rdf:resource="&om;petanewton"/> + <om:hasDerivedUnit rdf:resource="&om;exanewton"/> + <om:hasDerivedUnit rdf:resource="&om;zettanewton"/> + <om:hasDerivedUnit rdf:resource="&om;yottanewton"/> + <om:hasDerivedUnit rdf:resource="&om;yoctopascal"/> + <om:hasDerivedUnit rdf:resource="&om;zeptopascal"/> + <om:hasDerivedUnit rdf:resource="&om;attopascal"/> + <om:hasDerivedUnit rdf:resource="&om;picopascal"/> + <om:hasDerivedUnit rdf:resource="&om;femtopascal"/> + <om:hasDerivedUnit rdf:resource="&om;nanopascal"/> + <om:hasDerivedUnit rdf:resource="&om;micropascal"/> + <om:hasDerivedUnit rdf:resource="&om;millipascal"/> + <om:hasDerivedUnit rdf:resource="&om;centipascal"/> + <om:hasDerivedUnit rdf:resource="&om;decipascal"/> + <om:hasDerivedUnit rdf:resource="&om;decapascal"/> + <om:hasDerivedUnit rdf:resource="&om;hectopascal"/> + <om:hasDerivedUnit rdf:resource="&om;kilopascal"/> + <om:hasDerivedUnit rdf:resource="&om;megapascal"/> + <om:hasDerivedUnit rdf:resource="&om;gigapascal"/> + <om:hasDerivedUnit rdf:resource="&om;terapascal"/> + <om:hasDerivedUnit rdf:resource="&om;petapascal"/> + <om:hasDerivedUnit rdf:resource="&om;exapascal"/> + <om:hasDerivedUnit rdf:resource="&om;zettapascal"/> + <om:hasDerivedUnit rdf:resource="&om;yottapascal"/> + <om:hasDerivedUnit rdf:resource="&om;yoctojoule"/> + <om:hasDerivedUnit rdf:resource="&om;zeptojoule"/> + <om:hasDerivedUnit rdf:resource="&om;attojoule"/> + <om:hasDerivedUnit rdf:resource="&om;picojoule"/> + <om:hasDerivedUnit rdf:resource="&om;femtojoule"/> + <om:hasDerivedUnit rdf:resource="&om;nanojoule"/> + <om:hasDerivedUnit rdf:resource="&om;microjoule"/> + <om:hasDerivedUnit rdf:resource="&om;millijoule"/> + <om:hasDerivedUnit rdf:resource="&om;centijoule"/> + <om:hasDerivedUnit rdf:resource="&om;decijoule"/> + <om:hasDerivedUnit rdf:resource="&om;decajoule"/> + <om:hasDerivedUnit rdf:resource="&om;hectojoule"/> + <om:hasDerivedUnit rdf:resource="&om;kilojoule"/> + <om:hasDerivedUnit rdf:resource="&om;megajoule"/> + <om:hasDerivedUnit rdf:resource="&om;gigajoule"/> + <om:hasDerivedUnit rdf:resource="&om;terajoule"/> + <om:hasDerivedUnit rdf:resource="&om;petajoule"/> + <om:hasDerivedUnit rdf:resource="&om;exajoule"/> + <om:hasDerivedUnit rdf:resource="&om;zettajoule"/> + <om:hasDerivedUnit rdf:resource="&om;yottajoule"/> + <om:hasDerivedUnit rdf:resource="&om;yoctowatt"/> + <om:hasDerivedUnit rdf:resource="&om;zeptowatt"/> + <om:hasDerivedUnit rdf:resource="&om;attowatt"/> + <om:hasDerivedUnit rdf:resource="&om;picowatt"/> + <om:hasDerivedUnit rdf:resource="&om;femtowatt"/> + <om:hasDerivedUnit rdf:resource="&om;nanowatt"/> + <om:hasDerivedUnit rdf:resource="&om;microwatt"/> + <om:hasDerivedUnit rdf:resource="&om;milliwatt"/> + <om:hasDerivedUnit rdf:resource="&om;centiwatt"/> + <om:hasDerivedUnit rdf:resource="&om;deciwatt"/> + <om:hasDerivedUnit rdf:resource="&om;decawatt"/> + <om:hasDerivedUnit rdf:resource="&om;hectowatt"/> + <om:hasDerivedUnit rdf:resource="&om;kilowatt"/> + <om:hasDerivedUnit rdf:resource="&om;megawatt"/> + <om:hasDerivedUnit rdf:resource="&om;gigawatt"/> + <om:hasDerivedUnit rdf:resource="&om;terawatt"/> + <om:hasDerivedUnit rdf:resource="&om;petawatt"/> + <om:hasDerivedUnit rdf:resource="&om;exawatt"/> + <om:hasDerivedUnit rdf:resource="&om;zettawatt"/> + <om:hasDerivedUnit rdf:resource="&om;yottawatt"/> + <om:hasDerivedUnit rdf:resource="&om;yoctocoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;zeptocoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;attocoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;picocoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;femtocoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;nanocoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;microcoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;millicoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;centicoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;decicoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;decacoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;hectocoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;kilocoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;megacoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;gigacoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;teracoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;petacoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;exacoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;zettacoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;yottacoulomb"/> + <om:hasDerivedUnit rdf:resource="&om;yoctovolt"/> + <om:hasDerivedUnit rdf:resource="&om;zeptovolt"/> + <om:hasDerivedUnit rdf:resource="&om;attovolt"/> + <om:hasDerivedUnit rdf:resource="&om;picovolt"/> + <om:hasDerivedUnit rdf:resource="&om;femtovolt"/> + <om:hasDerivedUnit rdf:resource="&om;nanovolt"/> + <om:hasDerivedUnit rdf:resource="&om;microvolt"/> + <om:hasDerivedUnit rdf:resource="&om;millivolt"/> + <om:hasDerivedUnit rdf:resource="&om;centivolt"/> + <om:hasDerivedUnit rdf:resource="&om;decivolt"/> + <om:hasDerivedUnit rdf:resource="&om;decavolt"/> + <om:hasDerivedUnit rdf:resource="&om;hectovolt"/> + <om:hasDerivedUnit rdf:resource="&om;kilovolt"/> + <om:hasDerivedUnit rdf:resource="&om;megavolt"/> + <om:hasDerivedUnit rdf:resource="&om;gigavolt"/> + <om:hasDerivedUnit rdf:resource="&om;teravolt"/> + <om:hasDerivedUnit rdf:resource="&om;petavolt"/> + <om:hasDerivedUnit rdf:resource="&om;exavolt"/> + <om:hasDerivedUnit rdf:resource="&om;zettavolt"/> + <om:hasDerivedUnit rdf:resource="&om;yottavolt"/> + <om:hasDerivedUnit rdf:resource="&om;yoctofarad"/> + <om:hasDerivedUnit rdf:resource="&om;zeptofarad"/> + <om:hasDerivedUnit rdf:resource="&om;attofarad"/> + <om:hasDerivedUnit rdf:resource="&om;picofarad"/> + <om:hasDerivedUnit rdf:resource="&om;femtofarad"/> + <om:hasDerivedUnit rdf:resource="&om;nanofarad"/> + <om:hasDerivedUnit rdf:resource="&om;microfarad"/> + <om:hasDerivedUnit rdf:resource="&om;millifarad"/> + <om:hasDerivedUnit rdf:resource="&om;centifarad"/> + <om:hasDerivedUnit rdf:resource="&om;decifarad"/> + <om:hasDerivedUnit rdf:resource="&om;decafarad"/> + <om:hasDerivedUnit rdf:resource="&om;hectofarad"/> + <om:hasDerivedUnit rdf:resource="&om;kilofarad"/> + <om:hasDerivedUnit rdf:resource="&om;megafarad"/> + <om:hasDerivedUnit rdf:resource="&om;gigafarad"/> + <om:hasDerivedUnit rdf:resource="&om;terafarad"/> + <om:hasDerivedUnit rdf:resource="&om;petafarad"/> + <om:hasDerivedUnit rdf:resource="&om;exafarad"/> + <om:hasDerivedUnit rdf:resource="&om;zettafarad"/> + <om:hasDerivedUnit rdf:resource="&om;yottafarad"/> + <om:hasDerivedUnit rdf:resource="&om;yoctoohm"/> + <om:hasDerivedUnit rdf:resource="&om;zeptoohm"/> + <om:hasDerivedUnit rdf:resource="&om;attoohm"/> + <om:hasDerivedUnit rdf:resource="&om;picoohm"/> + <om:hasDerivedUnit rdf:resource="&om;femtoohm"/> + <om:hasDerivedUnit rdf:resource="&om;nanoohm"/> + <om:hasDerivedUnit rdf:resource="&om;microohm"/> + <om:hasDerivedUnit rdf:resource="&om;milliohm"/> + <om:hasDerivedUnit rdf:resource="&om;centiohm"/> + <om:hasDerivedUnit rdf:resource="&om;deciohm"/> + <om:hasDerivedUnit rdf:resource="&om;decaohm"/> + <om:hasDerivedUnit rdf:resource="&om;hectoohm"/> + <om:hasDerivedUnit rdf:resource="&om;kilohm"/> + <om:hasDerivedUnit rdf:resource="&om;megohm"/> + <om:hasDerivedUnit rdf:resource="&om;gigaohm"/> + <om:hasDerivedUnit rdf:resource="&om;teraohm"/> + <om:hasDerivedUnit rdf:resource="&om;petaohm"/> + <om:hasDerivedUnit rdf:resource="&om;exaohm"/> + <om:hasDerivedUnit rdf:resource="&om;zettaohm"/> + <om:hasDerivedUnit rdf:resource="&om;yottaohm"/> + <om:hasDerivedUnit rdf:resource="&om;yoctosiemens"/> + <om:hasDerivedUnit rdf:resource="&om;zeptosiemens"/> + <om:hasDerivedUnit rdf:resource="&om;attosiemens"/> + <om:hasDerivedUnit rdf:resource="&om;picosiemens"/> + <om:hasDerivedUnit rdf:resource="&om;femtosiemens"/> + <om:hasDerivedUnit rdf:resource="&om;nanosiemens"/> + <om:hasDerivedUnit rdf:resource="&om;microsiemens"/> + <om:hasDerivedUnit rdf:resource="&om;millisiemens"/> + <om:hasDerivedUnit rdf:resource="&om;centisiemens"/> + <om:hasDerivedUnit rdf:resource="&om;decisiemens"/> + <om:hasDerivedUnit rdf:resource="&om;decasiemens"/> + <om:hasDerivedUnit rdf:resource="&om;hectosiemens"/> + <om:hasDerivedUnit rdf:resource="&om;kilosiemens"/> + <om:hasDerivedUnit rdf:resource="&om;megasiemens"/> + <om:hasDerivedUnit rdf:resource="&om;gigasiemens"/> + <om:hasDerivedUnit rdf:resource="&om;terasiemens"/> + <om:hasDerivedUnit rdf:resource="&om;petasiemens"/> + <om:hasDerivedUnit rdf:resource="&om;exasiemens"/> + <om:hasDerivedUnit rdf:resource="&om;zettasiemens"/> + <om:hasDerivedUnit rdf:resource="&om;yottasiemens"/> + <om:hasDerivedUnit rdf:resource="&om;yoctoweber"/> + <om:hasDerivedUnit rdf:resource="&om;zeptoweber"/> + <om:hasDerivedUnit rdf:resource="&om;attoweber"/> + <om:hasDerivedUnit rdf:resource="&om;picoweber"/> + <om:hasDerivedUnit rdf:resource="&om;femtoweber"/> + <om:hasDerivedUnit rdf:resource="&om;nanoweber"/> + <om:hasDerivedUnit rdf:resource="&om;microweber"/> + <om:hasDerivedUnit rdf:resource="&om;milliweber"/> + <om:hasDerivedUnit rdf:resource="&om;centiweber"/> + <om:hasDerivedUnit rdf:resource="&om;deciweber"/> + <om:hasDerivedUnit rdf:resource="&om;decaweber"/> + <om:hasDerivedUnit rdf:resource="&om;hectoweber"/> + <om:hasDerivedUnit rdf:resource="&om;kiloweber"/> + <om:hasDerivedUnit rdf:resource="&om;megaweber"/> + <om:hasDerivedUnit rdf:resource="&om;gigaweber"/> + <om:hasDerivedUnit rdf:resource="&om;teraweber"/> + <om:hasDerivedUnit rdf:resource="&om;petaweber"/> + <om:hasDerivedUnit rdf:resource="&om;exaweber"/> + <om:hasDerivedUnit rdf:resource="&om;zettaweber"/> + <om:hasDerivedUnit rdf:resource="&om;yottaweber"/> + <om:hasDerivedUnit rdf:resource="&om;yoctotesla"/> + <om:hasDerivedUnit rdf:resource="&om;zeptotesla"/> + <om:hasDerivedUnit rdf:resource="&om;attotesla"/> + <om:hasDerivedUnit rdf:resource="&om;picotesla"/> + <om:hasDerivedUnit rdf:resource="&om;femtotesla"/> + <om:hasDerivedUnit rdf:resource="&om;nanotesla"/> + <om:hasDerivedUnit rdf:resource="&om;microtesla"/> + <om:hasDerivedUnit rdf:resource="&om;millitesla"/> + <om:hasDerivedUnit rdf:resource="&om;centitesla"/> + <om:hasDerivedUnit rdf:resource="&om;decitesla"/> + <om:hasDerivedUnit rdf:resource="&om;decatesla"/> + <om:hasDerivedUnit rdf:resource="&om;hectotesla"/> + <om:hasDerivedUnit rdf:resource="&om;kilotesla"/> + <om:hasDerivedUnit rdf:resource="&om;megatesla"/> + <om:hasDerivedUnit rdf:resource="&om;gigatesla"/> + <om:hasDerivedUnit rdf:resource="&om;teratesla"/> + <om:hasDerivedUnit rdf:resource="&om;petatesla"/> + <om:hasDerivedUnit rdf:resource="&om;exatesla"/> + <om:hasDerivedUnit rdf:resource="&om;zettatesla"/> + <om:hasDerivedUnit rdf:resource="&om;yottatesla"/> + <om:hasDerivedUnit rdf:resource="&om;yoctohenry"/> + <om:hasDerivedUnit rdf:resource="&om;zeptohenry"/> + <om:hasDerivedUnit rdf:resource="&om;attohenry"/> + <om:hasDerivedUnit rdf:resource="&om;picohenry"/> + <om:hasDerivedUnit rdf:resource="&om;femtohenry"/> + <om:hasDerivedUnit rdf:resource="&om;nanohenry"/> + <om:hasDerivedUnit rdf:resource="&om;microhenry"/> + <om:hasDerivedUnit rdf:resource="&om;millihenry"/> + <om:hasDerivedUnit rdf:resource="&om;centihenry"/> + <om:hasDerivedUnit rdf:resource="&om;decihenry"/> + <om:hasDerivedUnit rdf:resource="&om;decahenry"/> + <om:hasDerivedUnit rdf:resource="&om;hectohenry"/> + <om:hasDerivedUnit rdf:resource="&om;kilohenry"/> + <om:hasDerivedUnit rdf:resource="&om;megahenry"/> + <om:hasDerivedUnit rdf:resource="&om;gigahenry"/> + <om:hasDerivedUnit rdf:resource="&om;terahenry"/> + <om:hasDerivedUnit rdf:resource="&om;petahenry"/> + <om:hasDerivedUnit rdf:resource="&om;exahenry"/> + <om:hasDerivedUnit rdf:resource="&om;zettahenry"/> + <om:hasDerivedUnit rdf:resource="&om;yottahenry"/> + <om:hasDerivedUnit rdf:resource="&om;yoctodegreeCelsius"/> + <om:hasDerivedUnit rdf:resource="&om;zeptodegreeCelsius"/> + <om:hasDerivedUnit rdf:resource="&om;attodegreeCelsius"/> + <om:hasDerivedUnit rdf:resource="&om;picodegreeCelsius"/> + <om:hasDerivedUnit rdf:resource="&om;femtodegreeCelsius"/> + <om:hasDerivedUnit rdf:resource="&om;nanodegreeCelsius"/> + <om:hasDerivedUnit rdf:resource="&om;microdegreeCelsius"/> + <om:hasDerivedUnit rdf:resource="&om;millidegreeCelsius"/> + <om:hasDerivedUnit rdf:resource="&om;centidegreeCelsius"/> + <om:hasDerivedUnit rdf:resource="&om;decidegreeCelsius"/> + <om:hasDerivedUnit rdf:resource="&om;yoctolumen"/> + <om:hasDerivedUnit rdf:resource="&om;zeptolumen"/> + <om:hasDerivedUnit rdf:resource="&om;attolumen"/> + <om:hasDerivedUnit rdf:resource="&om;picolumen"/> + <om:hasDerivedUnit rdf:resource="&om;femtolumen"/> + <om:hasDerivedUnit rdf:resource="&om;nanolumen"/> + <om:hasDerivedUnit rdf:resource="&om;microlumen"/> + <om:hasDerivedUnit rdf:resource="&om;millilumen"/> + <om:hasDerivedUnit rdf:resource="&om;centilumen"/> + <om:hasDerivedUnit rdf:resource="&om;decilumen"/> + <om:hasDerivedUnit rdf:resource="&om;decalumen"/> + <om:hasDerivedUnit rdf:resource="&om;hectolumen"/> + <om:hasDerivedUnit rdf:resource="&om;kilolumen"/> + <om:hasDerivedUnit rdf:resource="&om;megalumen"/> + <om:hasDerivedUnit rdf:resource="&om;gigalumen"/> + <om:hasDerivedUnit rdf:resource="&om;teralumen"/> + <om:hasDerivedUnit rdf:resource="&om;petalumen"/> + <om:hasDerivedUnit rdf:resource="&om;exalumen"/> + <om:hasDerivedUnit rdf:resource="&om;zettalumen"/> + <om:hasDerivedUnit rdf:resource="&om;yottalumen"/> + <om:hasDerivedUnit rdf:resource="&om;yoctolux"/> + <om:hasDerivedUnit rdf:resource="&om;zeptolux"/> + <om:hasDerivedUnit rdf:resource="&om;attolux"/> + <om:hasDerivedUnit rdf:resource="&om;picolux"/> + <om:hasDerivedUnit rdf:resource="&om;femtolux"/> + <om:hasDerivedUnit rdf:resource="&om;nanolux"/> + <om:hasDerivedUnit rdf:resource="&om;microlux"/> + <om:hasDerivedUnit rdf:resource="&om;millilux"/> + <om:hasDerivedUnit rdf:resource="&om;centilux"/> + <om:hasDerivedUnit rdf:resource="&om;decilux"/> + <om:hasDerivedUnit rdf:resource="&om;decalux"/> + <om:hasDerivedUnit rdf:resource="&om;hectolux"/> + <om:hasDerivedUnit rdf:resource="&om;kilolux"/> + <om:hasDerivedUnit rdf:resource="&om;megalux"/> + <om:hasDerivedUnit rdf:resource="&om;gigalux"/> + <om:hasDerivedUnit rdf:resource="&om;teralux"/> + <om:hasDerivedUnit rdf:resource="&om;petalux"/> + <om:hasDerivedUnit rdf:resource="&om;exalux"/> + <om:hasDerivedUnit rdf:resource="&om;zettalux"/> + <om:hasDerivedUnit rdf:resource="&om;yottalux"/> + <om:hasDerivedUnit rdf:resource="&om;yoctobecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;zeptobecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;attobecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;picobecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;femtobecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;nanobecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;microbecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;millibecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;centibecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;decibecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;decabecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;hectobecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;kilobecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;megabecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;gigabecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;terabecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;petabecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;exabecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;zettabecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;yottabecquerel"/> + <om:hasDerivedUnit rdf:resource="&om;yoctogray"/> + <om:hasDerivedUnit rdf:resource="&om;zeptogray"/> + <om:hasDerivedUnit rdf:resource="&om;attogray"/> + <om:hasDerivedUnit rdf:resource="&om;picogray"/> + <om:hasDerivedUnit rdf:resource="&om;femtogray"/> + <om:hasDerivedUnit rdf:resource="&om;nanogray"/> + <om:hasDerivedUnit rdf:resource="&om;microgray"/> + <om:hasDerivedUnit rdf:resource="&om;milligray"/> + <om:hasDerivedUnit rdf:resource="&om;centigray"/> + <om:hasDerivedUnit rdf:resource="&om;decigray"/> + <om:hasDerivedUnit rdf:resource="&om;decagray"/> + <om:hasDerivedUnit rdf:resource="&om;hectogray"/> + <om:hasDerivedUnit rdf:resource="&om;kilogray"/> + <om:hasDerivedUnit rdf:resource="&om;megagray"/> + <om:hasDerivedUnit rdf:resource="&om;gigagray"/> + <om:hasDerivedUnit rdf:resource="&om;teragray"/> + <om:hasDerivedUnit rdf:resource="&om;petagray"/> + <om:hasDerivedUnit rdf:resource="&om;exagray"/> + <om:hasDerivedUnit rdf:resource="&om;zettagray"/> + <om:hasDerivedUnit rdf:resource="&om;yottagray"/> + <om:hasDerivedUnit rdf:resource="&om;yoctosievert"/> + <om:hasDerivedUnit rdf:resource="&om;zeptosievert"/> + <om:hasDerivedUnit rdf:resource="&om;attosievert"/> + <om:hasDerivedUnit rdf:resource="&om;picosievert"/> + <om:hasDerivedUnit rdf:resource="&om;femtosievert"/> + <om:hasDerivedUnit rdf:resource="&om;nanosievert"/> + <om:hasDerivedUnit rdf:resource="&om;microsievert"/> + <om:hasDerivedUnit rdf:resource="&om;millisievert"/> + <om:hasDerivedUnit rdf:resource="&om;centisievert"/> + <om:hasDerivedUnit rdf:resource="&om;decisievert"/> + <om:hasDerivedUnit rdf:resource="&om;decasievert"/> + <om:hasDerivedUnit rdf:resource="&om;hectosievert"/> + <om:hasDerivedUnit rdf:resource="&om;kilosievert"/> + <om:hasDerivedUnit rdf:resource="&om;megasievert"/> + <om:hasDerivedUnit rdf:resource="&om;gigasievert"/> + <om:hasDerivedUnit rdf:resource="&om;terasievert"/> + <om:hasDerivedUnit rdf:resource="&om;petasievert"/> + <om:hasDerivedUnit rdf:resource="&om;exasievert"/> + <om:hasDerivedUnit rdf:resource="&om;zettasievert"/> + <om:hasDerivedUnit rdf:resource="&om;yottasievert"/> + <om:hasDerivedUnit rdf:resource="&om;yoctokatal"/> + <om:hasDerivedUnit rdf:resource="&om;zeptokatal"/> + <om:hasDerivedUnit rdf:resource="&om;attokatal"/> + <om:hasDerivedUnit rdf:resource="&om;picokatal"/> + <om:hasDerivedUnit rdf:resource="&om;femtokatal"/> + <om:hasDerivedUnit rdf:resource="&om;nanokatal"/> + <om:hasDerivedUnit rdf:resource="&om;microkatal"/> + <om:hasDerivedUnit rdf:resource="&om;millikatal"/> + <om:hasDerivedUnit rdf:resource="&om;centikatal"/> + <om:hasDerivedUnit rdf:resource="&om;decikatal"/> + <om:hasDerivedUnit rdf:resource="&om;decakatal"/> + <om:hasDerivedUnit rdf:resource="&om;hectokatal"/> + <om:hasDerivedUnit rdf:resource="&om;kilokatal"/> + <om:hasDerivedUnit rdf:resource="&om;megakatal"/> + <om:hasDerivedUnit rdf:resource="&om;gigakatal"/> + <om:hasDerivedUnit rdf:resource="&om;terakatal"/> + <om:hasDerivedUnit rdf:resource="&om;petakatal"/> + <om:hasDerivedUnit rdf:resource="&om;exakatal"/> + <om:hasDerivedUnit rdf:resource="&om;zettakatal"/> + <om:hasDerivedUnit rdf:resource="&om;yottakatal"/> + <om:hasDerivedUnit rdf:resource="&om;kilojoulePerHectogram"/> + </SystemOfUnits> + + <!-- Metre-Kilogram-Second-Ampere System of Units Ontology --> + + <SystemOfUnits rdf:about="&om;metre-Kilogram-Second-AmpereSystemOfUnits"> + <rdfs:label xml:lang="en">metre-kilogram-second-ampere system of units</rdfs:label> + <rdfs:label xml:lang="nl">meter-kilogram-seconde-ampère-systeem</rdfs:label> + <alternativeLabel xml:lang="en">Giorgi system of units</alternativeLabel> + <alternativeLabel xml:lang="nl">Giorgi-stelsel</alternativeLabel> + <abbreviation rdf:datatype="http://www.w3.org/2001/XMLSchema#string">m-kg-s-A</abbreviation> + <hasBaseQuantity rdf:resource="&om;Length"/> + <hasBaseQuantity rdf:resource="&om;Mass"/> + <hasBaseQuantity rdf:resource="&om;Time"/> + <hasBaseQuantity rdf:resource="&om;ElectricCurrent"/> + <hasDerivedQuantity rdf:resource="&om;Frequency"/> + <hasDerivedQuantity rdf:resource="&om;Force"/> + <hasDerivedQuantity rdf:resource="&om;Energy"/> + <hasDerivedQuantity rdf:resource="&om;Power"/> + <hasDerivedQuantity rdf:resource="&om;ElectricCharge"/> + <hasDerivedQuantity rdf:resource="&om;ElectricPotential"/> + <hasDerivedQuantity rdf:resource="&om;Capacitance"/> + <hasDerivedQuantity rdf:resource="&om;ElectricalResistance"/> + <hasDerivedQuantity rdf:resource="&om;Inductance"/> + <hasDerivedQuantity rdf:resource="&om;MagneticFlux"/> + <hasDerivedQuantity rdf:resource="&om;MagneticFluxDensity"/> + <hasDerivedQuantity rdf:resource="&om;MagnetomotiveForce"/> + <hasBaseUnit rdf:resource="&om;metre"/> + <hasBaseUnit rdf:resource="&om;kilogram"/> + <hasBaseUnit rdf:resource="&om;second-Time"/> + <hasBaseUnit rdf:resource="&om;ampere"/> + <hasDerivedUnit rdf:resource="&om;hertz"/> + <hasDerivedUnit rdf:resource="&om;newton"/> + <hasDerivedUnit rdf:resource="&om;joule"/> + <hasDerivedUnit rdf:resource="&om;watt"/> + <hasDerivedUnit rdf:resource="&om;coulomb"/> + <hasDerivedUnit rdf:resource="&om;volt"/> + <hasDerivedUnit rdf:resource="&om;farad"/> + <hasDerivedUnit rdf:resource="&om;ohm"/> + <hasDerivedUnit rdf:resource="&om;henry"/> + <hasDerivedUnit rdf:resource="&om;weber"/> + <hasDerivedUnit rdf:resource="&om;tesla"/> + </SystemOfUnits> + + <!-- Troy System of Units Ontology --> + + <!-- <SystemOfUnits rdf:about="&om;troySystemOfUnits"> --> + <!-- <rdfs:label xml:lang="en">Troy system of units</rdfs:label> --> + <!-- <rdfs:label xml:lang="nl">Troy-systeem</rdfs:label> --> + <!-- </SystemOfUnits> --> + + <!-- Mechanics Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Unit of Measure Ontologies --> + <!-- Dimension Ontologies --> + + <om:ApplicationArea rdf:about="&om;mechanics"> + <rdfs:label xml:lang="en">mechanics</rdfs:label> + <rdfs:label xml:lang="nl">mechanica</rdfs:label> + <!-- <om:uses_application_area rdf:resource="&om;geometry"/> --> + <om:usesQuantity rdf:resource="&om;Wavelength"/> + <om:usesQuantity rdf:resource="&om;Time"/> + <om:usesQuantity rdf:resource="&om;Period"/> + <om:usesQuantity rdf:resource="&om;Mass"/> + <om:usesQuantity rdf:resource="&om;Wavenumber"/> + <om:usesQuantity rdf:resource="&om;Frequency"/> + <om:usesQuantity rdf:resource="&om;AngularSpeed"/> + <om:usesQuantity rdf:resource="&om;Speed"/> + <om:usesQuantity rdf:resource="&om;Velocity"/> + <om:usesQuantity rdf:resource="&om;Acceleration"/> + <om:usesQuantity rdf:resource="&om;AngularAcceleration"/> + <om:usesQuantity rdf:resource="&om;Density"/> + <om:usesQuantity rdf:resource="&om;SpecificVolume"/> + <om:usesQuantity rdf:resource="&om;Momentum"/> + <om:usesQuantity rdf:resource="&om;Action"/> + <om:usesQuantity rdf:resource="&om;AngularMomentum"/> + <om:usesQuantity rdf:resource="&om;MomentOfInertia"/> + <om:usesQuantity rdf:resource="&om;Force"/> + <om:usesQuantity rdf:resource="&om;Impulse"/> + <om:usesQuantity rdf:resource="&om;Weight"/> + <om:usesQuantity rdf:resource="&om;Torque"/> + <om:usesQuantity rdf:resource="&om;Pressure"/> + <om:usesQuantity rdf:resource="&om;DynamicViscosity"/> + <om:usesQuantity rdf:resource="&om;KinematicViscosity"/> + <om:usesQuantity rdf:resource="&om;Energy"/> + <om:usesQuantity rdf:resource="&om;Enthalpy"/> + <om:usesQuantity rdf:resource="&om;KineticEnergy"/> + <om:usesQuantity rdf:resource="&om;PotentialEnergy"/> + <om:usesQuantity rdf:resource="&om;Work"/> + <om:usesQuantity rdf:resource="&om;Power"/> + <om:usesQuantity rdf:resource="&om;MassFraction"/> + <om:usesQuantity rdf:resource="&om;AreaFraction"/> + <om:usesQuantity rdf:resource="&om;VolumeFraction"/> + <om:usesUnit rdf:resource="&om;kayser"/> + <om:usesUnit rdf:resource="&om;reciprocalMetre"/> + <om:usesUnit rdf:resource="&om;reciprocalAngstrom"/> + <om:usesUnit rdf:resource="&om;day"/> + <om:usesUnit rdf:resource="&om;hour"/> + <om:usesUnit rdf:resource="&om;minute-Time"/> + <om:usesUnit rdf:resource="&om;second-Time"/> + <om:usesUnit rdf:resource="&om;microsecond-Time"/> + <om:usesUnit rdf:resource="&om;millisecond-Time"/> + <om:usesUnit rdf:resource="&om;centisecond-Time"/> + <om:usesUnit rdf:resource="&om;decisecond-Time"/> + <om:usesUnit rdf:resource="&om;decasecond-Time"/> + <om:usesUnit rdf:resource="&om;hectosecond-Time"/> + <om:usesUnit rdf:resource="&om;kilosecond-Time"/> + <om:usesUnit rdf:resource="&om;megasecond-Time"/> + <om:usesUnit rdf:resource="&om;gigasecond-Time"/> + <om:usesUnit rdf:resource="&om;year"/> + <om:usesUnit rdf:resource="&om;gigayear"/> + <om:usesUnit rdf:resource="&om;attosecond-Time"/> + <om:usesUnit rdf:resource="&om;femtosecond-Time"/> + <om:usesUnit rdf:resource="&om;picosecond-Time"/> + <om:usesUnit rdf:resource="&om;nanosecond-Time"/> + <om:usesUnit rdf:resource="&om;shake"/> + <om:usesUnit rdf:resource="&om;day-Sidereal"/> + <om:usesUnit rdf:resource="&om;hour-Sidereal"/> + <om:usesUnit rdf:resource="&om;minute-Sidereal"/> + <om:usesUnit rdf:resource="&om;second-Sidereal"/> + <om:usesUnit rdf:resource="&om;terasecond-Time"/> + <om:usesUnit rdf:resource="&om;petasecond-Time"/> + <om:usesUnit rdf:resource="&om;exasecond-Time"/> + <om:usesUnit rdf:resource="&om;year-Sidereal"/> + <om:usesUnit rdf:resource="&om;year-Tropical"/> + <om:usesUnit rdf:resource="&om;hertz"/> + <om:usesUnit rdf:resource="&om;reciprocalSecond-Time"/> + <om:usesUnit rdf:resource="&om;microhertz"/> + <om:usesUnit rdf:resource="&om;millihertz"/> + <om:usesUnit rdf:resource="&om;centihertz"/> + <om:usesUnit rdf:resource="&om;decihertz"/> + <om:usesUnit rdf:resource="&om;decahertz"/> + <om:usesUnit rdf:resource="&om;hectohertz"/> + <om:usesUnit rdf:resource="&om;kilohertz"/> + <om:usesUnit rdf:resource="&om;megahertz"/> + <om:usesUnit rdf:resource="&om;gigahertz"/> + <om:usesUnit rdf:resource="&om;attohertz"/> + <om:usesUnit rdf:resource="&om;femtohertz"/> + <om:usesUnit rdf:resource="&om;picohertz"/> + <om:usesUnit rdf:resource="&om;nanohertz"/> + <om:usesUnit rdf:resource="&om;terahertz"/> + <om:usesUnit rdf:resource="&om;petahertz"/> + <om:usesUnit rdf:resource="&om;exahertz"/> + <om:usesUnit rdf:resource="&om;centimetrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;decametrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;decimetrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;gigametrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;hectometrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;kilometrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;megametrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerCentisecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerDecasecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerDecisecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerGigasecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerHectosecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerKilosecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerMegasecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerMicrosecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerMillisecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;micrometrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;millimetrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;millimetrePerMinute-Time"/> + <om:usesUnit rdf:resource="&om;centimetrePerMinute-Time"/> + <om:usesUnit rdf:resource="&om;metrePerMinute-Time"/> + <om:usesUnit rdf:resource="&om;millimetrePerHour"/> + <om:usesUnit rdf:resource="&om;kilometrePerHour"/> + <om:usesUnit rdf:resource="&om;millimetrePerDay"/> + <om:usesUnit rdf:resource="&om;centimetrePerDay"/> + <om:usesUnit rdf:resource="&om;metrePerDay"/> + <om:usesUnit rdf:resource="&om;knot-International"/> + <om:usesUnit rdf:resource="&om;nauticalMile-InternationalPerHour"/> + <om:usesUnit rdf:resource="&om;attometrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;femtometrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;nanometrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;picometrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerExasecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerPetasecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerTerasecond-Time"/> + <om:usesUnit rdf:resource="&om;exametrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerAttosecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerFemtosecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerNanosecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerPicosecond-Time"/> + <om:usesUnit rdf:resource="&om;petametrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;terametrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;centimetrePerSecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;decametrePerSecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;decimetrePerSecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;gal"/> + <om:usesUnit rdf:resource="&om;gigametrePerSecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;hectometrePerSecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;kilometrePerSecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;megametrePerSecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;metrePerCentisecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;metrePerDecasecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;metrePerDecisecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;metrePerGigasecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;metrePerHectosecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;metrePerKilosecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;metrePerMegasecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;metrePerMicrosecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;metrePerMillisecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;metrePerSecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;micrometrePerSecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;millimetrePerSecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;attometrePerSecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;femtometrePerSecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;nanometrePerSecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;picometrePerSecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;metrePerExasecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;metrePerPetasecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;metrePerTerasecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;exametrePerSecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;petametrePerSecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;terametrePerSecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;metrePerAttosecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;metrePerFemtosecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;metrePerNanosecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;metrePerPicosecond-TimeSquared"/> + <om:usesUnit rdf:resource="&om;radianPerSecond-TimeSquared"/> + </om:ApplicationArea> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Length Subclass Upper Ontology --> + <!-- Time Upper Ontology --> + <!-- Date Upper Ontology --> + <!-- Duration Upper Ontology --> + <!-- Period Upper Ontology --> + <!-- Mass Upper Ontology --> + <!-- Mass Subclass Upper Ontology --> + <!-- Quantity of Dimension One Upper Ontology --> + <!-- Number Upper Ontology --> + <!-- Ratio Upper Ontology --> + <!-- Number Density Upper Ontology --> + <!-- Column Number Density Upper Ontology --> + <!-- Wavenumber Upper Ontology --> + <!-- Angle Subclass Upper Ontology --> + <!-- Frequency Upper Ontology --> + <!-- Acceleration Upper Ontology --> + <!-- Acceleration Subclass Upper Ontology --> + <!-- Density Upper Ontology --> + <!-- Specific Volume Upper Ontology --> + <!-- Speed Upper Ontology --> + <!-- Velocity Upper Ontology --> + <!-- Speed Subclass Upper Ontology --> + <!-- Force Upper Ontology --> + <!-- Force Subclass Upper Ontology --> + <!-- Pressure Upper Ontology --> + <!-- Energy Upper Ontology --> + <!-- Energy Subclass Upper Ontology --> + <!-- Torque Upper Ontology --> + <!-- Moment of Force Upper Ontology --> + <!-- Power Upper Ontology --> + <!-- Specific Energy Upper Ontology --> + <!-- Angular Speed Upper Ontology --> + <!-- Angular Speed Subclass Upper Ontology --> + <!-- Angular Acceleration Upper Ontology --> + <!-- Dynamic Viscosity Upper Ontology --> + <!-- Kinematic Viscosity Upper Ontology --> + <!-- Power Density Upper Ontology --> + <!-- Energy Density Upper Ontology --> + <!-- Action Upper Ontology --> + <!-- Angular momentum Upper Ontology --> + <!-- Fluidity Unit Upper Ontology --> + <!-- Mass Fraction Upper Ontology --> + <!-- Momentum Upper Ontology --> + <!-- Moment of Inertia Upper Ontology --> + <!-- Relative Humidity Upper Ontology --> + <!-- Area Fraction Upper Ontology --> + <!-- Volumetric Flow Rate Upper Ontology --> + <!-- Volume Fraction Upper Ontology --> + <!-- Overrun Upper Ontology --> + <!-- Mass Flow Upper Ontology --> + <!-- Mass Per Energy Upper Ontology --> + <!-- Impulse Upper Ontology --> + <!-- Area Density Upper Ontology --> + <!-- Area Density Rate Upper Ontology --> + + <!-- Length Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;Displacement"> + <rdfs:label xml:lang="en">displacement</rdfs:label> + <rdfs:label xml:lang="nl">verplaatsing</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Length"/> + <om:symbol>d</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Displacement"> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Displacement"> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Displacement"> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + </owl:Class> + + <owl:Class rdf:about="&om;Wavelength"> + <rdfs:label xml:lang="en">wavelength</rdfs:label> + <rdfs:label xml:lang="nl">golflengte</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Length"/> + <!-- Note: the hasPhenomenon property of this class should certainly not (only) be restricted to "Wave" or something. It may, namely, also concern phenomena like parts, radiation, and radios. --> + <om:symbol>λ</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Wavelength"> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Wavelength"> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Wavelength"> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + </owl:Class> + + <!-- Time Upper Ontology --> + + <owl:Class rdf:about="&om;Time"> + <rdfs:label xml:lang="en">time</rdfs:label> + <rdfs:label xml:lang="nl">tijd</rdfs:label> + <rdfs:label xml:lang="zh">时间</rdfs:label> + <rdfs:comment xml:lang="en">Time is a base quantity in the International System of Units and other systems of units. It is measured by numbers of repetitions of cyclical events.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>t</om:symbol> + </owl:Class> + + <!-- Date Upper Ontology --> + + <owl:Class rdf:about="&om;Date"> + <rdfs:label xml:lang="en">date</rdfs:label> + <rdfs:label xml:lang="nl">datum</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Time"/> + </owl:Class> + + <!-- Duration Upper Ontology --> + + <owl:Class rdf:about="&om;Duration"> + <rdfs:label xml:lang="en">duration</rdfs:label> + <rdfs:label xml:lang="nl">duur</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Time"/> + </owl:Class> + + <!-- Period Upper Ontology --> + + <owl:Class rdf:about="&om;Period"> + <rdfs:label xml:lang="en">period</rdfs:label> + <rdfs:label xml:lang="nl">periode</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Time"/> + <om:symbol>T</om:symbol> + </owl:Class> + + <!-- Mass Upper Ontology --> + + <owl:Class rdf:about="&om;Mass"> + <rdfs:label xml:lang="en">mass</rdfs:label> + <rdfs:label xml:lang="nl">massa</rdfs:label> + <rdfs:label xml:lang="zh">质量</rdfs:label> + <om:unofficialLabel>weight</om:unofficialLabel> + <rdfs:comment xml:lang="en">Mass is the amount of matter of a phenomenon. It is a base quantity in the International System of Units. Mass is force divided by acceleration.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>m</om:symbol> + </owl:Class> + + <!-- Mass Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;AtomicMass"> + <rdfs:label xml:lang="en">atomic mass</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Mass"/> + <om:symbol>m_a</om:symbol> + </owl:Class> + + <!-- Quantity of Dimension One Upper Ontology --> + + <owl:Class rdf:about="&om;QuantityOfDimensionOne"> + <rdfs:label xml:lang="en">quantity of dimension one</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <owl:Class rdf:about="&om;QuantityOfDimensionOne"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Number Upper Ontology --> + + <owl:Class rdf:about="&om;Number"> + <rdfs:label xml:lang="en">number</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>N</om:symbol> + <om:unofficialAbbreviation>nr</om:unofficialAbbreviation> + <om:unofficialAbbreviation>no</om:unofficialAbbreviation> + <om:unofficialAbbreviation>#</om:unofficialAbbreviation> + </owl:Class> + + <owl:Class rdf:about="&om;Number"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Ratio Upper Ontology --> + + <owl:Class rdf:about="&om;Ratio"> + <rdfs:label xml:lang="en">ratio</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <owl:Class rdf:about="&om;Ratio"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;Percentage"> + <rdfs:label xml:lang="en">percentage</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Ratio"/> + </owl:Class> + + <!-- Number Density Upper Ontology --> + + <owl:Class rdf:about="&om;NumberDensity"> + <rdfs:label xml:lang="en">number density</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>n</om:symbol> + </owl:Class> + + <!-- Column Number Density Upper Ontology --> + + <owl:Class rdf:about="&om;ColumnNumberDensity"> + <rdfs:label xml:lang="en">column number density</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:unofficialLabel>number density</om:unofficialLabel> + <om:unofficialLabel>density</om:unofficialLabel> + </owl:Class> + + <!-- Wavenumber Upper Ontology --> + + <owl:Class rdf:about="&om;Wavenumber"> + <rdfs:label xml:lang="en">wavenumber</rdfs:label> + <rdfs:label xml:lang="nl">golfgetal</rdfs:label> + <rdfs:comment xml:lang="en">Wavenumber is the number of repeating units of a propagating wave (the number of times a wave has the same phase) per unit of space.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>σ</om:symbol> + </owl:Class> + + <!-- Angle Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;AngularDisplacement"> + <rdfs:label xml:lang="en">angular displacement</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;AngularDisplacement"> + <om:commonlyHasUnit rdf:resource="&om;radian"/> + </owl:Class> + + <owl:Class rdf:about="&om;AngularDisplacement"> + <om:commonlyHasUnit rdf:resource="&om;attoradian"/> + <om:commonlyHasUnit rdf:resource="&om;centiradian"/> + <om:commonlyHasUnit rdf:resource="&om;deciradian"/> + <om:commonlyHasUnit rdf:resource="&om;femtoradian"/> + <om:commonlyHasUnit rdf:resource="&om;microradian"/> + <om:commonlyHasUnit rdf:resource="&om;milliradian"/> + <om:commonlyHasUnit rdf:resource="&om;nanoradian"/> + <om:commonlyHasUnit rdf:resource="&om;picoradian"/> + </owl:Class> + + <owl:Class rdf:about="&om;AngularDisplacement"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;gon"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;revolution"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Angle"/> + </owl:Class> + + <!-- Frequency Upper Ontology --> + + <owl:Class rdf:about="&om;Frequency"> + <rdfs:label xml:lang="en">frequency</rdfs:label> + <rdfs:label xml:lang="nl">frequentie</rdfs:label> + <!-- <rdfs:label xml:lang="zh">頻率</rdfs:label> --> + <rdfs:label xml:lang="zh">频率</rdfs:label> + <om:unofficialAbbreviation>freq</om:unofficialAbbreviation> + <rdfs:comment xml:lang="en">Frequency is a measure of the number of occurrences of a repeating event per unit time.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>f</om:symbol> + <om:alternativeSymbol>ν</om:alternativeSymbol> + </owl:Class> + + <!-- Acceleration Upper Ontology --> + + <owl:Class rdf:about="&om;Acceleration"> + <rdfs:label xml:lang="en">acceleration</rdfs:label> + <rdfs:label xml:lang="nl">versnelling</rdfs:label> + <om:alternativeLabel xml:lang="nl">acceleratie</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>a</om:symbol> + </owl:Class> + + <!-- Acceleration Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;GravitationalAcceleration"> + <rdfs:label xml:lang="en">gravitational acceleration</rdfs:label> + <rdfs:label xml:lang="nl">valversnelling</rdfs:label> + <om:alternativeLabel xml:lang="en">acceleration of free fall</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">zwaarteveldsterkte</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">gravitatieveldsterkte</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Acceleration"/> + <om:symbol>g</om:symbol> + </owl:Class> + + <!-- Density Upper Ontology --> + + <owl:Class rdf:about="&om;Density"> + <rdfs:label xml:lang="en">density</rdfs:label> + <rdfs:label xml:lang="nl">dichtheid</rdfs:label> + <rdfs:label xml:lang="zh">密度</rdfs:label> + <om:alternativeLabel xml:lang="en">mass density</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">soortelijke massa</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">concentration (w/v)</om:alternativeLabel> + <rdfs:comment xml:lang="en">Density is the concentration of matter. It is a derived quantity in the International System of Units. Density is mass divided by volume.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>ρ</om:symbol> + </owl:Class> + + <!-- Specific Volume Upper Ontology --> + + <owl:Class rdf:about="&om;SpecificVolume"> + <rdfs:label xml:lang="en">specific volume</rdfs:label> + <rdfs:label xml:lang="nl">soortelijk volume</rdfs:label> + <om:alternativeLabel xml:lang="nl">specifiek volume</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">concentration (v/w)</om:alternativeLabel> + <rdfs:comment xml:lang="en">Specific volume is volume per unit mass.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>v</om:symbol> + </owl:Class> + + <!-- Speed Upper Ontology --> + + <owl:Class rdf:about="&om;Speed"> + <rdfs:label xml:lang="en">speed</rdfs:label> + <rdfs:label xml:lang="nl">snelheid (scalair)</rdfs:label> + <!-- <rdfs:label xml:lang="zh">速率</rdfs:label> --> + <rdfs:label xml:lang="zh">速度</rdfs:label> + <rdfs:comment xml:lang="en">Speed is the time rate of motion measured by the distance moved over in unit time.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>v</om:symbol> + <om:alternativeSymbol>u</om:alternativeSymbol> + </owl:Class> + + <!-- Velocity Upper Ontology --> + + <owl:Class rdf:about="&om;Velocity"> + <rdfs:label xml:lang="en">velocity</rdfs:label> + <rdfs:label xml:lang="nl">snelheid (vector)</rdfs:label> + <rdfs:comment xml:lang="en">Velocity is the rate of change of position.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Speed"/> + <om:symbol>u</om:symbol> + <om:alternativeSymbol>v</om:alternativeSymbol> + <om:alternativeSymbol>w</om:alternativeSymbol> + </owl:Class> + + <!-- Speed Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;AverageSpeed"> + <rdfs:label xml:lang="en">average speed</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Speed"/> + <om:symbol>u</om:symbol> + <owl:equivalentClass> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasAggregateFunction"/> + <owl:hasValue rdf:resource="&om;average"/> + </owl:Restriction> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;DrainageSpeed"> + <rdfs:label xml:lang="en">drainage speed</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Speed"/> + </owl:Class> + + <!-- Force Upper Ontology --> + + <owl:Class rdf:about="&om;Force"> + <rdfs:label xml:lang="en">force</rdfs:label> + <rdfs:label xml:lang="nl">kracht</rdfs:label> + <rdfs:label xml:lang="zh">力</rdfs:label> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>F</om:symbol> + </owl:Class> + + <!-- Force Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;Friction"> + <rdfs:label xml:lang="en">friction</rdfs:label> + <rdfs:label xml:lang="nl">wrijving</rdfs:label> + <rdfs:comment xml:lang="en">Friction is a force that resists the relative motion of solid surfaces, fluid layers, or material elements sliding against each other.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Force"/> + </owl:Class> + + <owl:Class rdf:about="&om;Thrust"> + <rdfs:label xml:lang="en">thrust</rdfs:label> + <rdfs:label xml:lang="nl">stuwkracht</rdfs:label> + <rdfs:comment xml:lang="en">Thrust is a reaction force that is caused by an accelerated mass expelled by a system in one direction.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Force"/> + </owl:Class> + + <owl:Class rdf:about="&om;Weight"> + <rdfs:label xml:lang="en">weight</rdfs:label> + <rdfs:label xml:lang="nl">gewicht</rdfs:label> + <rdfs:comment xml:lang="en">Weight is a force that attracts a body towards another (reference) body.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Force"/> + <om:symbol>G</om:symbol> + <om:alternativeSymbol>W</om:alternativeSymbol> + <om:alternativeSymbol>P</om:alternativeSymbol> + </owl:Class> + + <!-- Pressure Upper Ontology --> + + <owl:Class rdf:about="&om;Pressure"> + <rdfs:label xml:lang="en">pressure</rdfs:label> + <rdfs:label xml:lang="nl">druk</rdfs:label> + <!-- <rdfs:label xml:lang="zh">压强</rdfs:label> --> + <rdfs:label xml:lang="zh">压力</rdfs:label> + <rdfs:comment xml:lang="en">Pressure is the force applied to or distributed over a surface. It is a derived quantity in the International System of Units. Pressure is force divided by area.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>p</om:symbol> + <om:alternativeSymbol>P</om:alternativeSymbol> + </owl:Class> + + <!-- Energy Upper Ontology --> + + <owl:Class rdf:about="&om;Energy"> + <rdfs:label xml:lang="en">energy</rdfs:label> + <rdfs:label xml:lang="nl">energie</rdfs:label> + <rdfs:label xml:lang="zh">能量</rdfs:label> + <rdfs:comment xml:lang="en">Energy can be defined as the ability to do work. It is a derived quantity in the International System of Units.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>E</om:symbol> + <om:alternativeSymbol>W</om:alternativeSymbol> + </owl:Class> + + <!-- Energy Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;Enthalpy"> + <rdfs:label xml:lang="en">enthalpy</rdfs:label> + <rdfs:label xml:lang="nl">enthalpie</rdfs:label> + <rdfs:label xml:lang="zh">焓</rdfs:label> + <rdfs:comment xml:lang="en">Enthalpy is the sum of the internal energy of a system plus the product of the pressure-volume work done on the system.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Energy"/> + <om:symbol>H</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;KineticEnergy"> + <rdfs:label xml:lang="en">kinetic energy</rdfs:label> + <rdfs:label xml:lang="nl">kinetische energie</rdfs:label> + <rdfs:label xml:lang="zh">动能</rdfs:label> + <om:alternativeLabel xml:lang="nl">bewegingsenergie</om:alternativeLabel> + <rdfs:comment xml:lang="en">Kinetic energy is energy due to motion.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Energy"/> + <om:symbol>E_k</om:symbol> + <om:alternativeSymbol>T</om:alternativeSymbol> + <om:alternativeSymbol>K</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;PotentialEnergy"> + <rdfs:label xml:lang="en">potential energy</rdfs:label> + <rdfs:label xml:lang="nl">potentiële energie</rdfs:label> + <rdfs:label xml:lang="zh">势能</rdfs:label> + <rdfs:comment xml:lang="en">Potential energy is energy due to position of one body with respect to another or to the relative parts of the same body.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Energy"/> + <om:symbol>E_p</om:symbol> + <om:alternativeSymbol>V</om:alternativeSymbol> + <om:alternativeSymbol>Φ</om:alternativeSymbol> + <om:alternativeSymbol>U</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;Work"> + <rdfs:label xml:lang="en">work</rdfs:label> + <rdfs:label xml:lang="nl">arbeid</rdfs:label> + <!-- <rdfs:label xml:lang="zh">功</rdfs:label> --> + <rdfs:label xml:lang="zh">工作</rdfs:label> + <rdfs:comment xml:lang="en">Work is the energy when a force acts against resistance to produce motion in a body.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Energy"/> + <om:symbol>W</om:symbol> + <om:alternativeSymbol>A</om:alternativeSymbol> + </owl:Class> + + <!-- Torque Upper Ontology --> + + <owl:Class rdf:about="&om;Torque"> + <rdfs:label xml:lang="en">torque</rdfs:label> + <rdfs:label xml:lang="nl">koppel</rdfs:label> + <!-- <rdfs:label xml:lang="zh">力矩</rdfs:label> --> + <rdfs:label xml:lang="zh">扭矩</rdfs:label> + <rdfs:comment xml:lang="en">Torque is the effectiveness of a force to produce rotation about an axis, measured by the product of the force and the perpendicular distance from the line of action of the force to the axis.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>T</om:symbol> + </owl:Class> + + <!-- Moment of Force Upper Ontology --> + + <owl:Class rdf:about="&om;MomentOfForce"> + <rdfs:label xml:lang="en">moment of force</rdfs:label> + <om:alternativeLabel xml:lang="en">moment</om:alternativeLabel> + <rdfs:comment xml:lang="en">Moment of force is the effectiveness of a force to produce rotation about an axis measured by the product of the force and the perpendicular distance from the line of action of the force to the axis.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>M</om:symbol> + </owl:Class> + + <!-- Power Upper Ontology --> + + <owl:Class rdf:about="&om;Power"> + <rdfs:label xml:lang="en">power</rdfs:label> + <rdfs:label xml:lang="nl">vermogen</rdfs:label> + <rdfs:label xml:lang="zh">功率</rdfs:label> + <rdfs:comment xml:lang="en">Power is the time rate at which work is done. It is a derived quantity in the International System of Units. Power is energy divided by time.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>P</om:symbol> + </owl:Class> + + <!-- Specific Energy Upper Ontology --> + + <owl:Class rdf:about="&om;SpecificEnergy"> + <rdfs:label xml:lang="en">specific energy</rdfs:label> + <rdfs:comment xml:lang="en">Specific energy is energy per unit mass.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Angular Speed Upper Ontology --> + + <owl:Class rdf:about="&om;AngularSpeed"> + <rdfs:label xml:lang="en">angular speed</rdfs:label> + <rdfs:label xml:lang="nl">hoeksnelheid</rdfs:label> + <om:alternativeLabel xml:lang="en">angular frequency</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">hoekfrequentie</om:alternativeLabel> + <om:symbol>ω</om:symbol> + <om:alternativeSymbol>Ω</om:alternativeSymbol> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Angular Speed Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;AngularVelocity"> + <rdfs:label xml:lang="en">angular velocity</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;AngularSpeed"/> + <om:symbol>ω</om:symbol> + </owl:Class> + + <!-- Angular Acceleration Upper Ontology --> + + <owl:Class rdf:about="&om;AngularAcceleration"> + <rdfs:label xml:lang="en">angular acceleration</rdfs:label> + <rdfs:label xml:lang="nl">hoekversnelling</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>α</om:symbol> + </owl:Class> + + <!-- Dynamic Viscosity Upper Ontology --> + + <owl:Class rdf:about="&om;DynamicViscosity"> + <rdfs:label xml:lang="en">dynamic viscosity</rdfs:label> + <rdfs:label xml:lang="nl">dynamische viscositeit</rdfs:label> + <om:unofficialLabel>viscosity</om:unofficialLabel> + <rdfs:comment xml:lang="en">Viscosity is the definite resistance to change of form of many materials.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>μ</om:symbol> + <om:alternativeSymbol>η</om:alternativeSymbol> + </owl:Class> + + <!-- Kinematic Viscosity Upper Ontology --> + + <owl:Class rdf:about="&om;KinematicViscosity"> + <rdfs:label xml:lang="en">kinematic viscosity</rdfs:label> + <rdfs:label xml:lang="nl">kinematische viscositeit</rdfs:label> + <om:unofficialLabel>viscosity</om:unofficialLabel> + <rdfs:comment xml:lang="en">Kinematic viscosity is the ratio of viscosity to density.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>ν</om:symbol> + </owl:Class> + + <!-- Power Density Upper Ontology --> + + <owl:Class rdf:about="&om;PowerDensity"> + <rdfs:label xml:lang="en">power density</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Energy Density Upper Ontology --> + + <owl:Class rdf:about="&om;EnergyDensity"> + <rdfs:label xml:lang="en">energy density</rdfs:label> + <rdfs:label xml:lang="nl">energiedichtheid</rdfs:label> + <rdfs:comment xml:lang="en">Energy density is the amount of energy stored in a given system or region of space per unit volume.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Action Upper Ontology --> + + <owl:Class rdf:about="&om;Action"> + <rdfs:label xml:lang="en">action</rdfs:label> + <rdfs:label xml:lang="nl">actie</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Angular momentum Upper Ontology --> + + <owl:Class rdf:about="&om;AngularMomentum"> + <rdfs:label xml:lang="en">angular momentum</rdfs:label> + <rdfs:label xml:lang="nl">impulsmoment</rdfs:label> + <om:alternativeLabel xml:lang="nl">draaiimpuls</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">hoekmoment</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">draaimoment</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>L</om:symbol> + <om:alternativeSymbol>J</om:alternativeSymbol> + </owl:Class> + + <!-- Fluidity Unit Upper Ontology --> + + <owl:Class rdf:about="&om;Fluidity"> + <rdfs:label xml:lang="en">fluidity</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Mass Fraction Upper Ontology --> + + <owl:Class rdf:about="&om;MassFraction"> + <rdfs:label xml:lang="en">mass fraction</rdfs:label> + <rdfs:label xml:lang="nl">massafractie</rdfs:label> + <om:alternativeLabel xml:lang="en">concentration (w/w)</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>w</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;MassFraction"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Momentum Upper Ontology --> + + <owl:Class rdf:about="&om;Momentum"> + <rdfs:label xml:lang="en">momentum</rdfs:label> + <rdfs:label xml:lang="nl">impuls</rdfs:label> + <om:alternativeLabel xml:lang="en">linear momentum</om:alternativeLabel> + <rdfs:comment xml:lang="en">Momentum is the product of mass and velocity of an object.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>p</om:symbol> + </owl:Class> + + <!-- Moment of Inertia Upper Ontology --> + + <owl:Class rdf:about="&om;MomentOfInertia"> + <rdfs:label xml:lang="en">moment of inertia</rdfs:label> + <rdfs:label xml:lang="nl">traagheidsmoment</rdfs:label> + <om:alternativeLabel xml:lang="nl">massatraagheidsmoment</om:alternativeLabel> + <rdfs:comment xml:lang="en">Moment of inertia is a measure of the effectiveness of mass in rotation.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>I</om:symbol> + <om:alternativeSymbol>J</om:alternativeSymbol> + </owl:Class> + + <!-- Relative Humidity Upper Ontology --> + + <owl:Class rdf:about="&om;RelativeHumidity"> + <rdfs:label xml:lang="en">relative humidity</rdfs:label> + <rdfs:label xml:lang="nl">relatieve luchtvochtigheid</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>RH</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;RelativeHumidity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Area Fraction Upper Ontology --> + + <owl:Class rdf:about="&om;AreaFraction"> + <rdfs:label xml:lang="en">area fraction</rdfs:label> + <rdfs:label xml:lang="nl">oppervlaktefractie</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <owl:Class rdf:about="&om;AreaFraction"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;Coverage"> + <rdfs:label xml:lang="en">coverage</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;AreaFraction"/> + </owl:Class> + + <!-- Volumetric Flow Rate Upper Ontology --> + + <owl:Class rdf:about="&om;VolumetricFlowRate"> + <rdfs:label xml:lang="en">volumetric flow rate</rdfs:label> + <om:alternativeLabel xml:lang="en">volume flow rate</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">volume flow</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">flow rate</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Volume Fraction Upper Ontology --> + + <owl:Class rdf:about="&om;VolumeFraction"> + <rdfs:label xml:lang="en">volume fraction</rdfs:label> + <rdfs:label xml:lang="nl">volumefractie</rdfs:label> + <om:alternativeLabel xml:lang="en">concentration (v/v)</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>φ</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;VolumeFraction"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Overrun Upper Ontology --> + + <owl:Class rdf:about="&om;Overrun"> + <rdfs:label xml:lang="en">overrun</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;VolumeFraction"/> + </owl:Class> + + <!-- Mass Flow Upper Ontology --> + + <owl:Class rdf:about="&om;MassFlow"> + <rdfs:label xml:lang="en">mass flow</rdfs:label> + <rdfs:comment xml:lang="en">Mass flow is the movement of substances at equal rates or as a single body.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Mass Per Energy Upper Ontology --> + + <owl:Class rdf:about="&om;MassPerEnergy"> + <rdfs:label xml:lang="en">mass per energy</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Impulse Upper Ontology --> + + <owl:Class rdf:about="&om;Impulse"> + <rdfs:label xml:lang="en">impulse</rdfs:label> + <rdfs:label xml:lang="nl">stoot</rdfs:label> + <rdfs:comment xml:lang="en">Impulse is the integral of a force with respect to time.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>I</om:symbol> + </owl:Class> + + <!-- Area Density Upper Ontology --> + + <owl:Class rdf:about="&om;AreaDensity"> + <rdfs:label xml:lang="en">area density</rdfs:label> + <rdfs:label xml:lang="nl">oppervlaktedichtheid</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Area Density Rate Upper Ontology --> + + <owl:Class rdf:about="&om;AreaDensityRate"> + <rdfs:label xml:lang="en">area density rate</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Unit of Measure Ontologies --> + + <!-- Contents --> + + <!-- Second Ontology --> + <!-- Second Multiples and Submultiples Ontology --> + <!-- Time Unit Ontology --> + <!-- Gram Ontology --> + <!-- Gram Multiples and Submultiples Ontology --> + <!-- Tonne Ontology --> + <!-- Tonne Multiples and Submultiples Ontology --> + <!-- Unified Atomic Mass Unit Ontology --> + <!-- Unified Atomic Mass Unit Multiples and Submultiples Ontology --> + <!-- Mass Unit Ontology --> + <!-- One Ontology --> + <!-- Quantity of Dimension One Unit Ontology --> + <!-- Reciprocal Second Ontology --> + <!-- Hertz Ontology --> + <!-- Hertz Multiples and Submultiples Ontology --> + <!-- Frequency Unit Ontology --> + <!-- Reciprocal Cubic Metre Ontology --> + <!-- Reciprocal Cubic Metre Multiples and Submultiples Ontology --> + <!-- Reciprocal Litre Ontology --> + <!-- Reciprocal Metre Ontology --> + <!-- Wavenumber Unit Ontology --> + <!-- Metre Per Metre Ontology --> + <!-- Metre Per Second Squared Ontology --> + <!-- Metre Per Second Squared Multiples and Submultiples Ontology --> + <!-- Acceleration Unit Ontology --> + <!-- Kilogram Per Cubic Metre Ontology --> + <!-- Gram Per Cubic Metre Multiples and Submultiples Ontology --> + <!-- Gram Per Litre Ontology --> + <!-- Gram Per Litre Multiples and Submultiples Ontology --> + <!-- Cubic Metre Per Kilogram Ontology --> + <!-- Metre Per Second Ontology --> + <!-- Metre Per Second Multiples and Submultiples Ontology --> + <!-- Speed Unit Ontology --> + <!-- Metre Kilogram Per Second Squared Ontology --> + <!-- Newton Ontology --> + <!-- Newton Multiples and Submultiples Ontology --> + <!-- Force Unit Ontology --> + <!-- Newton Per Square Metre Ontology --> + <!-- Kilogram Second To the Power -2 Ontology --> + <!-- Pascal Ontology --> + <!-- Pascal Multiples and Submultiples Ontology --> + <!-- Bar Ontology --> + <!-- Bar Multiples and Submultiples Ontology --> + <!-- Metre of Mercury Ontology --> + <!-- Metre of Mercury Multiples and Submultiples Ontology --> + <!-- Pressure Unit Ontology --> + <!-- Newton Metre Ontology --> + <!-- Newton Metre Multiples and Submultiples Ontology --> + <!-- Joule Ontology --> + <!-- Joule Multiples and Submultiples Ontology --> + <!-- Electronvolt Ontology --> + <!-- Electronvolt Multiples and Submultiples Ontology --> + <!-- Calorie (Mean) Ontology --> + <!-- Calorie (Mean) Multiples and Submultiples Ontology --> + <!-- Energy Unit Ontology --> + <!-- Joule Per Second Ontology --> + <!-- Watt Ontology --> + <!-- Watt Multiples and Submultiples Ontology --> + <!-- Power Unit Ontology --> + <!-- Joule Per Gram Multiples and Submultiples Ontology --> + <!-- Radian Per Second Ontology --> + <!-- Angular Speed Unit Ontology --> + <!-- Radian Per Second Squared Ontology --> + <!-- Pascal Second Ontology --> + <!-- Poise Ontology --> + <!-- Poise Multiples and Submultiples Ontology --> + <!-- Square Metre Per Second Ontology --> + <!-- Stokes Ontology --> + <!-- Stokes Multiples and Submultiples Ontology --> + <!-- Watt Per Square Metre Ontology --> + <!-- Watt Per Steradian Ontology --> + <!-- Watt Per Square Metre Steradian Ontology --> + <!-- Joule Per Cubic Metre Ontology --> + <!-- Joule Second Ontology --> + <!-- Action Unit Ontology --> + <!-- Reciprocal Pascal Second Ontology --> + <!-- Fluidity Unit Ontology --> + <!-- Gram Per Gram Ontology --> + <!-- Gram Per Gram Multiples and Submultiples Ontology --> + <!-- Metre Kilogram Per Second Ontology --> + <!-- Kilogram Square Metre Ontology --> + <!-- Shear Rate Unit Ontology --> + <!-- Newton Per Metre Ontology --> + <!-- Cubic Metre Per Second Ontology --> + <!-- Litre Per Hour Ontology --> + <!-- Cubic Metre Per Cubic Metre Ontology --> + <!-- Cubic Millimetre Per Cubic Millimetre Ontology --> + <!-- Cubic Centimetre Per Cubic Centimetre Ontology --> + <!-- Reciprocal Watt Ontology --> + <!-- Kilogram Per Second Ontology --> + <!-- Metre Gram Ontology --> + <!-- Reciprocal Gram Ontology --> + <!-- Gram Second To the Power -2 Ontology --> + <!-- Mass Per Energy Unit Ontology --> + <!-- Gram Per Metre Ontology --> + <!-- Milligram Per Kilometre Ontology --> + <!-- Gram Per Square Metre Ontology --> + <!-- Kilogram Per Square Metre Ontology --> + <!-- Gram Per Cubic Metre Ontology --> + <!-- Gram Per Cubic Centimetre Ontology --> + <!-- Kilogram Per Hectare Ontology --> + <!-- Area Density Unit Ontology --> + <!-- Hectare Day Ontology --> + <!-- Kilogram Per Hectare Day Ontology --> + <!-- Joule Per Square Metre Ontology --> + <!-- Megajoule Per Square Metre Ontology --> + <!-- Joule Per Square Metre Second Ontology --> + <!-- Joule Per Square Metre Day Ontology --> + <!-- Kilojoule Per Square Metre Day Ontology --> + <!-- Megajoule Per Square Metre Day Ontology --> + <!-- Gram Per Square Metre Second Ontology --> + <!-- Gram Per Square Metre Day Ontology --> + <!-- Microgram Per Square Metre Second Ontology --> + <!-- Tonne Per Cubic Metre Ontology --> + <!-- Watt Square Metre Ontology --> + <!-- Reciprocal Square Metre Reciprocal Gram Ontology --> + <!-- Gram Per Megajoule Ontology --> + <!-- Watt Per Cubic Metre Ontology --> + <!-- Watt Per Hertz Ontology --> + <!-- Watt Per Nanometre Ontology --> + <!-- Watt Per Square Metre Hertz Ontology --> + <!-- Watt Per Square Metre Nanometre Ontology --> + <!-- Watt Per Steradian Square Metre Ontology --> + <!-- Watt Per Steradian Square Metre Hertz Ontology --> + <!-- Square Metre Per Gram Ontology --> + <!-- Megametre Per Kilojoule Ontology --> + <!-- Megaeuro Per Petajoule Ontology --> + <!-- Megaeuro Per Megawatt Ontology --> + <!-- Gram Per Square Metre Metre Ontology --> + <!-- Gram Per Square Metre Centimetre Ontology --> + <!-- Tonne Per Hectare Ontology --> + <!-- Metre Per Second Per Metre Ontology --> + <!-- Metre Per Cubic Metre Ontology --> + <!-- Square Metre Second Ontology --> + <!-- Square Metre Day Ontology --> + <!-- Second Per Day Ontology --> + <!-- Reciprocal Square Metre Reciprocal Metre Ontology --> + <!-- Square Metre Hertz Ontology --> + <!-- Square Metre Nanometre Ontology --> + <!-- Reciprocal Square Metre Ontology --> + <!-- Parts Per Million Per Year Ontology --> + <!-- Reciprocal Parts Per Million Ontology --> + <!-- Second Per Square Metre Ontology --> + <!-- Square Metre Per Square Metre Day Ontology --> + <!-- Square Metre Per Square Metre Ontology --> + <!-- Second Squared Ontology --> + <!-- Second Squared Multiples and Submultiples Ontology --> + <!-- Reciprocal Square Metre Ontology --> + <!-- Second To the Power -2 Ontology --> + <!-- Steradian Square Metre Ontology --> + <!-- Steradian Square Metre Hertz Ontology --> + <!-- Square Metre Steradian Ontology --> + <!-- Litre Per 100 Kilometre Ontology --> + + <!-- Second Ontology --> + + <om:Unit rdf:about="&om;second-Time"> + <rdfs:label xml:lang="en">second</rdfs:label> + <rdfs:label xml:lang="nl">seconde</rdfs:label> + <rdfs:label xml:lang="zh">秒</rdfs:label> + <om:unofficialAbbreviation>sec</om:unofficialAbbreviation> + <om:symbol>s</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:Unit> + + <owl:Thing rdf:about="&om;_9192631770PeriodsOfTheRadiationCorrespondingToTheTransitionBetweenTheTwoHyperfineLevelsOfTheGroundStateOfTheCesium133Atom"> + <rdfs:label xml:lang="en">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</rdfs:label> + </owl:Thing> + + <Duration rdf:about="&om;durationOf9192631770PeriodsOfTheRadiationCorrespondingToTheTransitionBetweenTheTwoHyperfineLevelsOfTheGroundStateOfTheCesium133Atom"> + <rdfs:label xml:lang="en">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</rdfs:label> + <om:hasPhenomenon rdf:resource="&om;_9192631770PeriodsOfTheRadiationCorrespondingToTheTransitionBetweenTheTwoHyperfineLevelsOfTheGroundStateOfTheCesium133Atom"/> + </Duration> + + <om:Unit rdf:about="&om;second-Time"> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:hasQuantity rdf:resource="&om;durationOf9192631770PeriodsOfTheRadiationCorrespondingToTheTransitionBetweenTheTwoHyperfineLevelsOfTheGroundStateOfTheCesium133Atom"/> + </om:Unit> + + <owl:Class rdf:about="&om;Time"> + <om:commonlyHasUnit rdf:resource="&om;second-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;Date"> + <om:commonlyHasUnit rdf:resource="&om;second-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;Duration"> + <om:commonlyHasUnit rdf:resource="&om;second-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;Period"> + <om:commonlyHasUnit rdf:resource="&om;second-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;TimeUnit"> + <rdfs:label xml:lang="en">time unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;day"/> + <om:Unit rdf:about="&om;day-Sidereal"/> + <om:Unit rdf:about="&om;hour"/> + <om:Unit rdf:about="&om;hour-Sidereal"/> + <om:Unit rdf:about="&om;minute-Time"/> + <om:Unit rdf:about="&om;minute-Sidereal"/> + <om:Unit rdf:about="&om;second-Sidereal"/> + <om:Unit rdf:about="&om;second-Time"/> + <om:Unit rdf:about="&om;shake"/> + <om:Unit rdf:about="&om;year"/> + <om:Unit rdf:about="&om;year-Sidereal"/> + <om:Unit rdf:about="&om;year-Tropical"/> + <om:PrefixedUnit rdf:about="&om;gigayear"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedSecond-Time"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Time"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;TimeUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Second Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctosecond-Time"> + <rdfs:label xml:lang="en">yoctosecond</rdfs:label> + <rdfs:label xml:lang="nl">yoctoseconde</rdfs:label> + <om:symbol>ys</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptosecond-Time"> + <rdfs:label xml:lang="en">zeptosecond</rdfs:label> + <rdfs:label xml:lang="nl">zeptoseconde</rdfs:label> + <om:symbol>zs</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attosecond-Time"> + <rdfs:label xml:lang="en">attosecond</rdfs:label> + <rdfs:label xml:lang="nl">attoseconde</rdfs:label> + <om:symbol>as</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtosecond-Time"> + <rdfs:label xml:lang="en">femtosecond</rdfs:label> + <rdfs:label xml:lang="nl">femtoseconde</rdfs:label> + <om:symbol>fs</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picosecond-Time"> + <rdfs:label xml:lang="en">picosecond</rdfs:label> + <rdfs:label xml:lang="nl">picoseconde</rdfs:label> + <om:symbol>ps</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanosecond-Time"> + <rdfs:label xml:lang="en">nanosecond</rdfs:label> + <rdfs:label xml:lang="nl">nanoseconde</rdfs:label> + <om:symbol>ns</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microsecond-Time"> + <rdfs:label xml:lang="en">microsecond</rdfs:label> + <rdfs:label xml:lang="nl">microseconde</rdfs:label> + <om:symbol>μs</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millisecond-Time"> + <rdfs:label xml:lang="en">millisecond</rdfs:label> + <rdfs:label xml:lang="nl">milliseconde</rdfs:label> + <om:symbol>ms</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centisecond-Time"> + <rdfs:label xml:lang="en">centisecond</rdfs:label> + <rdfs:label xml:lang="nl">centiseconde</rdfs:label> + <om:symbol>cs</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decisecond-Time"> + <rdfs:label xml:lang="en">decisecond</rdfs:label> + <rdfs:label xml:lang="nl">deciseconde</rdfs:label> + <om:symbol>ds</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decasecond-Time"> + <rdfs:label xml:lang="en">decasecond</rdfs:label> + <rdfs:label xml:lang="nl">decaseconde</rdfs:label> + <om:symbol>das</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectosecond-Time"> + <rdfs:label xml:lang="en">hectosecond</rdfs:label> + <rdfs:label xml:lang="nl">hectoseconde</rdfs:label> + <om:symbol>hs</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilosecond-Time"> + <rdfs:label xml:lang="en">kilosecond</rdfs:label> + <rdfs:label xml:lang="nl">kiloseconde</rdfs:label> + <om:symbol>ks</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megasecond-Time"> + <rdfs:label xml:lang="en">megasecond</rdfs:label> + <rdfs:label xml:lang="nl">megaseconde</rdfs:label> + <om:symbol>Ms</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigasecond-Time"> + <rdfs:label xml:lang="en">gigasecond</rdfs:label> + <rdfs:label xml:lang="nl">gigaseconde</rdfs:label> + <om:symbol>Gs</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;terasecond-Time"> + <rdfs:label xml:lang="en">terasecond</rdfs:label> + <rdfs:label xml:lang="nl">teraseconde</rdfs:label> + <om:symbol>Ts</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petasecond-Time"> + <rdfs:label xml:lang="en">petasecond</rdfs:label> + <rdfs:label xml:lang="nl">petaseconde</rdfs:label> + <om:symbol>Ps</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exasecond-Time"> + <rdfs:label xml:lang="en">exasecond</rdfs:label> + <rdfs:label xml:lang="nl">exaseconde</rdfs:label> + <om:symbol>Es</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettasecond-Time"> + <rdfs:label xml:lang="en">zettasecond</rdfs:label> + <rdfs:label xml:lang="nl">zettaseconde</rdfs:label> + <om:symbol>Zs</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottasecond-Time"> + <rdfs:label xml:lang="en">yottasecond</rdfs:label> + <rdfs:label xml:lang="nl">yottaseconde</rdfs:label> + <om:symbol>Ys</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedSecond-Time"> + <rdfs:label xml:lang="en">prefixed second (time)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;second-Time"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Time"> + <om:commonlyHasUnit rdf:resource="&om;attosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;centisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;exasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;femtosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;gigasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;hectosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;kilosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;megasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;nanosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;petasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;picosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;terasecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;Date"> + <om:commonlyHasUnit rdf:resource="&om;attosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;centisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;exasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;femtosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;gigasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;hectosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;kilosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;megasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;nanosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;petasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;picosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;terasecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;Duration"> + <om:commonlyHasUnit rdf:resource="&om;attosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;centisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;exasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;femtosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;gigasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;hectosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;kilosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;megasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;nanosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;petasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;picosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;terasecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;Period"> + <om:commonlyHasUnit rdf:resource="&om;attosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;centisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;exasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;femtosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;gigasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;hectosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;kilosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;megasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;nanosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;petasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;picosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;terasecond-Time"/> + </owl:Class> + + <!-- Time Unit Ontology --> + + <om:Unit rdf:about="&om;day"> + <rdfs:label xml:lang="en">day</rdfs:label> + <rdfs:label xml:lang="nl">dag</rdfs:label> + <!-- <rdfs:label xml:lang="zh">日</rdfs:label> --> + <rdfs:label xml:lang="zh">天</rdfs:label> + <rdfs:comment xml:lang="en">The day is a unit of time defined as 86400 second.</rdfs:comment> + <om:symbol>d</om:symbol> + <om:LaTeXCommand>\dayUnit</om:LaTeXCommand> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">86400</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;hour"> + <rdfs:label xml:lang="en">hour</rdfs:label> + <rdfs:label xml:lang="nl">uur</rdfs:label> + <rdfs:label xml:lang="zh">小时</rdfs:label> + <rdfs:comment xml:lang="en">The hour is a unit of time defined as 3600 second.</rdfs:comment> + <om:symbol>h</om:symbol> + <om:alternativeSymbol>u</om:alternativeSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">3600</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;minute-Time"> + <rdfs:label xml:lang="en">minute</rdfs:label> + <rdfs:label xml:lang="nl">minuut</rdfs:label> + <rdfs:label xml:lang="zh">分钟</rdfs:label> + <rdfs:comment xml:lang="en">The minute (time) is a unit of time defined as 60 second.</rdfs:comment> + <om:symbol>min</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">60</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;month"> + <rdfs:label xml:lang="en">month</rdfs:label> + <rdfs:label xml:lang="nl">maand</rdfs:label> + <rdfs:label xml:lang="zh">月</rdfs:label> + <rdfs:comment xml:lang="en">The month is a unit of time.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + <om:LaTeXCommand>\monthUnit</om:LaTeXCommand> + </om:Unit> + + <om:Unit rdf:about="&om;shake"> + <rdfs:label xml:lang="en">shake</rdfs:label> + <rdfs:comment xml:lang="en">The shake is a unit of time defined as 1.0e-8 second.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.000000010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;week"> + <rdfs:label xml:lang="en">week</rdfs:label> + <rdfs:label xml:lang="nl">week</rdfs:label> + <rdfs:comment xml:lang="en">The week is a unit of time defined as 6.04800e5 second.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">604800</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;year"> + <rdfs:label xml:lang="en">year</rdfs:label> + <rdfs:label xml:lang="nl">jaar</rdfs:label> + <rdfs:comment xml:lang="en">The year is a unit of time defined as 31556952 second.</rdfs:comment> + <om:LaTeXCommand>\yearUnit</om:LaTeXCommand> + <om:symbol>a</om:symbol> + <om:alternativeSymbol>y</om:alternativeSymbol> + <om:alternativeSymbol>yr</om:alternativeSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">31556952</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e-8Second-Time"> + <om:hasNumericalValue>1.0e-8</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;second-Time"/> + </om:Measure> + + <om:Measure rdf:about="&om;_3.1536e7Second-Time"> + <om:hasNumericalValue>3.1536e7</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;second-Time"/> + </om:Measure> + + <om:Measure rdf:about="&om;_3.6e3Second-Time"> + <om:hasNumericalValue>3.6e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;second-Time"/> + </om:Measure> + + <om:Measure rdf:about="&om;_6.04800e5Second-Time"> + <om:hasNumericalValue>6.04800e5</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;second-Time"/> + </om:Measure> + + <om:Measure rdf:about="&om;_6.0e1Second-Time"> + <om:hasNumericalValue>6.0e1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;second-Time"/> + </om:Measure> + + <om:Measure rdf:about="&om;_86400Second-Time"> + <om:hasNumericalValue>86400</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;second-Time"/> + </om:Measure> + + <om:Measure rdf:about="&om;_9.972696e-1Second-Time"> + <om:hasNumericalValue>9.972696e-1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;second-Time"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Time"> + <om:commonlyHasUnit rdf:resource="&om;day"/> + <om:commonlyHasUnit rdf:resource="&om;hour"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;shake"/> + <om:commonlyHasUnit rdf:resource="&om;year"/> + </owl:Class> + + <owl:Class rdf:about="&om;Date"> + <om:commonlyHasUnit rdf:resource="&om;day"/> + <om:commonlyHasUnit rdf:resource="&om;hour"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;shake"/> + <om:commonlyHasUnit rdf:resource="&om;year"/> + </owl:Class> + + <owl:Class rdf:about="&om;Duration"> + <om:commonlyHasUnit rdf:resource="&om;day"/> + <om:commonlyHasUnit rdf:resource="&om;hour"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;shake"/> + <om:commonlyHasUnit rdf:resource="&om;year"/> + </owl:Class> + + <owl:Class rdf:about="&om;Period"> + <om:commonlyHasUnit rdf:resource="&om;day"/> + <om:commonlyHasUnit rdf:resource="&om;hour"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;shake"/> + <om:commonlyHasUnit rdf:resource="&om;year"/> + </owl:Class> + + <!-- Gram Ontology --> + + <om:Unit rdf:about="&om;gram"> + <rdfs:label xml:lang="en">gram</rdfs:label> + <rdfs:label xml:lang="nl">gram</rdfs:label> + <rdfs:label xml:lang="zh">克</rdfs:label> + <rdfs:comment xml:lang="en">The gram is a unit of mass defined as 1.0e-3 kilogram.</rdfs:comment> + <om:symbol>g</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;Mass"> + <om:commonlyHasUnit rdf:resource="&om;gram"/> + </owl:Class> + + <owl:Class rdf:about="&om;MassUnit"> + <rdfs:label xml:lang="en">mass unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;carat-Mass"/> + <om:Unit rdf:about="&om;grain"/> + <om:Unit rdf:about="&om;gram"/> + <om:Unit rdf:about="&om;hundredweight-British"/> + <om:Unit rdf:about="&om;hundredweight-US"/> + <om:Unit rdf:about="&om;InternationalUnit"/> + <om:Unit rdf:about="&om;milligramRAE"/> + <om:Unit rdf:about="&om;ounceApothecaries"/> + <om:Unit rdf:about="&om;ounceAvoirdupois"/> + <om:Unit rdf:about="&om;pennyweight-Troy"/> + <om:Unit rdf:about="&om;poundApothecaries"/> + <om:Unit rdf:about="&om;poundAvoirdupois"/> + <om:Unit rdf:about="&om;slug"/> + <om:Unit rdf:about="&om;solarMass"/> + <om:Unit rdf:about="&om;ton-ShortAssay"/> + <om:Unit rdf:about="&om;ton-Long"/> + <om:Unit rdf:about="&om;ton-Short"/> + <om:Unit rdf:about="&om;tonne"/> + <om:Unit rdf:about="&om;unifiedAtomicMassUnit"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedGram"/> + <owl:Class rdf:about="&om;PrefixedTonne"/> + <owl:Class rdf:about="&om;PrefixedUnifiedAtomicMassUnit"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Mass"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MassUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Gram Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctogram"> + <rdfs:label xml:lang="en">yoctogram</rdfs:label> + <rdfs:label xml:lang="nl">yoctogram</rdfs:label> + <rdfs:comment xml:lang="en">The yoctogram is a unit of mass defined as 1.0e-24 gram.</rdfs:comment> + <om:symbol>yg</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptogram"> + <rdfs:label xml:lang="en">zeptogram</rdfs:label> + <rdfs:label xml:lang="nl">zeptogram</rdfs:label> + <rdfs:comment xml:lang="en">The zeptgram is a unit of mass defined as 1.0e-21 gram.</rdfs:comment> + <om:symbol>zg</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attogram"> + <rdfs:label xml:lang="en">attogram</rdfs:label> + <rdfs:label xml:lang="nl">attogram</rdfs:label> + <rdfs:comment xml:lang="en">The attogram is a unit of mass defined as 1.0e-18 gram.</rdfs:comment> + <om:symbol>ag</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtogram"> + <rdfs:label xml:lang="en">femtogram</rdfs:label> + <rdfs:label xml:lang="nl">femtogram</rdfs:label> +<!-- <rdfs:label xml:lang="zh">飛克</rdfs:label> --> + <rdfs:comment xml:lang="en">The femtogram is a unit of mass defined as 1.0e-15 gram.</rdfs:comment> + <om:symbol>fg</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picogram"> + <rdfs:label xml:lang="en">picogram</rdfs:label> + <rdfs:label xml:lang="nl">picogram</rdfs:label> +<!-- <rdfs:label xml:lang="zh">皮克</rdfs:label> --> + <rdfs:comment xml:lang="en">The picogram is a unit of mass defined as 1.0e-12 gram.</rdfs:comment> + <om:symbol>pg</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanogram"> + <rdfs:label xml:lang="en">nanogram</rdfs:label> + <rdfs:label xml:lang="nl">nanogram</rdfs:label> + <rdfs:label xml:lang="zh">纳克</rdfs:label> + <rdfs:comment xml:lang="en">The nanogram is a unit of mass defined as 1.0e-9 gram.</rdfs:comment> + <om:symbol>ng</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microgram"> + <rdfs:label xml:lang="en">microgram</rdfs:label> + <rdfs:label xml:lang="nl">microgram</rdfs:label> + <rdfs:label xml:lang="zh">微克</rdfs:label> + <rdfs:comment xml:lang="en">The microgram is a unit of mass defined as 1.0e-6 gram.</rdfs:comment> + <om:symbol>μg</om:symbol> + <om:unofficialAbbreviation>mcg</om:unofficialAbbreviation> + <om:unofficialAbbreviation>ug</om:unofficialAbbreviation> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;milligram"> + <rdfs:label xml:lang="en">milligram</rdfs:label> + <rdfs:label xml:lang="nl">milligram</rdfs:label> + <rdfs:label xml:lang="zh">毫克</rdfs:label> + <rdfs:comment xml:lang="en">The milligram is a unit of mass defined as 1.0e-3 gram.</rdfs:comment> + <om:symbol>mg</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centigram"> + <rdfs:label xml:lang="en">centigram</rdfs:label> + <rdfs:label xml:lang="nl">centigram</rdfs:label> + <!-- <rdfs:label xml:lang="zh">厘克</rdfs:label> --> + <rdfs:label xml:lang="zh">百分之一克</rdfs:label> + <rdfs:comment xml:lang="en">The centigram is a unit of mass defined as 1.0e-2 gram.</rdfs:comment> + <om:symbol>cg</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decigram"> + <rdfs:label xml:lang="en">decigram</rdfs:label> + <rdfs:label xml:lang="nl">decigram</rdfs:label> + <!-- <rdfs:label xml:lang="zh">分克</rdfs:label> --> + <rdfs:label xml:lang="zh">十分之一克</rdfs:label> + <rdfs:comment xml:lang="en">The decigram is a unit of mass defined as 1.0e-1 gram.</rdfs:comment> + <om:symbol>dg</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decagram"> + <rdfs:label xml:lang="en">decagram</rdfs:label> + <rdfs:label xml:lang="nl">decagram</rdfs:label> + <rdfs:comment xml:lang="en">The decagram is a unit of mass defined as 1.0e1 gram.</rdfs:comment> + <om:symbol>dag</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectogram"> + <rdfs:label xml:lang="en">hectogram</rdfs:label> + <rdfs:label xml:lang="nl">hectogram</rdfs:label> + <om:alternativeLabel xml:lang="en">100 gram</om:alternativeLabel> + <rdfs:comment xml:lang="en">The hectogram is a unit of mass defined as 1.0e2 gram.</rdfs:comment> + <om:symbol>hg</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilogram"> + <rdfs:label xml:lang="en">kilogram</rdfs:label> + <rdfs:label xml:lang="nl">kilogram</rdfs:label> + <!-- <rdfs:label xml:lang="zh">公斤</rdfs:label> --> + <rdfs:label xml:lang="zh">公斤</rdfs:label> + <om:symbol>kg</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <owl:Thing rdf:about="&om;internationalPrototypeOfTheKilogram"> + <rdfs:label xml:lang="en">international prototype of the kilogram</rdfs:label> + </owl:Thing> + + <Mass rdf:about="&om;massOfTheInternationalPrototypeOfTheKilogram"> + <rdfs:label xml:lang="en">mass of the international prototype of the kilogram</rdfs:label> + <om:hasPhenomenon rdf:resource="&om;internationalPrototypeOfTheKilogram"/> + </Mass> + + <om:PrefixedUnit rdf:about="&om;kilogram"> + <rdfs:comment xml:lang="en">The kilogram is a unit of mass defined as the mass of the international prototype of the kilogram.</rdfs:comment> + <om:longcomment xml:lang="en">The kilogram is a unit of mass defined as the mass of the international prototype of the kilogram. The kilogram is a base unit in the International System of Units.</om:longcomment> + <om:hasQuantity rdf:resource="&om;massOfTheInternationalPrototypeOfTheKilogram"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megagram"> + <rdfs:label xml:lang="en">megagram</rdfs:label> + <rdfs:label xml:lang="nl">megagram</rdfs:label> +<!-- <rdfs:label xml:lang="zh">兆克</rdfs:label> --> + <rdfs:comment xml:lang="en">The megagram is a unit of mass defined as 1.0e6 gram.</rdfs:comment> + <om:symbol>Mg</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigagram"> + <rdfs:label xml:lang="en">gigagram</rdfs:label> + <rdfs:label xml:lang="nl">gigagram</rdfs:label> +<!-- <rdfs:label xml:lang="zh">吉克</rdfs:label> --> + <rdfs:comment xml:lang="en">The gigagram is a unit of mass defined as 1.0e9 gram.</rdfs:comment> + <om:symbol>Gg</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;teragram"> + <rdfs:label xml:lang="en">teragram</rdfs:label> + <rdfs:label xml:lang="nl">teragram</rdfs:label> + <!-- <rdfs:label xml:lang="zh">太克</rdfs:label> --> + <rdfs:label xml:lang="zh">10^12克</rdfs:label> + <rdfs:comment xml:lang="en">The teragram is a unit of mass defined as 1.0e12 gram.</rdfs:comment> + <om:symbol>Tg</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petagram"> + <rdfs:label xml:lang="en">petagram</rdfs:label> + <rdfs:label xml:lang="nl">petagram</rdfs:label> + <!-- <rdfs:label xml:lang="zh">拍克</rdfs:label> --> + <rdfs:label xml:lang="zh">10^15克</rdfs:label> + <rdfs:comment xml:lang="en">The petagram is a unit of mass defined as 1.0e15 gram.</rdfs:comment> + <om:symbol>Pg</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exagram"> + <rdfs:label xml:lang="en">exagram</rdfs:label> + <rdfs:label xml:lang="nl">exagram</rdfs:label> + <!-- <rdfs:label xml:lang="zh">艾克</rdfs:label> --> + <rdfs:label xml:lang="zh">千兆兆克</rdfs:label> + <rdfs:comment xml:lang="en">The exagram is a unit of mass defined as 1.0e18 gram.</rdfs:comment> + <om:symbol>Eg</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettagram"> + <rdfs:label xml:lang="en">zettagram</rdfs:label> + <rdfs:label xml:lang="nl">zettagram</rdfs:label> + <!-- <rdfs:label xml:lang="zh">泽克</rdfs:label> --> + <rdfs:label xml:lang="zh">10^21克</rdfs:label> + <rdfs:comment xml:lang="en">The zettagram is a unit of mass defined as 1.0e21 gram.</rdfs:comment> + <om:symbol>Zg</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottagram"> + <rdfs:label xml:lang="en">yottagram</rdfs:label> + <rdfs:label xml:lang="nl">yottagram</rdfs:label> +<!-- <rdfs:label xml:lang="zh">尧克</rdfs:label> --> + <rdfs:comment xml:lang="en">The yottagram is a unit of mass defined as 1.0e24 gram.</rdfs:comment> + <om:symbol>YG</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedGram"> + <rdfs:label xml:lang="en">prefixed gram</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;gram"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Mass"> + <om:commonlyHasUnit rdf:resource="&om;attogram"/> + <om:commonlyHasUnit rdf:resource="&om;exagram"/> + <om:commonlyHasUnit rdf:resource="&om;centigram"/> + <om:commonlyHasUnit rdf:resource="&om;decagram"/> + <om:commonlyHasUnit rdf:resource="&om;decigram"/> + <om:commonlyHasUnit rdf:resource="&om;femtogram"/> + <om:commonlyHasUnit rdf:resource="&om;gigagram"/> + <om:commonlyHasUnit rdf:resource="&om;hectogram"/> + <om:commonlyHasUnit rdf:resource="&om;kilogram"/> + <om:commonlyHasUnit rdf:resource="&om;megagram"/> + <om:commonlyHasUnit rdf:resource="&om;microgram"/> + <om:commonlyHasUnit rdf:resource="&om;milligram"/> + <om:commonlyHasUnit rdf:resource="&om;nanogram"/> + <om:commonlyHasUnit rdf:resource="&om;petagram"/> + <om:commonlyHasUnit rdf:resource="&om;picogram"/> + <om:commonlyHasUnit rdf:resource="&om;teragram"/> + </owl:Class> + + <!-- Tonne Ontology --> + + <om:Unit rdf:about="&om;tonne"> + <rdfs:label xml:lang="en">tonne</rdfs:label> + <rdfs:label xml:lang="nl">ton</rdfs:label> + <!-- <rdfs:label xml:lang="zh">公噸</rdfs:label> --> + <rdfs:label xml:lang="zh">公吨</rdfs:label> + <om:alternativeLabel xml:lang="en">metric ton</om:alternativeLabel> + <rdfs:comment xml:lang="en">The tonne is a unit of mass defined as 1000 kilogram.</rdfs:comment> + <om:symbol>t</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">1000</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e3Kilogram"> + <om:hasNumericalValue>1.0e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogram"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Mass"> + <om:commonlyHasUnit rdf:resource="&om;tonne"/> + </owl:Class> + + <!-- Tonne Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;kilotonne"> + <rdfs:label xml:lang="en">kilotonne</rdfs:label> + <rdfs:label xml:lang="nl">kiloton</rdfs:label> + <om:symbol>kt</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tonne"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megatonne"> + <rdfs:label xml:lang="en">megatonne</rdfs:label> + <rdfs:label xml:lang="nl">megaton</rdfs:label> + <om:symbol>Mt</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tonne"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedTonne"> + <rdfs:label xml:lang="en">prefixed tonne</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;tonne"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Mass"> + <om:commonlyHasUnit rdf:resource="&om;kilotonne"/> + <om:commonlyHasUnit rdf:resource="&om;megatonne"/> + </owl:Class> + + <!-- Unified Atomic Mass Unit Ontology --> + + <om:Unit rdf:about="&om;unifiedAtomicMassUnit"> + <rdfs:label xml:lang="en">unified atomic mass unit</rdfs:label> + <rdfs:comment xml:lang="en">The unified atomic mass unit is a unit of mass defined as 1.660538782(83)e-27 kilogram.</rdfs:comment> + <om:symbol>u</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;Mass"> + <om:commonlyHasUnit rdf:resource="&om;unifiedAtomicMassUnit"/> + </owl:Class> + + <owl:Class rdf:about="&om;AtomicMass"> + <om:commonlyHasUnit rdf:resource="&om;unifiedAtomicMassUnit"/> + </owl:Class> + + <!-- Unified Atomic Mass Unit Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;nanounifiedAtomicMassUnit"> + <rdfs:label xml:lang="en">nanounified atomic mass unit</rdfs:label> + <om:symbol>nu</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;unifiedAtomicMassUnit"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedUnifiedAtomicMassUnit"> + <rdfs:label xml:lang="en">prefixed unified atomic mass unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;unifiedAtomicMassUnit"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Mass"> + <om:commonlyHasUnit rdf:resource="&om;nanounifiedAtomicMassUnit"/> + </owl:Class> + + <owl:Class rdf:about="&om;AtomicMass"> + <om:commonlyHasUnit rdf:resource="&om;nanounifiedAtomicMassUnit"/> + </owl:Class> + + <!-- Mass Unit Ontology --> + + <om:Unit rdf:about="&om;carat-Mass"> + <rdfs:label xml:lang="en">carat (mass)</rdfs:label> + <rdfs:label xml:lang="nl">karaat (massa)</rdfs:label> + <rdfs:comment xml:lang="en">The carat (mass) is a unit of mass defined as 2.0e-4 kilogram.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.00020</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;grain"> + <rdfs:label xml:lang="en">grain</rdfs:label> + <rdfs:comment xml:lang="en">The grain is a unit of mass defined as 6.479891e-5 kilogram.</rdfs:comment> + <om:symbol>gr</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.00006479891</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;hundredweight-British"> + <rdfs:label xml:lang="en">hundredweight (British)</rdfs:label> + <om:alternativeLabel xml:lang="en">British hundredweight</om:alternativeLabel> + <rdfs:comment xml:lang="en">The British hundredweight is a unit of mass defined as 5.080235e1 kilogram.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">50.80235</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;hundredweight-US"> + <rdfs:label xml:lang="en">hundredweight (US)</rdfs:label> + <om:alternativeLabel xml:lang="en">US hundredweight</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US hundredweight is a unit of mass defined as 4.535924e1 kilogram.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">45.35924</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;InternationalUnit"> + <rdfs:label xml:lang="en">International Unit</rdfs:label> + <rdfs:label xml:lang="zh">国际单位</rdfs:label> + <om:symbol>IU</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;milligramRAE"> + <rdfs:label xml:lang="en">milligram RAE</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;ounceApothecaries"> + <!-- Should have been ounce-Apothecaries (i.e., with a dash) --> + <rdfs:label xml:lang="en">ounce (apothecaries')</rdfs:label> + <om:alternativeLabel xml:lang="en">apothecaries' ounce</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">troy ounce</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">ounce (troy)</om:alternativeLabel> + <rdfs:comment xml:lang="en">The apothecaries' ounce is a unit of mass defined as 3.110348e-2 kilogram.</rdfs:comment> + <om:symbol>oz (ap.)</om:symbol> + <om:alternativeSymbol>oz (apoth)</om:alternativeSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.03110348</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;ounceAvoirdupois"> + <!-- Should have been ounce-Avoirdupois (i.e., with a dash) --> + <rdfs:label xml:lang="en">ounce (avoirdupois)</rdfs:label> + <om:alternativeLabel xml:lang="en">avoirdupois ounce</om:alternativeLabel> + <rdfs:comment xml:lang="en">The avoirdupois ounce is a unit of mass defined as 2.834952e-2 kilogram.</rdfs:comment> + <om:symbol>oz</om:symbol> + <om:alternativeSymbol>oz (av.)</om:alternativeSymbol> + <om:alternativeSymbol>oz avdp</om:alternativeSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.02834952</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;pennyweight-Troy"> + <rdfs:label xml:lang="en">pennyweight (Troy)</rdfs:label> + <om:alternativeLabel xml:lang="en">Troy pennyweight</om:alternativeLabel> + <rdfs:comment xml:lang="en">The Troy pennyweight is a unit of mass defined as 1.555174e-3 kilogram.</rdfs:comment> + <om:symbol>dwt</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.001555174</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;poundApothecaries"> + <!-- Should have been pound-Apothecaries (i.e., with a dash) --> + <rdfs:label xml:lang="en">pound (apthecaries')</rdfs:label> + <om:alternativeLabel xml:lang="en">apothecaries' pound</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">troy pound</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">pound (troy)</om:alternativeLabel> + <rdfs:comment xml:lang="en">The apothecaries' pound is a unit of mass defined as 3.732417e-1 kilogram.</rdfs:comment> + <om:symbol>lb</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.3732417</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;poundAvoirdupois"> + <!-- Should have been pound-Avoirdupois (i.e., with a dash) --> + <rdfs:label xml:lang="en">pound (avoirdupois)</rdfs:label> + <om:alternativeLabel xml:lang="en">avoirdupois pound</om:alternativeLabel> + <rdfs:comment xml:lang="en">The avoirdupois pound is a unit of mass defined as 4.535924e-1 kilogram.</rdfs:comment> + <om:symbol>lb</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.45359237</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;slug"> + <rdfs:label xml:lang="en">slug</rdfs:label> + <!-- <rdfs:label xml:lang="zh">斯勒格</rdfs:label> --> + <rdfs:label xml:lang="zh">金属块</rdfs:label> + <rdfs:comment xml:lang="en">The slug is a unit of mass defined as 1.459390e1 kilogram.</rdfs:comment> + <om:symbol>slug</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">14.59390</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;ton-ShortAssay"> + <rdfs:label xml:lang="en">ton (short assay)</rdfs:label> + <om:alternativeLabel xml:lang="en">short assay ton</om:alternativeLabel> + <rdfs:comment xml:lang="en">The short assay ton is a unit of mass defined as 2.916667e-2 kilogram.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.02916667</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;ton-Long"> + <rdfs:label xml:lang="en">ton (long)</rdfs:label> + <om:alternativeLabel xml:lang="en">long ton</om:alternativeLabel> + <rdfs:comment xml:lang="en">The long ton is a unit of mass defined as 1.016047e3 kilogram.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">1016.047</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;ton-Short"> + <rdfs:label xml:lang="en">ton (short)</rdfs:label> + <om:alternativeLabel xml:lang="en">short ton</om:alternativeLabel> + <rdfs:comment xml:lang="en">The short ton is a unit of mass defined as 9.071847e2 kilogram.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">907.1847</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e-3Kilogram"> + <om:hasNumericalValue>1.0e-3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogram"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.016047e3Kilogram"> + <om:hasNumericalValue>1.016047e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogram"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.459390e1Kilogram"> + <om:hasNumericalValue>1.459390e1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogram"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.555174e-3Kilogram"> + <om:hasNumericalValue>1.555174e-3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogram"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.98892e30Kilogram"> + <om:hasNumericalValue>1.98892e30</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogram"/> + </om:Measure> + + <om:Measure rdf:about="&om;_2.0e-4Kilogram"> + <om:hasNumericalValue>2.0e-4</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogram"/> + </om:Measure> + + <om:Measure rdf:about="&om;_2.834952e-2Kilogram"> + <om:hasNumericalValue>2.834952e-2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogram"/> + </om:Measure> + + <om:Measure rdf:about="&om;_2.916667e-2Kilogram"> + <om:hasNumericalValue>2.916667e-2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogram"/> + </om:Measure> + + <om:Measure rdf:about="&om;_3.110348e-2Kilogram"> + <om:hasNumericalValue>3.110348e-2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogram"/> + </om:Measure> + + <om:Measure rdf:about="&om;_3.732417e-1Kilogram"> + <om:hasNumericalValue>3.732417e-1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogram"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.5359237e-1Kilogram"> + <om:hasNumericalValue>4.535924e-1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogram"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.535924e1Kilogram"> + <om:hasNumericalValue>4.535924e1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogram"/> + </om:Measure> + + <om:Measure rdf:about="&om;_5.080235e1Kilogram"> + <om:hasNumericalValue>5.080235e1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogram"/> + </om:Measure> + + <om:Measure rdf:about="&om;_6.479891e-5Kilogram"> + <om:hasNumericalValue>6.479891e-5</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogram"/> + </om:Measure> + + <om:Measure rdf:about="&om;_9.071847e2Kilogram"> + <om:hasNumericalValue>9.071847e2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogram"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Mass"> + <om:commonlyHasUnit rdf:resource="&om;carat-Mass"/> + <om:commonlyHasUnit rdf:resource="&om;grain"/> + <om:commonlyHasUnit rdf:resource="&om;hundredweight-British"/> + <om:commonlyHasUnit rdf:resource="&om;hundredweight-US"/> + <om:commonlyHasUnit rdf:resource="&om;InternationalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;milligramRAE"/> + <om:commonlyHasUnit rdf:resource="&om;ounceAvoirdupois"/> + <om:commonlyHasUnit rdf:resource="&om;ounceApothecaries"/> + <om:commonlyHasUnit rdf:resource="&om;pennyweight-Troy"/> + <om:commonlyHasUnit rdf:resource="&om;poundApothecaries"/> + <om:commonlyHasUnit rdf:resource="&om;poundAvoirdupois"/> + <om:commonlyHasUnit rdf:resource="&om;slug"/> + <om:commonlyHasUnit rdf:resource="&om;ton-ShortAssay"/> + <om:commonlyHasUnit rdf:resource="&om;ton-Long"/> + <om:commonlyHasUnit rdf:resource="&om;ton-Short"/> + </owl:Class> + + <!-- One Ontology --> + + <om:Unit rdf:about="&om;one"> + <rdfs:label xml:lang="en">one</rdfs:label> + <om:alternativeLabel xml:lang="en">unit one</om:alternativeLabel> + <rdfs:comment xml:lang="en">Unit one is a unit of dimension one.</rdfs:comment> + <om:symbol>1</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <owl:Class rdf:about="&om;QuantityOfDimensionOne"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;Number"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;Ratio"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;Percentage"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;MassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;AreaFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;Coverage"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumeFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;Overrun"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;RelativeHumidity"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;QuantityOfDimensionOneUnit"> + <rdfs:label xml:lang="en">quantity of dimension one unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + <om:Unit rdf:about="&om;percent"/> + <om:Unit rdf:about="&om;partsPerMillion"/> + <om:Unit rdf:about="&om;halfDozen"/> + <om:Unit rdf:about="&om;dozen"/> + <om:Unit rdf:about="&om;hundredCount"/> + <om:Unit rdf:about="&om;gross"/> + <om:Unit rdf:about="&om;thousandPiece"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;QuantityOfDimensionOne"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;QuantityOfDimensionOneUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;NumberUnit"> + <rdfs:label xml:lang="en">number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + <om:Unit rdf:about="&om;halfDozen"/> + <om:Unit rdf:about="&om;dozen"/> + <om:Unit rdf:about="&om;hundredCount"/> + <om:Unit rdf:about="&om;gross"/> + <om:Unit rdf:about="&om;thousandPiece"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Number"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;NumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;RatioUnit"> + <rdfs:label xml:lang="en">ratio unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + <om:Unit rdf:about="&om;percent"/> + <om:Unit rdf:about="&om;partsPerMillion"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Ratio"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;RatioUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;PercentageUnit"> + <rdfs:label xml:lang="en">percentage unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;percent"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Percentage"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;PercentageUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;MassFractionUnit"> + <rdfs:label xml:lang="en">mass fraction unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + <om:Unit rdf:about="&om;partsPerMillion"/> + <om:Unit rdf:about="&om;percent"/> + <om:UnitDivision rdf:about="&om;gramPerGram"/> + <om:UnitDivision rdf:about="&om;gramPerKilogram"/> + <om:UnitDivision rdf:about="&om;gramPerHectogram"/> + <om:UnitDivision rdf:about="&om;kilogramPerKilogram"/> + <om:UnitDivision rdf:about="&om;milligramPerHectogram"/> + <om:UnitDivision rdf:about="&om;milligramPerKilogram"/> + <om:UnitDivision rdf:about="&om;microgramPerHectogram"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MassFraction"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MassFractionUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;AreaFractionUnit"> + <rdfs:label xml:lang="en">area fraction unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + <om:Unit rdf:about="&om;partsPerMillion"/> + <om:Unit rdf:about="&om;percent"/> + <om:UnitDivision rdf:about="&om;squareMetrePerSquareMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AreaFraction"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;AreaFractionUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;VolumeFractionUnit"> + <rdfs:label xml:lang="en">volume fraction unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + <om:Unit rdf:about="&om;partsPerMillion"/> + <om:Unit rdf:about="&om;percent"/> + <om:UnitDivision rdf:about="&om;cubicCentimetrePerCubicCentimetre"/> + <om:UnitDivision rdf:about="&om;cubicMetrePerCubicmetre"/> + <om:UnitDivision rdf:about="&om;cubicMillimetrePerCubicMillimetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;VolumeFraction"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;VolumeFractionUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;RelativeHumidityUnit"> + <rdfs:label xml:lang="en">relative humidity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + <om:Unit rdf:about="&om;percent"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;RelativeHumidity"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;RelativeHumidityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Quantity of Dimension One Unit Ontology --> + + <om:Unit rdf:about="&om;percent"> + <rdfs:label xml:lang="en">percent</rdfs:label> + <rdfs:label xml:lang="nl">procent</rdfs:label> + <!-- <rdfs:label xml:lang="zh">百分比</rdfs:label> --> + <rdfs:label xml:lang="zh">百分</rdfs:label> + <rdfs:comment xml:lang="en">The percent is a unit of dimension one defined as 1/100.</rdfs:comment> + <om:symbol>%</om:symbol> + <om:LaTeXSymbol>\%</om:LaTeXSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.01</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;one"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <om:Unit rdf:about="&om;partsPerMillion"> + <rdfs:label xml:lang="en">parts per million</rdfs:label> + <rdfs:comment xml:lang="en">Parts per million is a unit of dimension one defined as 1/1 000 000.</rdfs:comment> + <om:symbol>ppm</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.000001</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;one"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <om:Unit rdf:about="&om;halfDozen"> + <rdfs:label xml:lang="en">half dozen</rdfs:label> + <rdfs:comment xml:lang="en">Half dozen is a unit of dimension one defined as 6.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">6</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;one"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <om:Unit rdf:about="&om;dozen"> + <rdfs:label xml:lang="en">dozen</rdfs:label> + <rdfs:comment xml:lang="en">Dozen is a unit of dimension one defined as 12.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">12</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;one"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <om:Unit rdf:about="&om;hundredCount"> + <rdfs:label xml:lang="en">hundred count</rdfs:label> + <rdfs:comment xml:lang="en">Hundred count is a unit of dimension one defined as 100.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">100</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;one"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <om:Unit rdf:about="&om;gross"> + <rdfs:label xml:lang="en">gross</rdfs:label> + <rdfs:comment xml:lang="en">Gross is a unit of dimension one defined as 144.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">144</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;one"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <om:Unit rdf:about="&om;thousandPiece"> + <rdfs:label xml:lang="en">thousand piece</rdfs:label> + <rdfs:comment xml:lang="en">Thousand is a unit of dimension one defined as 1000.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">1000</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;one"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_0.000001-One"> + <om:hasNumericalValue>0.000001</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;one"/> + </om:Measure> + + <om:Measure rdf:about="&om;_0.01-One"> + <om:hasNumericalValue>0.01</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;one"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;QuantityOfDimensionOne"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + <om:commonlyHasUnit rdf:resource="&om;partsPerMillion"/> + <om:commonlyHasUnit rdf:resource="&om;halfDozen"/> + <om:commonlyHasUnit rdf:resource="&om;dozen"/> + <om:commonlyHasUnit rdf:resource="&om;hundredCount"/> + <om:commonlyHasUnit rdf:resource="&om;gross"/> + <om:commonlyHasUnit rdf:resource="&om;thousandPiece"/> + </owl:Class> + + <owl:Class rdf:about="&om;Ratio"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + <om:commonlyHasUnit rdf:resource="&om;partsPerMillion"/> + </owl:Class> + + <owl:Class rdf:about="&om;Percentage"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;MassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + <om:commonlyHasUnit rdf:resource="&om;partsPerMillion"/> + </owl:Class> + + <owl:Class rdf:about="&om;AreaFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + <om:commonlyHasUnit rdf:resource="&om;partsPerMillion"/> + </owl:Class> + + <owl:Class rdf:about="&om;Coverage"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + <om:commonlyHasUnit rdf:resource="&om;partsPerMillion"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumeFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + <om:commonlyHasUnit rdf:resource="&om;partsPerMillion"/> + </owl:Class> + + <owl:Class rdf:about="&om;Overrun"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + <om:commonlyHasUnit rdf:resource="&om;partsPerMillion"/> + </owl:Class> + + <!-- Reciprocal Second Ontology --> + + <om:UnitExponentiation rdf:about="&om;reciprocalSecond-Time"> + <rdfs:label xml:lang="en">reciprocal second</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde seconde</rdfs:label> + <om:symbol>s-1</om:symbol> + <om:hasBase rdf:resource="&om;second-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">-1</om:hasExponent> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:UnitExponentiation> + + <owl:Class rdf:about="&om;Frequency"> + <om:commonlyHasUnit rdf:resource="&om;reciprocalSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;FrequencyUnit"> + <rdfs:label xml:lang="en">frequency unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;hertz"/> + <om:UnitExponentiation rdf:about="&om;reciprocalSecond-Time"/> + <om:UnitExponentiation rdf:about="&om;reciprocalMinute-Time"/> + <om:UnitExponentiation rdf:about="&om;reciprocalHour"/> + <om:UnitExponentiation rdf:about="&om;reciprocalDay"/> + <om:UnitExponentiation rdf:about="&om;reciprocalYear"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedHertz"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Frequency"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;FrequencyUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Hertz Ontology --> + + <om:Unit rdf:about="&om;hertz"> + <rdfs:label xml:lang="en">hertz</rdfs:label> + <rdfs:label xml:lang="nl">hertz</rdfs:label> + <rdfs:label xml:lang="zh">赫兹</rdfs:label> + <rdfs:comment xml:lang="en">The hertz is a unit of frequency defined as 1 divided by second.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>Hz</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;reciprocalSecond-Time"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;Frequency"> + <om:commonlyHasUnit rdf:resource="&om;hertz"/> + </owl:Class> + + <!-- Hertz Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctohertz"> + <rdfs:label xml:lang="en">yoctohertz</rdfs:label> + <rdfs:label xml:lang="nl">yoctohertz</rdfs:label> + <rdfs:comment xml:lang="en">The yoctohertz is a unit of frequency defined as 1.0e-24 hertz.</rdfs:comment> + <om:symbol>yHz</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptohertz"> + <rdfs:label xml:lang="en">zeptohertz</rdfs:label> + <rdfs:label xml:lang="nl">zeptohertz</rdfs:label> + <rdfs:comment xml:lang="en">The zepthertz is a unit of frequency defined as 1.0e-21 hertz.</rdfs:comment> + <om:symbol>zHz</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attohertz"> + <rdfs:label xml:lang="en">attohertz</rdfs:label> + <rdfs:label xml:lang="nl">attohertz</rdfs:label> + <rdfs:comment xml:lang="en">The attohertz is a unit of frequency defined as 1.0e-18 hertz.</rdfs:comment> + <om:symbol>aHz</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtohertz"> + <rdfs:label xml:lang="en">femtohertz</rdfs:label> + <rdfs:label xml:lang="nl">femtohertz</rdfs:label> + <rdfs:comment xml:lang="en">The femtohertz is a unit of frequency defined as 1.0e-15 hertz.</rdfs:comment> + <om:symbol>fHz</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picohertz"> + <rdfs:label xml:lang="en">picohertz</rdfs:label> + <rdfs:label xml:lang="nl">picohertz</rdfs:label> + <rdfs:comment xml:lang="en">The picohertz is a unit of frequency defined as 1.0e-12 hertz.</rdfs:comment> + <om:symbol>pHz</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanohertz"> + <rdfs:label xml:lang="en">nanohertz</rdfs:label> + <rdfs:label xml:lang="nl">nanohertz</rdfs:label> + <rdfs:comment xml:lang="en">The nanohertz is a unit of frequency defined as 1.0e-9 hertz.</rdfs:comment> + <om:symbol>nHz</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microhertz"> + <rdfs:label xml:lang="en">microhertz</rdfs:label> + <rdfs:label xml:lang="nl">microhertz</rdfs:label> + <rdfs:comment xml:lang="en">The microhertz is a unit of frequency defined as 1.0e-6 hertz.</rdfs:comment> + <om:symbol>μHz</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millihertz"> + <rdfs:label xml:lang="en">millihertz</rdfs:label> + <rdfs:label xml:lang="nl">millihertz</rdfs:label> + <rdfs:comment xml:lang="en">The millihertz is a unit of frequency defined as 1.0e-3 hertz.</rdfs:comment> + <om:symbol>mHz</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centihertz"> + <rdfs:label xml:lang="en">centihertz</rdfs:label> + <rdfs:label xml:lang="nl">centihertz</rdfs:label> + <rdfs:comment xml:lang="en">The centihertz is a unit of frequency defined as 1.0e-2 hertz.</rdfs:comment> + <om:symbol>cHz</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decihertz"> + <rdfs:label xml:lang="en">decihertz</rdfs:label> + <rdfs:label xml:lang="nl">decihertz</rdfs:label> + <rdfs:comment xml:lang="en">The decihertz is a unit of frequency defined as 1.0e-1 hertz.</rdfs:comment> + <om:symbol>dHz</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decahertz"> + <rdfs:label xml:lang="en">decahertz</rdfs:label> + <rdfs:label xml:lang="nl">decahertz</rdfs:label> + <rdfs:comment xml:lang="en">The decahertz is a unit of frequency defined as 1.0e1 hertz.</rdfs:comment> + <om:symbol>daHz</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectohertz"> + <rdfs:label xml:lang="en">hectohertz</rdfs:label> + <rdfs:label xml:lang="nl">hectohertz</rdfs:label> + <rdfs:comment xml:lang="en">The hectohertz is a unit of frequency defined as 1.0e2 hertz.</rdfs:comment> + <om:symbol>hHz</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilohertz"> + <rdfs:label xml:lang="en">kilohertz</rdfs:label> + <rdfs:label xml:lang="nl">kilohertz</rdfs:label> + <rdfs:comment xml:lang="en">The kilohertz is a unit of frequency defined as 1.0e3 hertz.</rdfs:comment> + <om:symbol>kHz</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megahertz"> + <rdfs:label xml:lang="en">megahertz</rdfs:label> + <rdfs:label xml:lang="nl">megahertz</rdfs:label> + <rdfs:comment xml:lang="en">The megahertz is a unit of frequency defined as 1.0e6 hertz.</rdfs:comment> + <om:symbol>MHz</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigahertz"> + <rdfs:label xml:lang="en">gigahertz</rdfs:label> + <rdfs:label xml:lang="nl">gigahertz</rdfs:label> + <rdfs:comment xml:lang="en">The gigahertz is a unit of frequency defined as 1.0e9 hertz.</rdfs:comment> + <om:symbol>GHz</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;terahertz"> + <rdfs:label xml:lang="en">terahertz</rdfs:label> + <rdfs:label xml:lang="nl">terahertz</rdfs:label> + <rdfs:comment xml:lang="en">The terahertz is a unit of frequency defined as 1.0e12 hertz.</rdfs:comment> + <om:symbol>THz</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petahertz"> + <rdfs:label xml:lang="en">petahertz</rdfs:label> + <rdfs:label xml:lang="nl">petahertz</rdfs:label> + <rdfs:comment xml:lang="en">The petahertz is a unit of frequency defined as 1.0e15 hertz.</rdfs:comment> + <om:symbol>PHz</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exahertz"> + <rdfs:label xml:lang="en">exahertz</rdfs:label> + <rdfs:label xml:lang="nl">exahertz</rdfs:label> + <rdfs:comment xml:lang="en">The exahertz is a unit of frequency defined as 1.0e18 hertz.</rdfs:comment> + <om:symbol>EHz</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettahertz"> + <rdfs:label xml:lang="en">zettahertz</rdfs:label> + <rdfs:label xml:lang="nl">zettahertz</rdfs:label> + <rdfs:comment xml:lang="en">The zettahertz is a unit of frequency defined as 1.0e21 hertz.</rdfs:comment> + <om:symbol>ZHz</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottahertz"> + <rdfs:label xml:lang="en">yottahertz</rdfs:label> + <rdfs:label xml:lang="nl">yottahertz</rdfs:label> + <rdfs:comment xml:lang="en">The yottahertz is a unit of frequency defined as 1.0e24 hertz.</rdfs:comment> + <om:symbol>YHz</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;hertz"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedHertz"> + <rdfs:label xml:lang="en">prefixed hertz</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;hertz"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Frequency"> + <om:commonlyHasUnit rdf:resource="&om;attohertz"/> + <om:commonlyHasUnit rdf:resource="&om;centihertz"/> + <om:commonlyHasUnit rdf:resource="&om;decahertz"/> + <om:commonlyHasUnit rdf:resource="&om;decihertz"/> + <om:commonlyHasUnit rdf:resource="&om;exahertz"/> + <om:commonlyHasUnit rdf:resource="&om;femtohertz"/> + <om:commonlyHasUnit rdf:resource="&om;gigahertz"/> + <om:commonlyHasUnit rdf:resource="&om;hectohertz"/> + <om:commonlyHasUnit rdf:resource="&om;kilohertz"/> + <om:commonlyHasUnit rdf:resource="&om;megahertz"/> + <om:commonlyHasUnit rdf:resource="&om;microhertz"/> + <om:commonlyHasUnit rdf:resource="&om;millihertz"/> + <om:commonlyHasUnit rdf:resource="&om;nanohertz"/> + <om:commonlyHasUnit rdf:resource="&om;petahertz"/> + <om:commonlyHasUnit rdf:resource="&om;picohertz"/> + <om:commonlyHasUnit rdf:resource="&om;terahertz"/> + </owl:Class> + + <!-- Frequency Unit Ontology --> + + <om:UnitExponentiation rdf:about="&om;reciprocalMinute-Time"> + <rdfs:label xml:lang="en">reciprocal minute</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde minuut</rdfs:label> + <om:symbol>min-1</om:symbol> + <om:hasBase rdf:resource="&om;minute-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">-1</om:hasExponent> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:UnitExponentiation> + + <om:UnitExponentiation rdf:about="&om;reciprocalHour"> + <rdfs:label xml:lang="en">reciprocal hour</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerd uur</rdfs:label> + <om:symbol>h-1</om:symbol> + <om:hasBase rdf:resource="&om;hour"/> + <om:hasExponent rdf:datatype="&xsd;integer">-1</om:hasExponent> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:UnitExponentiation> + + <om:UnitExponentiation rdf:about="&om;reciprocalDay"> + <rdfs:label xml:lang="en">reciprocal day</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde dag</rdfs:label> + <om:symbol>d-1</om:symbol> + <om:hasBase rdf:resource="&om;day"/> + <om:hasExponent rdf:datatype="&xsd;integer">-1</om:hasExponent> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:UnitExponentiation> + + <om:UnitExponentiation rdf:about="&om;reciprocalYear"> + <rdfs:label xml:lang="en">reciprocal year</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerd jaar</rdfs:label> + <om:symbol>a-1</om:symbol> + <om:hasBase rdf:resource="&om;year"/> + <om:hasExponent rdf:datatype="&xsd;integer">-1</om:hasExponent> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:UnitExponentiation> + + <owl:Class rdf:about="&om;Frequency"> + <om:commonlyHasUnit rdf:resource="&om;reciprocalMinute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;reciprocalHour"/> + <om:commonlyHasUnit rdf:resource="&om;reciprocalDay"/> + <om:commonlyHasUnit rdf:resource="&om;reciprocalYear"/> + </owl:Class> + + <!-- Reciprocal Cubic Metre Ontology --> + + <om:UnitExponentiation rdf:about="&om;reciprocalCubicMetre"> + <rdfs:label xml:lang="en">reciprocal cubic metre</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde kubieke meter</rdfs:label> + <om:symbol>m-3</om:symbol> + <om:hasBase rdf:resource="&om;metre"/> + <om:hasExponent rdf:datatype="&xsd;integer">-3</om:hasExponent> + <om:hasDimension rdf:resource="&om;numberDensity-Dimension"/> + </om:UnitExponentiation> + + <owl:Class rdf:about="&om;NumberDensity"> + <om:commonlyHasUnit rdf:resource="&om;reciprocalCubicMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberDensityUnit"> + <rdfs:label xml:lang="en">number density unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitExponentiation rdf:about="&om;reciprocalCubicCentimetre"/> + <om:UnitExponentiation rdf:about="&om;reciprocalLitre"/> + <om:UnitExponentiation rdf:about="&om;reciprocalCubicMetre"/> + <om:UnitExponentiation rdf:about="&om;reciprocalCubicParsec"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;NumberDensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;NumberDensityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Reciprocal Cubic Metre Multiples and Submultiples Ontology --> + + <om:UnitExponentiation rdf:about="&om;reciprocalCubicCentimetre"> + <rdfs:label xml:lang="en">reciprocal cubic centimetre</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde kubieke centimeter</rdfs:label> + <om:symbol>cm-3</om:symbol> + <om:hasBase rdf:resource="&om;centimetre"/> + <om:hasExponent rdf:datatype="&xsd;integer">-3</om:hasExponent> + <om:hasDimension rdf:resource="&om;numberDensity-Dimension"/> + </om:UnitExponentiation> + + <owl:Class rdf:about="&om;NumberDensity"> + <om:commonlyHasUnit rdf:resource="&om;reciprocalCubicCentimetre"/> + </owl:Class> + + <!-- Reciprocal Litre Ontology --> + + <om:UnitExponentiation rdf:about="&om;reciprocalLitre"> + <rdfs:label xml:lang="en">reciprocal litre</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde liter</rdfs:label> + <om:symbol>l-1</om:symbol> + <om:hasBase rdf:resource="&om;litre"/> + <om:hasExponent rdf:datatype="&xsd;integer">-1</om:hasExponent> + <om:hasDimension rdf:resource="&om;numberDensity-Dimension"/> + </om:UnitExponentiation> + + <owl:Class rdf:about="&om;NumberDensity"> + <om:commonlyHasUnit rdf:resource="&om;reciprocalLitre"/> + </owl:Class> + + <!-- Reciprocal Metre Ontology --> + + <om:UnitExponentiation rdf:about="&om;reciprocalMetre"> + <rdfs:label xml:lang="en">reciprocal metre</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde meter</rdfs:label> + <rdfs:comment xml:lang="en">Reciprocal metre is a unit of wavenumber defined as 1 divided by metre.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>m-1</om:symbol> + <om:hasBase rdf:resource="&om;metre"/> + <om:hasExponent rdf:datatype="&xsd;integer">-1</om:hasExponent> + <om:hasDimension rdf:resource="&om;wavenumber-Dimension"/> + </om:UnitExponentiation> + + <owl:Class rdf:about="&om;Wavenumber"> + <om:commonlyHasUnit rdf:resource="&om;reciprocalMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;WavenumberUnit"> + <rdfs:label xml:lang="en">wave number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;kayser"/> + <om:UnitExponentiation rdf:about="&om;reciprocalMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Wavenumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;WavenumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Wavenumber Unit Ontology --> + + <om:Unit rdf:about="&om;kayser"> + <rdfs:label xml:lang="en">kayser</rdfs:label> + <rdfs:label xml:lang="nl">kayser</rdfs:label> + <om:alternativeLabel xml:lang="en">rydberg</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">rydberg</om:alternativeLabel> + <rdfs:comment xml:lang="en">The kayser is a unit of wavenumber defined as 100 reciprocal metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">100</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;reciprocalMetre"/> + <om:hasDimension rdf:resource="&om;wavenumber-Dimension"/> + </om:Unit> + + <om:UnitExponentiation rdf:about="&om;reciprocalAngstrom"> + <rdfs:label xml:lang="en">reciprocal angstrom</rdfs:label> + <om:symbol>Å-1</om:symbol> + <om:hasBase rdf:resource="&om;angstrom"/> + <om:hasExponent rdf:datatype="&xsd;integer">-1</om:hasExponent> + <om:hasDimension rdf:resource="&om;wavenumber-Dimension"/> + </om:UnitExponentiation> + + <!-- <om:Measure rdf:about="&om;_1.0e2ReciprocalMetre"> + <om:hasNumericalValue>1.0e2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;reciprocalMetre"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Wavenumber"> + <om:commonlyHasUnit rdf:resource="&om;kayser"/> + <om:commonlyHasUnit rdf:resource="&om;reciprocalAngstrom"/> + </owl:Class> + + <!-- Metre Per Metre Ontology --> + + <om:UnitDivision rdf:about="&om;metrePerMetre"> + <rdfs:label xml:lang="en">metre per metre</rdfs:label> + <rdfs:label xml:lang="nl">meter per meter</rdfs:label> + <om:symbol>m/m</om:symbol> + <om:alternativeSymbol>m m-1</om:alternativeSymbol> + <om:alternativeSymbol>m·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;AngularDisplacement"> + <om:commonlyHasUnit rdf:resource="&om;metrePerMetre"/> + </owl:Class> + + <!-- Metre Per Second Squared Ontology --> + + <om:UnitDivision rdf:about="&om;metrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per second squared is a unit of acceleration defined as metre divided by second squared.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>m/s2</om:symbol> + <om:alternativeSymbol>m s-2</om:alternativeSymbol> + <om:alternativeSymbol>m·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Acceleration"> + <om:commonlyHasUnit rdf:resource="&om;metrePerSecond-TimeSquared"/> + </owl:Class> + + <owl:Class rdf:about="&om;GravitationalAcceleration"> + <om:commonlyHasUnit rdf:resource="&om;metrePerSecond-TimeSquared"/> + </owl:Class> + + <owl:Class rdf:about="&om;AccelerationUnit"> + <rdfs:label xml:lang="en">acceleration unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;gal"/> + <om:UnitDivision rdf:about="&om;metrePerSecond-TimeSquared"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedMetrePerSecond-TimeSquared"/> + <owl:Class rdf:about="&om;MetrePerPrefixedSecond-TimeSquared"/> + <owl:Class rdf:about="&om;PrefixedMetrePerPrefixedSecond-TimeSquared"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Acceleration"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;AccelerationUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Metre Per Second Squared Multiples and Submultiples Ontology --> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;yoctometrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">yoctometre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">yoctometer per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Yoctometre per second squared is a unit of acceleration defined as yoctometre divided by second squared.</rdfs:comment> + <om:symbol>ym/s2</om:symbol> + <om:alternativeSymbol>ym s-2</om:alternativeSymbol> + <om:alternativeSymbol>ym·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;yoctometre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;zeptometrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">zeptometre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">zeptometer per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Zeptometre per second squared is a unit of acceleration defined as zeptometre divided by second squared.</rdfs:comment> + <om:symbol>zm/s2</om:symbol> + <om:alternativeSymbol>zm s-2</om:alternativeSymbol> + <om:alternativeSymbol>zm·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;zeptometre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;attometrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">attometre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">attometer per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Attometre per second squared is a unit of acceleration defined as attometre divided by second squared.</rdfs:comment> + <om:symbol>am/s2</om:symbol> + <om:alternativeSymbol>am s-2</om:alternativeSymbol> + <om:alternativeSymbol>am·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;attometre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;femtometrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">femtometre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">femtometer per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Femtometre per second squared is a unit of acceleration defined as femtometre divided by second squared.</rdfs:comment> + <om:symbol>fm/s2</om:symbol> + <om:alternativeSymbol>fm s-2</om:alternativeSymbol> + <om:alternativeSymbol>fm·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;femtometre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;picometrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">picometre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">picometer per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Picometre per second squared is a unit of acceleration defined as picometre divided by second squared.</rdfs:comment> + <om:symbol>pm/s2</om:symbol> + <om:alternativeSymbol>pm s-2</om:alternativeSymbol> + <om:alternativeSymbol>pm·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;picometre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;nanometrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">nanometre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">nanometer per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Nanometre per second squared is a unit of acceleration defined as nanometre divided by second squared.</rdfs:comment> + <om:symbol>nm/s2</om:symbol> + <om:alternativeSymbol>nm s-2</om:alternativeSymbol> + <om:alternativeSymbol>nm·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;nanometre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;micrometrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">micrometre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">micrometer per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Micrometre per second squared is a unit of acceleration defined as micrometre divided by second squared.</rdfs:comment> + <om:symbol>μm/s2</om:symbol> + <om:alternativeSymbol>μm s-2</om:alternativeSymbol> + <om:alternativeSymbol>μm·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;micrometre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;millimetrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">millimetre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">millimeter per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Millimetre per second squared is a unit of acceleration defined as millimetre divided by second squared.</rdfs:comment> + <om:symbol>mm/s2</om:symbol> + <om:alternativeSymbol>mm s-2</om:alternativeSymbol> + <om:alternativeSymbol>mm·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;millimetre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;centimetrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">centimetre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">centimeter per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Centimetre per second squared is a unit of acceleration defined as centimetre divided by second squared.</rdfs:comment> + <om:symbol>cm/s2</om:symbol> + <om:alternativeSymbol>cm s-2</om:alternativeSymbol> + <om:alternativeSymbol>cm·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;centimetre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;decimetrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">decimetre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">decimeter per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Decimetre per second squared is a unit of acceleration defined as decimetre divided by second squared.</rdfs:comment> + <om:symbol>dm/s2</om:symbol> + <om:alternativeSymbol>dm s-2</om:alternativeSymbol> + <om:alternativeSymbol>dm·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;decimetre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;decametrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">decametre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">decameter per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Decametre per second squared is a unit of acceleration defined as decametre divided by second squared.</rdfs:comment> + <om:symbol>dam/s2</om:symbol> + <om:alternativeSymbol>dam s-2</om:alternativeSymbol> + <om:alternativeSymbol>dam·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;decametre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;hectometrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">hectometre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">hectometer per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Hectometre per second squared is a unit of acceleration defined as hectometre divided by second squared.</rdfs:comment> + <om:symbol>hm/s2</om:symbol> + <om:alternativeSymbol>hm s-2</om:alternativeSymbol> + <om:alternativeSymbol>hm·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;hectometre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;kilometrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">kilometre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">kilometer per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Kilometre per second squared is a unit of acceleration defined as kilometre divided by second squared.</rdfs:comment> + <om:symbol>km/s2</om:symbol> + <om:alternativeSymbol>km s-2</om:alternativeSymbol> + <om:alternativeSymbol>km·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilometre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;megametrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">megametre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">megameter per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Megametre per second squared is a unit of acceleration defined as megametre divided by second squared.</rdfs:comment> + <om:symbol>Mm/s2</om:symbol> + <om:alternativeSymbol>Mm s-2</om:alternativeSymbol> + <om:alternativeSymbol>Mm·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;megametre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;gigametrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">gigametre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">gigameter per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Gigametre per second squared is a unit of acceleration defined as gigametre divided by second squared.</rdfs:comment> + <om:symbol>Gm/s2</om:symbol> + <om:alternativeSymbol>Gm s-2</om:alternativeSymbol> + <om:alternativeSymbol>Gm·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gigametre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;terametrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">terametre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">terameter per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Terametre per second squared is a unit of acceleration defined as terametre divided by second squared.</rdfs:comment> + <om:symbol>Tm/s2</om:symbol> + <om:alternativeSymbol>Tm s-2</om:alternativeSymbol> + <om:alternativeSymbol>Tm·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;terametre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;petametrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">petametre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">petameter per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Petametre per second squared is a unit of acceleration defined as petametre divided by second squared.</rdfs:comment> + <om:symbol>Pm/s2</om:symbol> + <om:alternativeSymbol>Pm s-2</om:alternativeSymbol> + <om:alternativeSymbol>Pm·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;petametre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;exametrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">exametre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">exameter per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Exametre per second squared is a unit of acceleration defined as exametre divided by second squared.</rdfs:comment> + <om:symbol>Em/s2</om:symbol> + <om:alternativeSymbol>Em s-2</om:alternativeSymbol> + <om:alternativeSymbol>Em·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;exametre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;zettametrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">zettametre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">zettameter per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Zettametre per second squared is a unit of acceleration defined as zettametre divided by second squared.</rdfs:comment> + <om:symbol>Zm/s2</om:symbol> + <om:alternativeSymbol>Zm s-2</om:alternativeSymbol> + <om:alternativeSymbol>Zm·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;zettametre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:PrefixedMetrePerSecond-TimeSquared rdf:about="&om;yottametrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">yottametre per second squared</rdfs:label> + <rdfs:label xml:lang="nl">yottameter per seconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Yottametre per second squared is a unit of acceleration defined as yottametre divided by second squared.</rdfs:comment> + <om:symbol>Ym/s2</om:symbol> + <om:alternativeSymbol>Ym s-2</om:alternativeSymbol> + <om:alternativeSymbol>Ym·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;yottametre"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:PrefixedMetrePerSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerYoctosecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per yoctosecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per yoctoseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per yoctosecond squared is a unit of acceleration defined as metre divided by yoctosecond squared.</rdfs:comment> + <om:symbol>m/ys2</om:symbol> + <om:alternativeSymbol>m ys-2</om:alternativeSymbol> + <om:alternativeSymbol>m·ys-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;yoctosecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerZeptosecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per zeptosecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per zeptoseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per zeptosecond squared is a unit of acceleration defined as metre divided by zeptosecond squared.</rdfs:comment> + <om:symbol>m/zs2</om:symbol> + <om:alternativeSymbol>m zs-2</om:alternativeSymbol> + <om:alternativeSymbol>m·zs-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;zeptosecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerAttosecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per attosecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per attoseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per attosecond squared is a unit of acceleration defined as metre divided by attosecond squared.</rdfs:comment> + <om:symbol>m/as2</om:symbol> + <om:alternativeSymbol>m as-2</om:alternativeSymbol> + <om:alternativeSymbol>m·as-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;attosecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerFemtosecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per femtosecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per femtoseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per femtosecond squared is a unit of acceleration defined as metre divided by femtosecond squared.</rdfs:comment> + <om:symbol>m/fs2</om:symbol> + <om:alternativeSymbol>m fs-2</om:alternativeSymbol> + <om:alternativeSymbol>m·fs-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;femtosecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerPicosecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per picosecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per picoseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per picosecond squared is a unit of acceleration defined as metre divided by picosecond squared.</rdfs:comment> + <om:symbol>m/ps2</om:symbol> + <om:alternativeSymbol>m ps-2</om:alternativeSymbol> + <om:alternativeSymbol>m·ps-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;picosecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerNanosecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per nanosecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per nanoseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per nanosecond squared is a unit of acceleration defined as metre divided by nanosecond squared.</rdfs:comment> + <om:symbol>m/ns2</om:symbol> + <om:alternativeSymbol>m ns-2</om:alternativeSymbol> + <om:alternativeSymbol>m·ns-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;nanosecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerMicrosecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per microsecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per microseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per microsecond squared is a unit of acceleration defined as metre divided by microsecond squared.</rdfs:comment> + <om:symbol>m/μs2</om:symbol> + <om:alternativeSymbol>m μs-2</om:alternativeSymbol> + <om:alternativeSymbol>m·μs-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;microsecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerMillisecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per millisecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per milliseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per millisecond squared is a unit of acceleration defined as metre divided by millisecond squared.</rdfs:comment> + <om:symbol>m/ms2</om:symbol> + <om:alternativeSymbol>m ms-2</om:alternativeSymbol> + <om:alternativeSymbol>m·ms-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;millisecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerCentisecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per centisecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per centiseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per centisecond squared is a unit of acceleration defined as metre divided by centisecond squared.</rdfs:comment> + <om:symbol>m/cs2</om:symbol> + <om:alternativeSymbol>m cs-2</om:alternativeSymbol> + <om:alternativeSymbol>m·cs-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;centisecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerDecisecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per decisecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per deciseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per decisecond squared is a unit of acceleration defined as metre divided by decisecond squared.</rdfs:comment> + <om:symbol>m/ds2</om:symbol> + <om:alternativeSymbol>m ds-2</om:alternativeSymbol> + <om:alternativeSymbol>m·ds-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;decisecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerDecasecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per decasecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per decaseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per decasecond squared is a unit of acceleration defined as metre divided by decasecond squared.</rdfs:comment> + <om:symbol>m/das2</om:symbol> + <om:alternativeSymbol>m das-2</om:alternativeSymbol> + <om:alternativeSymbol>m·das-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;decasecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerHectosecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per hectosecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per hectoseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per hectosecond squared is a unit of acceleration defined as metre divided by hectosecond squared.</rdfs:comment> + <om:symbol>m/hs2</om:symbol> + <om:alternativeSymbol>m hs-2</om:alternativeSymbol> + <om:alternativeSymbol>m·hs-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;hectosecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerKilosecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per kilosecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per kiloseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per kilosecond squared is a unit of acceleration defined as metre divided by kilosecond squared.</rdfs:comment> + <om:symbol>m/ks2</om:symbol> + <om:alternativeSymbol>m ks-2</om:alternativeSymbol> + <om:alternativeSymbol>m·ks-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;kilosecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerMegasecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per megasecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per megaseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per megasecond squared is a unit of acceleration defined as metre divided by megasecond squared.</rdfs:comment> + <om:symbol>m/Ms2</om:symbol> + <om:alternativeSymbol>m Ms-2</om:alternativeSymbol> + <om:alternativeSymbol>m·Ms-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;megasecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerGigasecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per gigasecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per gigaseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per gigasecond squared is a unit of acceleration defined as metre divided by gigasecond squared.</rdfs:comment> + <om:symbol>m/Gs2</om:symbol> + <om:alternativeSymbol>m Gs-2</om:alternativeSymbol> + <om:alternativeSymbol>m·Gs-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;gigasecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerTerasecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per terasecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per teraseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per terasecond squared is a unit of acceleration defined as metre divided by terasecond squared.</rdfs:comment> + <om:symbol>m/Ts2</om:symbol> + <om:alternativeSymbol>m Ts-2</om:alternativeSymbol> + <om:alternativeSymbol>m·Ts-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;terasecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerPetasecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per petasecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per petaseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per petasecond squared is a unit of acceleration defined as metre divided by petasecond squared.</rdfs:comment> + <om:symbol>m/Ps2</om:symbol> + <om:alternativeSymbol>m Ps-2</om:alternativeSymbol> + <om:alternativeSymbol>m·Ps-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;petasecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerExasecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per exasecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per exaseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per exasecond squared is a unit of acceleration defined as metre divided by exasecond squared.</rdfs:comment> + <om:symbol>m/Es2</om:symbol> + <om:alternativeSymbol>m Es-2</om:alternativeSymbol> + <om:alternativeSymbol>m·Es-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;exasecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerZettasecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per zettasecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per zettaseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per zettasecond squared is a unit of acceleration defined as metre divided by zettasecond squared.</rdfs:comment> + <om:symbol>m/Zs2</om:symbol> + <om:alternativeSymbol>m Zs-2</om:alternativeSymbol> + <om:alternativeSymbol>m·Zs-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;zettasecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <om:MetrePerPrefixedSecond-TimeSquared rdf:about="&om;metrePerYottasecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per yottasecond squared</rdfs:label> + <rdfs:label xml:lang="nl">meter per yottaseconde kwadraat</rdfs:label> + <rdfs:comment xml:lang="en">Metre per yottasecond squared is a unit of acceleration defined as metre divided by yottasecond squared.</rdfs:comment> + <om:symbol>m/Ys2</om:symbol> + <om:alternativeSymbol>m Ys-2</om:alternativeSymbol> + <om:alternativeSymbol>m·Ys-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;yottasecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:MetrePerPrefixedSecond-TimeSquared> + + <owl:Class rdf:about="&om;PrefixedMetrePerSecond-TimeSquared"> + <rdfs:label xml:lang="en">prefixed metre per second (time) squared</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitDivision"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedMetre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:hasValue rdf:resource="&om;second-TimeSquared"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MetrePerPrefixedSecond-TimeSquared"> + <rdfs:label xml:lang="en">metre per prefixed second (time) squared</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitDivision"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:hasValue rdf:resource="&om;metre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedSecond-TimeSquared"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;PrefixedMetrePerPrefixedSecond-TimeSquared"> + <rdfs:label xml:lang="en">prefixed metre per prefixed secon (time) squared</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitDivision"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedMetre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedSecond-TimeSquared"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Acceleration"> + <om:commonlyHasUnit rdf:resource="&om;attometrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;centimetrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;decametrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;decimetrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;exametrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;femtometrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;gigametrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;hectometrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;kilometrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;megametrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerAttosecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerCentisecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerDecasecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerDecisecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerExasecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerFemtosecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerGigasecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerHectosecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerKilosecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMegasecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMicrosecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMillisecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerNanosecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerPetasecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerPicosecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerTerasecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;micrometrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;nanometrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;petametrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;picometrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;terametrePerSecond-TimeSquared"/> + </owl:Class> + + <owl:Class rdf:about="&om;GravitationalAcceleration"> + <om:commonlyHasUnit rdf:resource="&om;attometrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;centimetrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;decametrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;decimetrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;exametrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;femtometrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;gigametrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;hectometrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;kilometrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;megametrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerAttosecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerCentisecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerDecasecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerDecisecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerExasecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerFemtosecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerGigasecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerHectosecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerKilosecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMegasecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMicrosecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMillisecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerNanosecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerPetasecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerPicosecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerTerasecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;micrometrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;nanometrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;petametrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;picometrePerSecond-TimeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;terametrePerSecond-TimeSquared"/> + </owl:Class> + + <!-- Acceleration Unit Ontology --> + + <om:Unit rdf:about="&om;gal"> + <rdfs:label xml:lang="en">gal</rdfs:label> + <rdfs:label xml:lang="nl">gal</rdfs:label> + <om:alternativeLabel xml:lang="en">galileo</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">galileo</om:alternativeLabel> + <rdfs:comment xml:lang="en">The gal is a unit of acceleration defined as centimetre per second (time) squared.</rdfs:comment> + <om:symbol>Gal</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;centimetrePerSecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;acceleration-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;Acceleration"> + <om:commonlyHasUnit rdf:resource="&om;gal"/> + </owl:Class> + + <owl:Class rdf:about="&om;GravitationalAcceleration"> + <om:commonlyHasUnit rdf:resource="&om;gal"/> + </owl:Class> + + <!-- Kilogram Per Cubic Metre Ontology --> + + <om:UnitDivision rdf:about="&om;kilogramPerCubicmetre"> + <rdfs:label xml:lang="en">kilogram per cubic metre</rdfs:label> + <rdfs:label xml:lang="nl">kilogram per kubieke meter</rdfs:label> + <rdfs:comment xml:lang="en">Kilogram per cubic metre is a unit of density defined as kilogram divided by cubic metre.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>kg/m3</om:symbol> + <om:alternativeSymbol>kg m-3</om:alternativeSymbol> + <om:alternativeSymbol>kg·m-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilogram"/> + <om:hasDenominator rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Density"> + <om:commonlyHasUnit rdf:resource="&om;kilogramPerCubicmetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;DensityUnit"> + <rdfs:label xml:lang="en">density unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;gramPerCubicmetre"/> + <om:UnitDivision rdf:about="&om;milligramPerCubicmetre"/> + <om:UnitDivision rdf:about="&om;gramPerCubicCentimetre"/> + <om:UnitDivision rdf:about="&om;microgramPerCubicCentimetre"/> + <om:UnitDivision rdf:about="&om;kilogramPerCubicmetre"/> + <om:UnitDivision rdf:about="&om;kilogramPerCubicDecimetre"/> + <om:UnitDivision rdf:about="&om;unifiedAtomicMassUnitPerCubicAngstrom"/> + <om:UnitDivision rdf:about="&om;gramPerLitre"/> + <om:UnitDivision rdf:about="&om;solarMassPerCubicParsec"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedGramPerLitre"/> + <owl:Class rdf:about="&om;GramPerPrefixedLitre"/> + <owl:Class rdf:about="&om;PrefixedGramPerPrefixedLitre"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Density"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;DensityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Gram Per Cubic Metre Multiples and Submultiples Ontology --> + + <om:UnitDivision rdf:about="&om;gramPerCubicmetre"> + <rdfs:label xml:lang="en">gram per cubic metre</rdfs:label> + <rdfs:label xml:lang="nl">gram per kubieke meter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per cubic metre is a unit of density defined as gram divided by cubic metre.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>g/m3</om:symbol> + <om:alternativeSymbol>g m-3</om:alternativeSymbol> + <om:alternativeSymbol>g·m-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;milligramPerCubicmetre"> + <rdfs:label xml:lang="en">milligram per cubic metre</rdfs:label> + <rdfs:label xml:lang="nl">milligram per kubieke meter</rdfs:label> + <rdfs:comment xml:lang="en">Milligram per cubic metre is a unit of density defined as milligram divided by cubic metre.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>mg/m3</om:symbol> + <om:alternativeSymbol>mg m-3</om:alternativeSymbol> + <om:alternativeSymbol>mg·m-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;milligram"/> + <om:hasDenominator rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;gramPerCubicCentimetre"> + <rdfs:label xml:lang="en">gram per cubic centimetre</rdfs:label> + <rdfs:label xml:lang="nl">gram per kubieke centimeter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per cubic centimetre is a unit of density defined as gram divided by cubic centimetre.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>g/cm3</om:symbol> + <om:alternativeSymbol>g cm-3</om:alternativeSymbol> + <om:alternativeSymbol>g·cm-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;cubicCentimetre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;microgramPerCubicCentimetre"> + <rdfs:label xml:lang="en">microgram per cubic centimetre</rdfs:label> + <rdfs:label xml:lang="nl">microgram per kubieke centimeter</rdfs:label> + <rdfs:comment xml:lang="en">Microram per cubic centimetre is a unit of density defined as microgram divided by cubic centimetre.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>μg/cm3</om:symbol> + <om:alternativeSymbol>μg cm-3</om:alternativeSymbol> + <om:alternativeSymbol>μg·cm-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;microgram"/> + <om:hasDenominator rdf:resource="&om;cubicCentimetre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;kilogramPerCubicDecimetre"> + <rdfs:label xml:lang="en">kilogram per cubic decimetre</rdfs:label> + <rdfs:label xml:lang="nl">kilogram per kubieke decimeter</rdfs:label> + <rdfs:comment xml:lang="en">Kilogram per cubic decimetre is a unit of density defined as kilogram divided by cubic decimetre.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>kg/dm3</om:symbol> + <om:alternativeSymbol>kg dm-3</om:alternativeSymbol> + <om:alternativeSymbol>kg·dm-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilogram"/> + <om:hasDenominator rdf:resource="&om;cubicDecimetre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;unifiedAtomicMassUnitPerCubicAngstrom"> + <rdfs:label xml:lang="en">unified atomic mass unit per cubic angstrom</rdfs:label> + <om:symbol>u/Å3</om:symbol> + <om:alternativeSymbol>u Å-3</om:alternativeSymbol> + <om:alternativeSymbol>u·Å-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;unifiedAtomicMassUnit"/> + <om:hasDenominator rdf:resource="&om;cubicAngstrom"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Density"> + <om:commonlyHasUnit rdf:resource="&om;gramPerCubicmetre"/> + <om:commonlyHasUnit rdf:resource="&om;milligramPerCubicmetre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerCubicCentimetre"/> + <om:commonlyHasUnit rdf:resource="&om;microgramPerCubicCentimetre"/> + <om:commonlyHasUnit rdf:resource="&om;kilogramPerCubicDecimetre"/> + </owl:Class> + + <!-- Gram Per Litre Ontology --> + + <om:UnitDivision rdf:about="&om;gramPerLitre"> + <rdfs:label xml:lang="en">gram per litre</rdfs:label> + <rdfs:label xml:lang="nl">gram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per litre is a unit of density defined as gram divided by litre.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>g/l</om:symbol> + <om:alternativeSymbol>g l-1</om:alternativeSymbol> + <om:alternativeSymbol>g·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Density"> + <om:commonlyHasUnit rdf:resource="&om;gramPerLitre"/> + </owl:Class> + + <!-- Gram Per Litre Multiples and Submultiples Ontology --> + + <om:PrefixedGramPerLitre rdf:about="&om;yoctogramPerLitre"> + <rdfs:label xml:lang="en">yoctogram per litre</rdfs:label> + <rdfs:label xml:lang="nl">yoctogram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Yoctogram per litre is a unit of density defined as yoctogram divided by litre.</rdfs:comment> + <om:symbol>yg/l</om:symbol> + <om:alternativeSymbol>yg l-1</om:alternativeSymbol> + <om:alternativeSymbol>yg·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;yoctogram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;zeptogramPerLitre"> + <rdfs:label xml:lang="en">zeptogram per litre</rdfs:label> + <rdfs:label xml:lang="nl">zeptogram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Zeptogram per litre is a unit of density defined as zeptogram divided by litre.</rdfs:comment> + <om:symbol>zg/l</om:symbol> + <om:alternativeSymbol>zg l-1</om:alternativeSymbol> + <om:alternativeSymbol>zg·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;zeptogram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;attogramPerLitre"> + <rdfs:label xml:lang="en">attogram per litre</rdfs:label> + <rdfs:label xml:lang="nl">attogram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Attogram per litre is a unit of density defined as attogram divided by litre.</rdfs:comment> + <om:symbol>ag/l</om:symbol> + <om:alternativeSymbol>ag l-1</om:alternativeSymbol> + <om:alternativeSymbol>ag·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;attogram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;femtogramPerLitre"> + <rdfs:label xml:lang="en">femtogram per litre</rdfs:label> + <rdfs:label xml:lang="nl">femtogram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Femtogram per litre is a unit of density defined as femtogram divided by litre.</rdfs:comment> + <om:symbol>fg/l</om:symbol> + <om:alternativeSymbol>fm s-1</om:alternativeSymbol> + <om:alternativeSymbol>fm·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;femtogram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;picogramPerLitre"> + <rdfs:label xml:lang="en">picogram per litre</rdfs:label> + <rdfs:label xml:lang="nl">picogram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Picogram per litre is a unit of density defined as picogram divided by litre.</rdfs:comment> + <om:symbol>pg/l</om:symbol> + <om:alternativeSymbol>pg l-1</om:alternativeSymbol> + <om:alternativeSymbol>pg·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;picogram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;nanogramPerLitre"> + <rdfs:label xml:lang="en">nanogram per litre</rdfs:label> + <rdfs:label xml:lang="nl">nanogram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Nanogram per litre is a unit of density defined as nanogram divided by litre.</rdfs:comment> + <om:symbol>ng/l</om:symbol> + <om:alternativeSymbol>ng l-1</om:alternativeSymbol> + <om:alternativeSymbol>ng·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;nanogram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;microgramPerLitre"> + <rdfs:label xml:lang="en">microgram per litre</rdfs:label> + <rdfs:label xml:lang="nl">microgram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Microgram per litre is a unit of density defined as microgram divided by litre.</rdfs:comment> + <om:symbol>μg/l</om:symbol> + <om:alternativeSymbol>μg l-1</om:alternativeSymbol> + <om:alternativeSymbol>μg·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;microgram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;milligramPerLitre"> + <rdfs:label xml:lang="en">milligram per litre</rdfs:label> + <rdfs:label xml:lang="nl">milligram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Milligram per litre is a unit of density defined as milligram divided by litre.</rdfs:comment> + <om:symbol>mg/l</om:symbol> + <om:alternativeSymbol>mg l-1</om:alternativeSymbol> + <om:alternativeSymbol>mg·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;milligram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;centigramPerLitre"> + <rdfs:label xml:lang="en">centigram per litre</rdfs:label> + <rdfs:label xml:lang="nl">centigram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Centigram per litre is a unit of density defined as centigram divided by litre.</rdfs:comment> + <om:symbol>cg/l</om:symbol> + <om:alternativeSymbol>cg l-1</om:alternativeSymbol> + <om:alternativeSymbol>cg·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;centigram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;decigramPerLitre"> + <rdfs:label xml:lang="en">decigram per litre</rdfs:label> + <rdfs:label xml:lang="nl">decigram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Decigram per litre is a unit of density defined as decigram divided by litre.</rdfs:comment> + <om:symbol>dg/l</om:symbol> + <om:alternativeSymbol>dg l-1</om:alternativeSymbol> + <om:alternativeSymbol>dg·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;decigram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;decagramPerLitre"> + <rdfs:label xml:lang="en">decagram per litre</rdfs:label> + <rdfs:label xml:lang="nl">decagram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Decagram per litre is a unit of density defined as decagram divided by litre.</rdfs:comment> + <om:symbol>dag/l</om:symbol> + <om:alternativeSymbol>dag l-1</om:alternativeSymbol> + <om:alternativeSymbol>dag·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;decagram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;hectogramPerLitre"> + <rdfs:label xml:lang="en">hectogram per litre</rdfs:label> + <rdfs:label xml:lang="nl">hectogram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Hectogram per litre is a unit of density defined as hectogram divided by litre.</rdfs:comment> + <om:symbol>hg/l</om:symbol> + <om:alternativeSymbol>hg l-1</om:alternativeSymbol> + <om:alternativeSymbol>hg·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;hectogram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;kilogramPerLitre"> + <rdfs:label xml:lang="en">kilogram per litre</rdfs:label> + <rdfs:label xml:lang="nl">kilogram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Kilogram per litre is a unit of density defined as kilogram divided by litre.</rdfs:comment> + <om:symbol>kg/l</om:symbol> + <om:alternativeSymbol>kg l-1</om:alternativeSymbol> + <om:alternativeSymbol>kg·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilogram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;megagramPerLitre"> + <rdfs:label xml:lang="en">megagram per litre</rdfs:label> + <rdfs:label xml:lang="nl">megagram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Megagram per litre is a unit of density defined as megagram divided by litre.</rdfs:comment> + <om:symbol>Mg/l</om:symbol> + <om:alternativeSymbol>Mg l-1</om:alternativeSymbol> + <om:alternativeSymbol>Mg·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;megagram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;gigagramPerLitre"> + <rdfs:label xml:lang="en">gigagram per litre</rdfs:label> + <rdfs:label xml:lang="nl">gigagram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Gigagram per litre is a unit of density defined as gigagram divided by litre.</rdfs:comment> + <om:symbol>Gg/l</om:symbol> + <om:alternativeSymbol>Gg l-1</om:alternativeSymbol> + <om:alternativeSymbol>Gg·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gigagram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;teragramPerLitre"> + <rdfs:label xml:lang="en">teragram per litre</rdfs:label> + <rdfs:label xml:lang="nl">teragram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Teragram per litre is a unit of density defined as teragram divided by litre.</rdfs:comment> + <om:symbol>Tg/l</om:symbol> + <om:alternativeSymbol>Tg l-1</om:alternativeSymbol> + <om:alternativeSymbol>Tg·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;teragram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;petagramPerLitre"> + <rdfs:label xml:lang="en">petagram per litre</rdfs:label> + <rdfs:label xml:lang="nl">petagram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Petagram per litre is a unit of density defined as petagram divided by litre.</rdfs:comment> + <om:symbol>Pg/l</om:symbol> + <om:alternativeSymbol>Pg l-1</om:alternativeSymbol> + <om:alternativeSymbol>Pg·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;petagram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;exagramPerLitre"> + <rdfs:label xml:lang="en">exagram per litre</rdfs:label> + <rdfs:label xml:lang="nl">exagram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Exagram per litre is a unit of density defined as exagram divided by litre.</rdfs:comment> + <om:symbol>Eg/l</om:symbol> + <om:alternativeSymbol>Eg l-1</om:alternativeSymbol> + <om:alternativeSymbol>Eg·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;exagram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;zettagramPerLitre"> + <rdfs:label xml:lang="en">zettagram per litre</rdfs:label> + <rdfs:label xml:lang="nl">zettagram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Zettagram per litre is a unit of density defined as zettagram divided by litre.</rdfs:comment> + <om:symbol>Zg/l</om:symbol> + <om:alternativeSymbol>Zg l-1</om:alternativeSymbol> + <om:alternativeSymbol>Zg·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;zettagram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:PrefixedGramPerLitre rdf:about="&om;yottagramPerLitre"> + <rdfs:label xml:lang="en">yottagram per litre</rdfs:label> + <rdfs:label xml:lang="nl">yottagram per liter</rdfs:label> + <rdfs:comment xml:lang="en">Yottagram per litre is a unit of density defined as yottagram divided by litre.</rdfs:comment> + <om:symbol>Yg/l</om:symbol> + <om:alternativeSymbol>Yg l-1</om:alternativeSymbol> + <om:alternativeSymbol>Yg·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;yottagram"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:PrefixedGramPerLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerYoctolitre"> + <rdfs:label xml:lang="en">gram per yoctolitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per yoctoliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per yoctolitre is a unit of density defined as gram divided by yoctolitre.</rdfs:comment> + <om:symbol>g/yl</om:symbol> + <om:alternativeSymbol>g yl-1</om:alternativeSymbol> + <om:alternativeSymbol>g·yl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;yoctolitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerZeptolitre"> + <rdfs:label xml:lang="en">gram per zeptolitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per zeptoliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per zeptolitre is a unit of density defined as gram divided by zeptolitre.</rdfs:comment> + <om:symbol>g/zl</om:symbol> + <om:alternativeSymbol>g zl-1</om:alternativeSymbol> + <om:alternativeSymbol>g·zl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;zeptolitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerAttolitre"> + <rdfs:label xml:lang="en">gram per attolitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per attoliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per attolitre is a unit of density defined as gram divided by attolitre.</rdfs:comment> + <om:symbol>g/al</om:symbol> + <om:alternativeSymbol>g al-1</om:alternativeSymbol> + <om:alternativeSymbol>g·al-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;attolitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerFemtolitre"> + <rdfs:label xml:lang="en">gram per femtolitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per femtoliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per femtolitre is a unit of density defined as gram divided by femtolitre.</rdfs:comment> + <om:symbol>g/fl</om:symbol> + <om:alternativeSymbol>g fl-1</om:alternativeSymbol> + <om:alternativeSymbol>g·fl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;femtolitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerPicolitre"> + <rdfs:label xml:lang="en">gram per picolitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per picoliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per picolitre is a unit of density defined as gram divided by picolitre.</rdfs:comment> + <om:symbol>g/pl</om:symbol> + <om:alternativeSymbol>g pl-1</om:alternativeSymbol> + <om:alternativeSymbol>g·pl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;picolitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerNanolitre"> + <rdfs:label xml:lang="en">gram per nanolitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per nanoliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per nanolitre is a unit of density defined as gram divided by nanolitre.</rdfs:comment> + <om:symbol>g/nl</om:symbol> + <om:alternativeSymbol>g nl-1</om:alternativeSymbol> + <om:alternativeSymbol>g·nl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;nanolitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerMicrolitre"> + <rdfs:label xml:lang="en">gram per microlitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per microliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per microlitre is a unit of density defined as gram divided by microlitre.</rdfs:comment> + <om:symbol>g/μl</om:symbol> + <om:alternativeSymbol>g μl-1</om:alternativeSymbol> + <om:alternativeSymbol>g·μl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;microlitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerMillilitre"> + <rdfs:label xml:lang="en">gram per millilitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per milliliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per millilitre is a unit of density defined as gram divided by millilitre.</rdfs:comment> + <om:symbol>g/ml</om:symbol> + <om:alternativeSymbol>g ml-1</om:alternativeSymbol> + <om:alternativeSymbol>g·ml-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;millilitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerCentilitre"> + <rdfs:label xml:lang="en">gram per centilitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per centiliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per centilitre is a unit of density defined as gram divided by centilitre.</rdfs:comment> + <om:symbol>g/cl</om:symbol> + <om:alternativeSymbol>g cl-1</om:alternativeSymbol> + <om:alternativeSymbol>g·cl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;centilitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerDecilitre"> + <rdfs:label xml:lang="en">gram per decilitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per deciliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per decilitre is a unit of density defined as gram divided by decilitre.</rdfs:comment> + <om:symbol>g/dl</om:symbol> + <om:alternativeSymbol>g dl-1</om:alternativeSymbol> + <om:alternativeSymbol>g·dl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;decilitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerDecalitre"> + <rdfs:label xml:lang="en">gram per decalitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per decaliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per decalitre is a unit of density defined as gram divided by decalitre.</rdfs:comment> + <om:symbol>g/dal</om:symbol> + <om:alternativeSymbol>g dal-1</om:alternativeSymbol> + <om:alternativeSymbol>g·dal-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;decalitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerHectolitre"> + <rdfs:label xml:lang="en">gram per hectolitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per hectoliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per hectolitre is a unit of density defined as gram divided by hectolitre.</rdfs:comment> + <om:symbol>g/hl</om:symbol> + <om:alternativeSymbol>g hl-1</om:alternativeSymbol> + <om:alternativeSymbol>g·hl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;hectolitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerKilolitre"> + <rdfs:label xml:lang="en">gram per kilolitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per kiloliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per kilolitre is a unit of density defined as gram divided by kilolitre.</rdfs:comment> + <om:symbol>g/kl</om:symbol> + <om:alternativeSymbol>g kl-1</om:alternativeSymbol> + <om:alternativeSymbol>g·kl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;kilolitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerMegalitre"> + <rdfs:label xml:lang="en">gram per megalitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per megaliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per megalitre is a unit of density defined as gram divided by megalitre.</rdfs:comment> + <om:symbol>g/Ml</om:symbol> + <om:alternativeSymbol>g Ml-1</om:alternativeSymbol> + <om:alternativeSymbol>g·Ml-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;megalitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerGigalitre"> + <rdfs:label xml:lang="en">gram per gigalitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per gigaliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per gigalitre is a unit of density defined as gram divided by gigalitre.</rdfs:comment> + <om:symbol>g/Gl</om:symbol> + <om:alternativeSymbol>g Gl-1</om:alternativeSymbol> + <om:alternativeSymbol>g·Gl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;gigalitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerTeralitre"> + <rdfs:label xml:lang="en">gram per teralitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per teraliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per teralitre is a unit of density defined as gram divided by teralitre.</rdfs:comment> + <om:symbol>g/Tl</om:symbol> + <om:alternativeSymbol>g Tl-1</om:alternativeSymbol> + <om:alternativeSymbol>g·Tl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;teralitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerPetalitre"> + <rdfs:label xml:lang="en">gram per petalitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per petaliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per petalitre is a unit of density defined as gram divided by petalitre.</rdfs:comment> + <om:symbol>g/Pl</om:symbol> + <om:alternativeSymbol>g Pl-1</om:alternativeSymbol> + <om:alternativeSymbol>g·Pl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;petalitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerExalitre"> + <rdfs:label xml:lang="en">gram per exalitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per exaliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per exalitre is a unit of density defined as gram divided by exalitre.</rdfs:comment> + <om:symbol>g/El</om:symbol> + <om:alternativeSymbol>g El-1</om:alternativeSymbol> + <om:alternativeSymbol>g·El-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;exalitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerZettalitre"> + <rdfs:label xml:lang="en">gram per zettalitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per zettaliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per zettalitre is a unit of density defined as gram divided by zettalitre.</rdfs:comment> + <om:symbol>g/Zl</om:symbol> + <om:alternativeSymbol>g Zl-1</om:alternativeSymbol> + <om:alternativeSymbol>g·Zl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;zettalitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <om:GramPerPrefixedLitre rdf:about="&om;gramPerYottalitre"> + <rdfs:label xml:lang="en">gram per yottalitre</rdfs:label> + <rdfs:label xml:lang="nl">gram per yottaliter</rdfs:label> + <rdfs:comment xml:lang="en">Gram per yottalitre is a unit of density defined as gram divided by yottalitre.</rdfs:comment> + <om:symbol>g/Yl</om:symbol> + <om:alternativeSymbol>g Yl-1</om:alternativeSymbol> + <om:alternativeSymbol>g·Yl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;yottalitre"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:GramPerPrefixedLitre> + + <owl:Class rdf:about="&om;PrefixedGramPerLitre"> + <rdfs:label xml:lang="en">prefixed gram per litre</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitDivision"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedGram"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:hasValue rdf:resource="&om;litre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;GramPerPrefixedLitre"> + <rdfs:label xml:lang="en">gram per prefixed litre</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitDivision"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:hasValue rdf:resource="&om;gram"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedLitre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;PrefixedGramPerPrefixedLitre"> + <rdfs:label xml:lang="en">prefixed gram per prefixed litre</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitDivision"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedGram"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedLitre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Density"> + <om:commonlyHasUnit rdf:resource="&om;attogramPerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;centigramPerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;decagramPerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;decigramPerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;exagramPerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;femtogramPerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;gigagramPerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;hectogramPerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;kilogramPerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;megagramPerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;microgramPerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;milligramPerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;nanogramPerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;petagramPerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;picogramPerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;teragramPerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerAttolitre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerCentilitre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerDecalitre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerDecilitre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerExalitre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerFemtolitre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerGigalitre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerHectolitre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerKilolitre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerMegalitre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerMicrolitre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerNanolitre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerPetalitre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerPicolitre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerTeralitre"/> + </owl:Class> + + <!-- Cubic Metre Per Kilogram Ontology --> + + <om:UnitDivision rdf:about="&om;cubicMetrePerKilogram"> + <rdfs:label xml:lang="en">cubic metre per kilogram</rdfs:label> + <rdfs:label xml:lang="nl">kubieke meter per kilogram</rdfs:label> + <rdfs:comment xml:lang="en">Cubic metre per kilogram is a unit of specific volume defined as cubic metre divided by kilogram.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>m3/kg</om:symbol> + <om:alternativeSymbol>m3 kg-1</om:alternativeSymbol> + <om:alternativeSymbol>m3·kg-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;cubicMetre"/> + <om:hasDenominator rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;specificVolume-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;SpecificVolume"> + <om:commonlyHasUnit rdf:resource="&om;cubicMetrePerKilogram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificVolumeUnit"> + <rdfs:label xml:lang="en">specific volume unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;cubicMetrePerKilogram"/> + <om:UnitDivision rdf:about="&om;litrePerKilogram"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificVolume"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;SpecificVolumeUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Litre Per Kilogram Ontology --> + + <om:UnitDivision rdf:about="&om;litrePerKilogram"> + <rdfs:label xml:lang="en">litre per kilogram</rdfs:label> + <rdfs:label xml:lang="nl">liter per kilogram</rdfs:label> + <rdfs:comment xml:lang="en">Litre per kilogram is a unit of specific volume defined as litre divided by kilogram.</rdfs:comment> + <om:longcomment xml:lang="en">Litre per kilogram is a unit of specific volume defined as litre divided by kilogram. Litre per kilogram is a derived unit in the International System of Units.</om:longcomment> + <om:symbol>l/kg</om:symbol> + <om:alternativeSymbol>l kg-1</om:alternativeSymbol> + <om:alternativeSymbol>l·kg-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;litre"/> + <om:hasDenominator rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;specificVolume-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;SpecificVolume"> + <om:commonlyHasUnit rdf:resource="&om;litrePerKilogram"/> + </owl:Class> + + <!-- Metre Per Second Ontology --> + + <om:UnitDivision rdf:about="&om;metrePerSecond-Time"> + <rdfs:label xml:lang="en">metre per second</rdfs:label> + <rdfs:label xml:lang="nl">meter per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per second is a unit of speed defined as metre divided by second.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>m/s</om:symbol> + <om:alternativeSymbol>m s-1</om:alternativeSymbol> + <om:alternativeSymbol>m·s-1</om:alternativeSymbol> + <om:alternativeSymbol>mps</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Speed"> + <om:commonlyHasUnit rdf:resource="&om;metrePerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;Velocity"> + <om:commonlyHasUnit rdf:resource="&om;metrePerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;AverageSpeed"> + <om:commonlyHasUnit rdf:resource="&om;metrePerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;DrainageSpeed"> + <om:commonlyHasUnit rdf:resource="&om;metrePerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpeedUnit"> + <rdfs:label xml:lang="en">speed unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;knot-International"/> + <om:UnitDivision rdf:about="&om;millimetrePerMinute-Time"/> + <om:UnitDivision rdf:about="&om;centimetrePerMinute-Time"/> + <om:UnitDivision rdf:about="&om;metrePerMinute-Time"/> + <om:UnitDivision rdf:about="&om;millimetrePerHour"/> + <om:UnitDivision rdf:about="&om;kilometrePerHour"/> + <om:UnitDivision rdf:about="&om;millimetrePerDay"/> + <om:UnitDivision rdf:about="&om;centimetrePerDay"/> + <om:UnitDivision rdf:about="&om;metrePerDay"/> + <om:UnitDivision rdf:about="&om;metrePerSecond-Time"/> + <om:UnitDivision rdf:about="&om;mile-StatutePerHour"/> + <om:UnitDivision rdf:about="&om;nauticalMile-InternationalPerHour"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedMetrePerSecond-Time"/> + <owl:Class rdf:about="&om;MetrePerPrefixedSecond-Time"/> + <owl:Class rdf:about="&om;PrefixedMetrePerPrefixedSecond-Time"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Speed"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;SpeedUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Metre Per Second Multiples and Submultiples Ontology --> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;yoctometrePerSecond-Time"> + <rdfs:label xml:lang="en">yoctometre per second</rdfs:label> + <rdfs:label xml:lang="nl">yoctometer per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Yoctometre per second is a unit of speed defined as yoctometre divided by second.</rdfs:comment> + <om:symbol>ym/s</om:symbol> + <om:alternativeSymbol>ym s-1</om:alternativeSymbol> + <om:alternativeSymbol>ym·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;yoctometre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;zeptometrePerSecond-Time"> + <rdfs:label xml:lang="en">zeptometre per second</rdfs:label> + <rdfs:label xml:lang="nl">zeptometer per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Zeptometre per second is a unit of speed defined as zeptometre divided by second.</rdfs:comment> + <om:symbol>zm/s</om:symbol> + <om:alternativeSymbol>zm s-1</om:alternativeSymbol> + <om:alternativeSymbol>zm·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;zeptometre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;attometrePerSecond-Time"> + <rdfs:label xml:lang="en">attometre per second</rdfs:label> + <rdfs:label xml:lang="nl">attometer per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Attometre per second is a unit of speed defined as attometre divided by second.</rdfs:comment> + <om:symbol>am/s</om:symbol> + <om:alternativeSymbol>am s-1</om:alternativeSymbol> + <om:alternativeSymbol>am·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;attometre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;femtometrePerSecond-Time"> + <rdfs:label xml:lang="en">femtometre per second</rdfs:label> + <rdfs:label xml:lang="nl">femtometer per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Femtometre per second is a unit of speed defined as femtometre divided by second.</rdfs:comment> + <om:symbol>fm/s</om:symbol> + <om:alternativeSymbol>fm s-1</om:alternativeSymbol> + <om:alternativeSymbol>fm·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;femtometre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;picometrePerSecond-Time"> + <rdfs:label xml:lang="en">picometre per second</rdfs:label> + <rdfs:label xml:lang="nl">picometer per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Picometre per second is a unit of speed defined as picometre divided by second.</rdfs:comment> + <om:symbol>pm/s</om:symbol> + <om:alternativeSymbol>pm·s-1</om:alternativeSymbol> + <om:alternativeSymbol>pm s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;picometre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;nanometrePerSecond-Time"> + <rdfs:label xml:lang="en">nanometre per second</rdfs:label> + <rdfs:label xml:lang="nl">nanometer per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Nanometre per second is a unit of speed defined as nanometre divided by second.</rdfs:comment> + <om:symbol>nm/s</om:symbol> + <om:alternativeSymbol>nm s-1</om:alternativeSymbol> + <om:alternativeSymbol>nm·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;nanometre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;micrometrePerSecond-Time"> + <rdfs:label xml:lang="en">micrometre per second</rdfs:label> + <rdfs:label xml:lang="nl">micrometer per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Micrometre per second is a unit of speed defined as micrometre divided by second.</rdfs:comment> + <om:symbol>μm/s</om:symbol> + <om:alternativeSymbol>μm·s-1</om:alternativeSymbol> + <om:alternativeSymbol>μm s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;micrometre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;millimetrePerSecond-Time"> + <rdfs:label xml:lang="en">millimetre per second</rdfs:label> + <rdfs:label xml:lang="nl">millimeter per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Millimetre per second is a unit of speed defined as millimetre divided by second.</rdfs:comment> + <om:symbol>mm/s</om:symbol> + <om:alternativeSymbol>mm s-1</om:alternativeSymbol> + <om:alternativeSymbol>mm·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;millimetre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;centimetrePerSecond-Time"> + <rdfs:label xml:lang="en">centimetre per second</rdfs:label> + <rdfs:label xml:lang="nl">centimeter per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Centimetre per second is a unit of speed defined as centimetre divided by second.</rdfs:comment> + <om:symbol>cm/s</om:symbol> + <om:alternativeSymbol>cm s-1</om:alternativeSymbol> + <om:alternativeSymbol>cm·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;centimetre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;decimetrePerSecond-Time"> + <rdfs:label xml:lang="en">decimetre per second</rdfs:label> + <rdfs:label xml:lang="nl">decimeter per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Decimetre per second is a unit of speed defined as decimetre divided by second.</rdfs:comment> + <om:symbol>dm/s</om:symbol> + <om:alternativeSymbol>dm s-1</om:alternativeSymbol> + <om:alternativeSymbol>dm·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;decimetre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;decametrePerSecond-Time"> + <rdfs:label xml:lang="en">decametre per second</rdfs:label> + <rdfs:label xml:lang="nl">decameter per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Decametre per second is a unit of speed defined as decametre divided by second.</rdfs:comment> + <om:symbol>dam/s</om:symbol> + <om:alternativeSymbol>dam s-1</om:alternativeSymbol> + <om:alternativeSymbol>dam·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;decametre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;hectometrePerSecond-Time"> + <rdfs:label xml:lang="en">hectometre per second</rdfs:label> + <rdfs:label xml:lang="nl">hectometer per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Hectometre per second is a unit of speed defined as hectometre divided by second.</rdfs:comment> + <om:symbol>hm/s</om:symbol> + <om:alternativeSymbol>hm s-1</om:alternativeSymbol> + <om:alternativeSymbol>hm·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;hectometre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;kilometrePerSecond-Time"> + <rdfs:label xml:lang="en">kilometre per second</rdfs:label> + <rdfs:label xml:lang="nl">kilometer per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Kilometre per second is a unit of speed defined as kilometre divided by second.</rdfs:comment> + <om:symbol>km/s</om:symbol> + <om:alternativeSymbol>km s-1</om:alternativeSymbol> + <om:alternativeSymbol>km·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilometre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;megametrePerSecond-Time"> + <rdfs:label xml:lang="en">megametre per second</rdfs:label> + <rdfs:label xml:lang="nl">megameter per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Megametre per second is a unit of speed defined as megametre divided by second.</rdfs:comment> + <om:symbol>Mm/s</om:symbol> + <om:alternativeSymbol>Mm s-1</om:alternativeSymbol> + <om:alternativeSymbol>Mm·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;megametre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;gigametrePerSecond-Time"> + <rdfs:label xml:lang="en">gigametre per second</rdfs:label> + <rdfs:label xml:lang="nl">gigameter per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Gigametre per second is a unit of speed defined as gigametre divided by second.</rdfs:comment> + <om:symbol>Gm/s</om:symbol> + <om:alternativeSymbol>Gm s-1</om:alternativeSymbol> + <om:alternativeSymbol>Gm·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gigametre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;terametrePerSecond-Time"> + <rdfs:label xml:lang="en">terametre per second</rdfs:label> + <rdfs:label xml:lang="nl">terameter per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Terametre per second is a unit of speed defined as terametre divided by second.</rdfs:comment> + <om:symbol>Tm/s</om:symbol> + <om:alternativeSymbol>Tm s-1</om:alternativeSymbol> + <om:alternativeSymbol>Tm·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;terametre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;petametrePerSecond-Time"> + <rdfs:label xml:lang="en">petametre per second</rdfs:label> + <rdfs:label xml:lang="nl">petameter per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Petametre per second is a unit of speed defined as petametre divided by second.</rdfs:comment> + <om:symbol>Pm/s</om:symbol> + <om:alternativeSymbol>Pm s-1</om:alternativeSymbol> + <om:alternativeSymbol>Pm·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;petametre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;exametrePerSecond-Time"> + <rdfs:label xml:lang="en">exametre per second</rdfs:label> + <rdfs:label xml:lang="nl">exameter per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Exametre per second is a unit of speed defined as exametre divided by second.</rdfs:comment> + <om:symbol>Em/s</om:symbol> + <om:alternativeSymbol>Em s-1</om:alternativeSymbol> + <om:alternativeSymbol>Em·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;exametre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;zettametrePerSecond-Time"> + <rdfs:label xml:lang="en">zettametre per second</rdfs:label> + <rdfs:label xml:lang="nl">zettameter per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Zettametre per second is a unit of speed defined as zettametre divided by second.</rdfs:comment> + <om:symbol>Zm/s</om:symbol> + <om:alternativeSymbol>Zm s-1</om:alternativeSymbol> + <om:alternativeSymbol>Zm·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;zettametre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:PrefixedMetrePerSecond-Time rdf:about="&om;yottametrePerSecond-Time"> + <rdfs:label xml:lang="en">yottametre per second</rdfs:label> + <rdfs:label xml:lang="nl">yottameter per seconde</rdfs:label> + <rdfs:comment xml:lang="en">Yottametre per second is a unit of speed defined as yottametre divided by second.</rdfs:comment> + <om:symbol>Ym/s</om:symbol> + <om:alternativeSymbol>Ym s-1</om:alternativeSymbol> + <om:alternativeSymbol>Ym·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;yottametre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:PrefixedMetrePerSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerYoctosecond-Time"> + <rdfs:label xml:lang="en">metre per yoctosecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per yoctoseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per yoctosecond is a unit of speed defined as metre divided by yoctosecond.</rdfs:comment> + <om:symbol>m/ys</om:symbol> + <om:alternativeSymbol>m ys-1</om:alternativeSymbol> + <om:alternativeSymbol>m·ys-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;yoctosecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerZeptosecond-Time"> + <rdfs:label xml:lang="en">metre per zeptosecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per zeptoseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per zeptosecond is a unit of speed defined as metre divided by zeptosecond.</rdfs:comment> + <om:symbol>m/zs</om:symbol> + <om:alternativeSymbol>m zs-1</om:alternativeSymbol> + <om:alternativeSymbol>m·zs-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;zeptosecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerAttosecond-Time"> + <rdfs:label xml:lang="en">metre per attosecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per attoseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per attosecond is a unit of speed defined as metre divided by attosecond.</rdfs:comment> + <om:symbol>m/as</om:symbol> + <om:alternativeSymbol>m as-1</om:alternativeSymbol> + <om:alternativeSymbol>m·as-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;attosecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerFemtosecond-Time"> + <rdfs:label xml:lang="en">metre per femtosecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per femtoseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per femtosecond is a unit of speed defined as metre divided by femtosecond.</rdfs:comment> + <om:symbol>m/fs</om:symbol> + <om:alternativeSymbol>m fs-1</om:alternativeSymbol> + <om:alternativeSymbol>m·fs-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;femtosecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerPicosecond-Time"> + <rdfs:label xml:lang="en">metre per picosecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per picoseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per picosecond is a unit of speed defined as metre divided by picosecond.</rdfs:comment> + <om:symbol>m/ps</om:symbol> + <om:alternativeSymbol>m ps-1</om:alternativeSymbol> + <om:alternativeSymbol>m·ps-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;picosecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerNanosecond-Time"> + <rdfs:label xml:lang="en">metre per nanosecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per nanoseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per nanosecond is a unit of speed defined as metre divided by nanosecond.</rdfs:comment> + <om:symbol>m/ns</om:symbol> + <om:alternativeSymbol>m ns-1</om:alternativeSymbol> + <om:alternativeSymbol>m·ns-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;nanosecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerMicrosecond-Time"> + <rdfs:label xml:lang="en">metre per microsecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per microseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per microsecond is a unit of speed defined as metre divided by microsecond.</rdfs:comment> + <om:symbol>m/μs</om:symbol> + <om:alternativeSymbol>m μs-1</om:alternativeSymbol> + <om:alternativeSymbol>m·μs-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;microsecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerMillisecond-Time"> + <rdfs:label xml:lang="en">metre per millisecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per milliseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per millisecond is a unit of speed defined as metre divided by millisecond.</rdfs:comment> + <om:symbol>m/ms</om:symbol> + <om:alternativeSymbol>m ms-1</om:alternativeSymbol> + <om:alternativeSymbol>m·ms-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;millisecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerCentisecond-Time"> + <rdfs:label xml:lang="en">metre per centisecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per centiseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per centisecond is a unit of speed defined as metre divided by centisecond.</rdfs:comment> + <om:symbol>m/cs</om:symbol> + <om:alternativeSymbol>m cs-1</om:alternativeSymbol> + <om:alternativeSymbol>m·cs-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;centisecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerDecisecond-Time"> + <rdfs:label xml:lang="en">metre per decisecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per deciseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per decisecond is a unit of speed defined as metre divided by decisecond.</rdfs:comment> + <om:symbol>m/ds</om:symbol> + <om:alternativeSymbol>m ds-1</om:alternativeSymbol> + <om:alternativeSymbol>m·ds-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;decisecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerDecasecond-Time"> + <rdfs:label xml:lang="en">metre per decasecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per decaseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per decasecond is a unit of speed defined as metre divided by decasecond.</rdfs:comment> + <om:symbol>m/das</om:symbol> + <om:alternativeSymbol>m das-1</om:alternativeSymbol> + <om:alternativeSymbol>m·das-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;decasecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerHectosecond-Time"> + <rdfs:label xml:lang="en">metre per hectosecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per hectoseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per hectosecond is a unit of speed defined as metre divided by hectosecond.</rdfs:comment> + <om:symbol>m/hs</om:symbol> + <om:alternativeSymbol>m hs-1</om:alternativeSymbol> + <om:alternativeSymbol>m·hs-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;hectosecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerKilosecond-Time"> + <rdfs:label xml:lang="en">metre per kilosecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per kiloseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per kilosecond is a unit of speed defined as metre divided by kilosecond.</rdfs:comment> + <om:symbol>m/ks</om:symbol> + <om:alternativeSymbol>m ks-1</om:alternativeSymbol> + <om:alternativeSymbol>m·ks-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;kilosecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerMegasecond-Time"> + <rdfs:label xml:lang="en">metre per megasecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per megaseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per megasecond is a unit of speed defined as metre divided by megasecond.</rdfs:comment> + <om:symbol>m/Ms</om:symbol> + <om:alternativeSymbol>m Ms-1</om:alternativeSymbol> + <om:alternativeSymbol>m·Ms-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;megasecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerGigasecond-Time"> + <rdfs:label xml:lang="en">metre per gigasecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per gigaseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per gigasecond is a unit of speed defined as metre divided by gigasecond.</rdfs:comment> + <om:symbol>m/Gs</om:symbol> + <om:alternativeSymbol>m Gs-1</om:alternativeSymbol> + <om:alternativeSymbol>m·Gs-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;gigasecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerTerasecond-Time"> + <rdfs:label xml:lang="en">metre per terasecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per teraseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per terasecond is a unit of speed defined as metre divided by terasecond.</rdfs:comment> + <om:symbol>m/Ts</om:symbol> + <om:alternativeSymbol>m Ts-1</om:alternativeSymbol> + <om:alternativeSymbol>m·Ts-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;terasecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerPetasecond-Time"> + <rdfs:label xml:lang="en">metre per petasecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per petaseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per petasecond is a unit of speed defined as metre divided by petasecond.</rdfs:comment> + <om:symbol>m/Ps</om:symbol> + <om:alternativeSymbol>m Ps-1</om:alternativeSymbol> + <om:alternativeSymbol>m·Ps-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;petasecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerExasecond-Time"> + <rdfs:label xml:lang="en">metre per exasecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per exaseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per exasecond is a unit of speed defined as metre divided by exasecond.</rdfs:comment> + <om:symbol>m/Es</om:symbol> + <om:alternativeSymbol>m Es-1</om:alternativeSymbol> + <om:alternativeSymbol>m·Es-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;exasecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerZettasecond-Time"> + <rdfs:label xml:lang="en">metre per zettasecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per zettaseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per zettasecond is a unit of speed defined as metre divided by zettasecond.</rdfs:comment> + <om:symbol>m/Zs</om:symbol> + <om:alternativeSymbol>m Zs-1</om:alternativeSymbol> + <om:alternativeSymbol>m·Zs-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;zettasecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <om:MetrePerPrefixedSecond-Time rdf:about="&om;metrePerYottasecond-Time"> + <rdfs:label xml:lang="en">metre per yottasecond</rdfs:label> + <rdfs:label xml:lang="nl">meter per yottaseconde</rdfs:label> + <rdfs:comment xml:lang="en">Metre per yottasecond is a unit of speed defined as metre divided by yottasecond.</rdfs:comment> + <om:symbol>m/Ys</om:symbol> + <om:alternativeSymbol>m Ys-1</om:alternativeSymbol> + <om:alternativeSymbol>m·Ys-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;yottasecond-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:MetrePerPrefixedSecond-Time> + + <owl:Class rdf:about="&om;PrefixedMetrePerSecond-Time"> + <rdfs:label xml:lang="en">prefixed metre per second (time)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitDivision"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedMetre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:hasValue rdf:resource="&om;second-Time"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MetrePerPrefixedSecond-Time"> + <rdfs:label xml:lang="en">metre per prefixed second (time)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitDivision"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:hasValue rdf:resource="&om;metre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedSecond-Time"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;PrefixedMetrePerPrefixedSecond-Time"> + <rdfs:label xml:lang="en">prefixed metre per prefixed second (time)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitDivision"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedMetre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedSecond-Time"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Speed"> + <om:commonlyHasUnit rdf:resource="&om;attometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;centimetrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decimetrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;exametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;femtometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;gigametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;hectometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;kilometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;megametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerAttosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerCentisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerDecasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerDecisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerExasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerFemtosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerGigasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerHectosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerKilosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMegasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMicrosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMillisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerNanosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerPetasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerPicosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerTerasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;micrometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;nanometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;petametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;picometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;terametrePerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;Velocity"> + <om:commonlyHasUnit rdf:resource="&om;attometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;centimetrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decimetrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;exametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;femtometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;gigametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;hectometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;kilometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;megametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerAttosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerCentisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerDecasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerDecisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerExasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerFemtosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerGigasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerHectosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerKilosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMegasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMicrosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMillisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerNanosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerPetasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerPicosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerTerasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;micrometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;nanometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;petametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;picometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;terametrePerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;AverageSpeed"> + <om:commonlyHasUnit rdf:resource="&om;attometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;centimetrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decimetrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;exametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;femtometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;gigametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;hectometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;kilometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;megametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerAttosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerCentisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerDecasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerDecisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerExasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerFemtosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerGigasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerHectosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerKilosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMegasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMicrosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMillisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerNanosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerPetasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerPicosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerTerasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;micrometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;nanometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;petametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;picometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;terametrePerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;DrainageSpeed"> + <om:commonlyHasUnit rdf:resource="&om;attometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;centimetrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decimetrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;exametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;femtometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;gigametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;hectometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;kilometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;megametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerAttosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerCentisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerDecasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerDecisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerExasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerFemtosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerGigasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerHectosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerKilosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMegasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMicrosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMillisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerNanosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerPetasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerPicosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerTerasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;micrometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;nanometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;petametrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;picometrePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;terametrePerSecond-Time"/> + </owl:Class> + + <!-- Speed Unit Ontology --> + + <om:Unit rdf:about="&om;knot-International"> + <rdfs:label xml:lang="en">knot (international)</rdfs:label> + <rdfs:label xml:lang="nl">knoop (internationaal)</rdfs:label> + <!-- <rdfs:label xml:lang="zh">節</rdfs:label> --> + <rdfs:label xml:lang="zh">海里/小时(国际)</rdfs:label> + <om:alternativeLabel xml:lang="en">international knot</om:alternativeLabel> + <rdfs:comment xml:lang="en">The international knot is a unit of speed defined as nautical mile per hour.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;nauticalMile-InternationalPerHour"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:Unit> + + <om:UnitDivision rdf:about="&om;millimetrePerMinute-Time"> + <rdfs:label xml:lang="en">millimetre per minute</rdfs:label> + <rdfs:label xml:lang="nl">millimeter per minuut</rdfs:label> + <rdfs:comment xml:lang="en">Millimetre per minute is a unit of speed defined as millimetre divided by minute.</rdfs:comment> + <om:symbol>mm/min</om:symbol> + <om:alternativeSymbol>mm min-1</om:alternativeSymbol> + <om:alternativeSymbol>mm·min-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;millimetre"/> + <om:hasDenominator rdf:resource="&om;minute-Time"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;centimetrePerMinute-Time"> + <rdfs:label xml:lang="en">centimetre per minute</rdfs:label> + <rdfs:label xml:lang="nl">centimeter per minuut</rdfs:label> + <rdfs:comment xml:lang="en">Centimetre per minute is a unit of speed defined as centimetre divided by minute.</rdfs:comment> + <om:symbol>cm/min</om:symbol> + <om:alternativeSymbol>cm min-1</om:alternativeSymbol> + <om:alternativeSymbol>cm·min-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;centimetre"/> + <om:hasDenominator rdf:resource="&om;minute-Time"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;metrePerMinute-Time"> + <rdfs:label xml:lang="en">metre per minute</rdfs:label> + <rdfs:label xml:lang="nl">meter per minuut</rdfs:label> + <rdfs:comment xml:lang="en">Metre per minute is a unit of speed defined as metre divided by minute.</rdfs:comment> + <om:symbol>m/min</om:symbol> + <om:alternativeSymbol>m min-1</om:alternativeSymbol> + <om:alternativeSymbol>m·min-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;minute-Time"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;millimetrePerHour"> + <rdfs:label xml:lang="en">millimetre per hour</rdfs:label> + <rdfs:label xml:lang="nl">millimeter per uur</rdfs:label> + <rdfs:comment xml:lang="en">Millimetre per hour is a unit of speed defined as millimetre divided by hour.</rdfs:comment> + <om:symbol>mm/h</om:symbol> + <om:alternativeSymbol>mm h-1</om:alternativeSymbol> + <om:alternativeSymbol>mm·h-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;millimetre"/> + <om:hasDenominator rdf:resource="&om;hour"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;kilometrePerHour"> + <rdfs:label xml:lang="en">kilometre per hour</rdfs:label> + <rdfs:label xml:lang="nl">kilometer per uur</rdfs:label> + <rdfs:comment xml:lang="en">Kilometre per hour is a unit of speed defined as kilometre divided by hour.</rdfs:comment> + <om:symbol>km/h</om:symbol> + <om:alternativeSymbol>km h-1</om:alternativeSymbol> + <om:alternativeSymbol>km·h-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilometre"/> + <om:hasDenominator rdf:resource="&om;hour"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;millimetrePerDay"> + <rdfs:label xml:lang="en">millimetre per day</rdfs:label> + <rdfs:label xml:lang="nl">millimeter per dag</rdfs:label> + <rdfs:comment xml:lang="en">Millimetre per day is a unit of speed defined as millimetre divided by day.</rdfs:comment> + <om:symbol>mm/d</om:symbol> + <om:alternativeSymbol>mm d-1</om:alternativeSymbol> + <om:alternativeSymbol>mm·d-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;millimetre"/> + <om:hasDenominator rdf:resource="&om;day"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;centimetrePerDay"> + <rdfs:label xml:lang="en">centimetre per day</rdfs:label> + <rdfs:label xml:lang="nl">centimeter per dag</rdfs:label> + <rdfs:comment xml:lang="en">Centimetre per day is a unit of speed defined as centimetre divided by day.</rdfs:comment> + <om:symbol>cm/d</om:symbol> + <om:alternativeSymbol>cm d-1</om:alternativeSymbol> + <om:alternativeSymbol>cm·d-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;centimetre"/> + <om:hasDenominator rdf:resource="&om;day"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;metrePerDay"> + <rdfs:label xml:lang="en">metre per day</rdfs:label> + <rdfs:label xml:lang="nl">meter per dag</rdfs:label> + <rdfs:comment xml:lang="en">Metre per day is a unit of speed defined as metre divided by day.</rdfs:comment> + <om:symbol>m/d</om:symbol> + <om:alternativeSymbol>m d-1</om:alternativeSymbol> + <om:alternativeSymbol>m·d-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;day"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;mile-StatutePerHour"> + <rdfs:label xml:lang="en">mile (statute) per hour</rdfs:label> + <rdfs:label xml:lang="nl">mijl per uur</rdfs:label> + <rdfs:comment xml:lang="en">Mile (statute) per hour is a unit of speed defined as mile (statute) divided by hour.</rdfs:comment> + <om:symbol>mi/h</om:symbol> + <om:alternativeSymbol>mi h-1</om:alternativeSymbol> + <om:alternativeSymbol>mi·h-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mile-Statute"/> + <om:hasDenominator rdf:resource="&om;hour"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;nauticalMile-InternationalPerHour"> + <rdfs:label xml:lang="en">nautical mile per hour</rdfs:label> + <rdfs:label xml:lang="nl">zeemijl per uur</rdfs:label> + <rdfs:comment xml:lang="en">Nautical mile per hour is a unit of speed defined as nautical mile divided by hour.</rdfs:comment> + <om:symbol>nmi/h</om:symbol> + <om:alternativeSymbol>nmi h-1</om:alternativeSymbol> + <om:alternativeSymbol>nmi·h-1</om:alternativeSymbol> + <om:symbol>M/h</om:symbol> + <om:alternativeSymbol>M h-1</om:alternativeSymbol> + <om:alternativeSymbol>M·h-1</om:alternativeSymbol> + <om:alternativeSymbol>NM/h</om:alternativeSymbol> + <om:alternativeSymbol>NM h-1</om:alternativeSymbol> + <om:alternativeSymbol>NM·h-1</om:alternativeSymbol> + <om:alternativeSymbol>nm/h</om:alternativeSymbol> + <om:alternativeSymbol>nm h-1</om:alternativeSymbol> + <om:alternativeSymbol>nm·h-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;nauticalMile-International"/> + <om:hasDenominator rdf:resource="&om;hour"/> + <om:hasDimension rdf:resource="&om;speed-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Speed"> + <om:commonlyHasUnit rdf:resource="&om;knot-International"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerMinute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;centimetrePerMinute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMinute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerHour"/> + <om:commonlyHasUnit rdf:resource="&om;kilometrePerHour"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerDay"/> + <om:commonlyHasUnit rdf:resource="&om;centimetrePerDay"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerDay"/> + <om:commonlyHasUnit rdf:resource="&om;mile-StatutePerHour"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-InternationalPerHour"/> + </owl:Class> + + <owl:Class rdf:about="&om;Velocity"> + <om:commonlyHasUnit rdf:resource="&om;knot-International"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerMinute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;centimetrePerMinute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMinute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerHour"/> + <om:commonlyHasUnit rdf:resource="&om;kilometrePerHour"/> + <om:commonlyHasUnit rdf:resource="&om;centimetrePerDay"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerDay"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerDay"/> + <om:commonlyHasUnit rdf:resource="&om;mile-StatutePerHour"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-InternationalPerHour"/> + </owl:Class> + + <owl:Class rdf:about="&om;AverageSpeed"> + <om:commonlyHasUnit rdf:resource="&om;knot-International"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerMinute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;centimetrePerMinute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMinute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerHour"/> + <om:commonlyHasUnit rdf:resource="&om;kilometrePerHour"/> + <om:commonlyHasUnit rdf:resource="&om;centimetrePerDay"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerDay"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerDay"/> + <om:commonlyHasUnit rdf:resource="&om;mile-StatutePerHour"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-InternationalPerHour"/> + </owl:Class> + + <owl:Class rdf:about="&om;DrainageSpeed"> + <om:commonlyHasUnit rdf:resource="&om;knot-International"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerMinute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;centimetrePerMinute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerMinute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerHour"/> + <om:commonlyHasUnit rdf:resource="&om;kilometrePerHour"/> + <om:commonlyHasUnit rdf:resource="&om;centimetrePerDay"/> + <om:commonlyHasUnit rdf:resource="&om;metrePerDay"/> + <om:commonlyHasUnit rdf:resource="&om;millimetrePerDay"/> + <om:commonlyHasUnit rdf:resource="&om;mile-StatutePerHour"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-InternationalPerHour"/> + </owl:Class> + + <!-- Metre Kilogram Per Second Squared Ontology --> + + <om:UnitDivision rdf:about="&om;metreKilogramPerSecond-TimeSquared"> + <rdfs:label xml:lang="en">metre kilogram per second squared</rdfs:label> + <rdfs:label xml:lang="nl">meter kilogram per seconde kwadraat</rdfs:label> + <om:symbol>m kg/s2</om:symbol> + <om:alternativeSymbol>m·kg/s2</om:alternativeSymbol> + <om:alternativeSymbol>m kg s-2</om:alternativeSymbol> + <om:alternativeSymbol>m·kg·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metreKilogram"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:UnitDivision> + + <!-- <owl:Class rdf:about="&om;PrefixedMetrePrefixedGramPerPrefixedSecond-TimeSquared"> --> + <!-- <rdfs:subClassOf rdf:resource="&om;UnitDivision"/> --> + <!-- <owl:equivalentClass> --> + <!-- <owl:Class> --> + <!-- <owl:intersectionOf rdf:parseType="Collection"> --> + <!-- <owl:Restriction> --> + <!-- <owl:onProperty rdf:resource="&om;hasNumerator"/> --> + <!-- <owl:allValuesFrom rdf:resource="&om;PrefixedMetrePrefixedGram"/> --> + <!-- </owl:Restriction> --> + <!-- <owl:Restriction> --> + <!-- <owl:onProperty rdf:resource="&om;hasNumerator"/> --> + <!-- <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> --> + <!-- </owl:Restriction> --> + <!-- <owl:Restriction> --> + <!-- <owl:onProperty rdf:resource="&om;hasDenominator"/> --> + <!-- <owl:allValuesFrom rdf:resource="&om;PrefixedSecond-TimeSquared"/> --> + <!-- </owl:Restriction> --> + <!-- <owl:Restriction> --> + <!-- <owl:onProperty rdf:resource="&om;hasDenominator"/> --> + <!-- <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> --> + <!-- </owl:Restriction> --> + <!-- </owl:intersectionOf> --> + <!-- </owl:Class> --> + <!-- </owl:equivalentClass> --> + <!-- </owl:Class> --> + + <owl:Class rdf:about="&om;Force"> + <om:commonlyHasUnit rdf:resource="&om;metreKilogramPerSecond-TimeSquared"/> + </owl:Class> + + <owl:Class rdf:about="&om;Friction"> + <om:commonlyHasUnit rdf:resource="&om;metreKilogramPerSecond-TimeSquared"/> + </owl:Class> + + <owl:Class rdf:about="&om;Thrust"> + <om:commonlyHasUnit rdf:resource="&om;metreKilogramPerSecond-TimeSquared"/> + </owl:Class> + + <owl:Class rdf:about="&om;Weight"> + <om:commonlyHasUnit rdf:resource="&om;metreKilogramPerSecond-TimeSquared"/> + </owl:Class> + + <owl:Class rdf:about="&om;ForceUnit"> + <rdfs:label xml:lang="en">force unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;dyne"/> + <om:Unit rdf:about="&om;kip"/> + <om:Unit rdf:about="&om;newton"/> + <om:Unit rdf:about="&om;poundal"/> + <om:Unit rdf:about="&om;pound-Force"/> + <om:Unit rdf:about="&om;ton-Force-Short"/> + <om:UnitDivision rdf:about="&om;metreKilogramPerSecond-TimeSquared"/> + </owl:oneOf> + </owl:Class> + <!-- <owl:Class rdf:about="&om;PrefixedMetrePrefixedGramPerPrefixedSecond-TimeSquared"/> --> + <owl:Class rdf:about="&om;PrefixedNewton"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Force"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ForceUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Newton Ontology --> + + <om:Unit rdf:about="&om;newton"> + <rdfs:label xml:lang="en">newton</rdfs:label> + <rdfs:label xml:lang="nl">newton</rdfs:label> + <!-- <rdfs:label xml:lang="zh">牛頓</rdfs:label> --> + <rdfs:label xml:lang="zh">牛顿</rdfs:label> + <rdfs:comment xml:lang="en">The newton is a unit of force defined as kilogram timesmetre divided by second squared.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>N</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;metreKilogramPerSecond-TimeSquared"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;Force"> + <om:commonlyHasUnit rdf:resource="&om;newton"/> + </owl:Class> + + <owl:Class rdf:about="&om;Friction"> + <om:commonlyHasUnit rdf:resource="&om;newton"/> + </owl:Class> + + <owl:Class rdf:about="&om;Thrust"> + <om:commonlyHasUnit rdf:resource="&om;newton"/> + </owl:Class> + + <owl:Class rdf:about="&om;Weight"> + <om:commonlyHasUnit rdf:resource="&om;newton"/> + </owl:Class> + + <!-- Newton Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctonewton"> + <rdfs:label xml:lang="en">yoctonewton</rdfs:label> + <rdfs:label xml:lang="nl">yoctonewton</rdfs:label> + <om:symbol>yN</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptonewton"> + <rdfs:label xml:lang="en">zeptonewton</rdfs:label> + <rdfs:label xml:lang="nl">zeptonewton</rdfs:label> + <om:symbol>zN</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attonewton"> + <rdfs:label xml:lang="en">attonewton</rdfs:label> + <rdfs:label xml:lang="nl">attonewton</rdfs:label> + <om:symbol>aN</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtonewton"> + <rdfs:label xml:lang="en">femtonewton</rdfs:label> + <rdfs:label xml:lang="nl">femtonewton</rdfs:label> + <om:symbol>fN</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;piconewton"> + <rdfs:label xml:lang="en">piconewton</rdfs:label> + <rdfs:label xml:lang="nl">piconewton</rdfs:label> + <om:symbol>pN</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanonewton"> + <rdfs:label xml:lang="en">nanonewton</rdfs:label> + <rdfs:label xml:lang="nl">nanonewton</rdfs:label> + <om:symbol>nN</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;micronewton"> + <rdfs:label xml:lang="en">micronewton</rdfs:label> + <rdfs:label xml:lang="nl">micronewton</rdfs:label> + <om:symbol>μN</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millinewton"> + <rdfs:label xml:lang="en">millinewton</rdfs:label> + <rdfs:label xml:lang="nl">millinewton</rdfs:label> + <om:symbol>mN</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centinewton"> + <rdfs:label xml:lang="en">centinewton</rdfs:label> + <rdfs:label xml:lang="nl">centinewton</rdfs:label> + <om:symbol>cN</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decinewton"> + <rdfs:label xml:lang="en">decinewton</rdfs:label> + <rdfs:label xml:lang="nl">decinewton</rdfs:label> + <om:symbol>dN</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decanewton"> + <rdfs:label xml:lang="en">decanewton</rdfs:label> + <rdfs:label xml:lang="nl">decanewton</rdfs:label> + <om:symbol>daN</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectonewton"> + <rdfs:label xml:lang="en">hectonewton</rdfs:label> + <rdfs:label xml:lang="nl">hectonewton</rdfs:label> + <om:symbol>hN</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilonewton"> + <rdfs:label xml:lang="en">kilonewton</rdfs:label> + <rdfs:label xml:lang="nl">kilonewton</rdfs:label> + <om:symbol>kN</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;meganewton"> + <rdfs:label xml:lang="en">meganewton</rdfs:label> + <rdfs:label xml:lang="nl">meganewton</rdfs:label> + <om:symbol>MN</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;giganewton"> + <rdfs:label xml:lang="en">giganewton</rdfs:label> + <rdfs:label xml:lang="nl">giganewton</rdfs:label> + <om:symbol>GN</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;teranewton"> + <rdfs:label xml:lang="en">teranewton</rdfs:label> + <rdfs:label xml:lang="nl">teranewton</rdfs:label> + <om:symbol>TN</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petanewton"> + <rdfs:label xml:lang="en">petanewton</rdfs:label> + <rdfs:label xml:lang="nl">petanewton</rdfs:label> + <om:symbol>PN</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exanewton"> + <rdfs:label xml:lang="en">exanewton</rdfs:label> + <rdfs:label xml:lang="nl">exanewton</rdfs:label> + <om:symbol>EN</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettanewton"> + <rdfs:label xml:lang="en">zettanewton</rdfs:label> + <rdfs:label xml:lang="nl">zettanewton</rdfs:label> + <om:symbol>ZN</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottanewton"> + <rdfs:label xml:lang="en">yottanewton</rdfs:label> + <rdfs:label xml:lang="nl">yottanewton</rdfs:label> + <om:symbol>YN</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedNewton"> + <rdfs:label xml:lang="en">prefixed newton</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;newton"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Force"> + <om:commonlyHasUnit rdf:resource="&om;attonewton"/> + <om:commonlyHasUnit rdf:resource="&om;centinewton"/> + <om:commonlyHasUnit rdf:resource="&om;decanewton"/> + <om:commonlyHasUnit rdf:resource="&om;decinewton"/> + <om:commonlyHasUnit rdf:resource="&om;exanewton"/> + <om:commonlyHasUnit rdf:resource="&om;femtonewton"/> + <om:commonlyHasUnit rdf:resource="&om;giganewton"/> + <om:commonlyHasUnit rdf:resource="&om;hectonewton"/> + <om:commonlyHasUnit rdf:resource="&om;kilonewton"/> + <om:commonlyHasUnit rdf:resource="&om;meganewton"/> + <om:commonlyHasUnit rdf:resource="&om;micronewton"/> + <om:commonlyHasUnit rdf:resource="&om;millinewton"/> + <om:commonlyHasUnit rdf:resource="&om;nanonewton"/> + <om:commonlyHasUnit rdf:resource="&om;petanewton"/> + <om:commonlyHasUnit rdf:resource="&om;piconewton"/> + <om:commonlyHasUnit rdf:resource="&om;teranewton"/> + </owl:Class> + + <owl:Class rdf:about="&om;Friction"> + <om:commonlyHasUnit rdf:resource="&om;attonewton"/> + <om:commonlyHasUnit rdf:resource="&om;centinewton"/> + <om:commonlyHasUnit rdf:resource="&om;decanewton"/> + <om:commonlyHasUnit rdf:resource="&om;decinewton"/> + <om:commonlyHasUnit rdf:resource="&om;exanewton"/> + <om:commonlyHasUnit rdf:resource="&om;femtonewton"/> + <om:commonlyHasUnit rdf:resource="&om;giganewton"/> + <om:commonlyHasUnit rdf:resource="&om;hectonewton"/> + <om:commonlyHasUnit rdf:resource="&om;kilonewton"/> + <om:commonlyHasUnit rdf:resource="&om;meganewton"/> + <om:commonlyHasUnit rdf:resource="&om;micronewton"/> + <om:commonlyHasUnit rdf:resource="&om;millinewton"/> + <om:commonlyHasUnit rdf:resource="&om;nanonewton"/> + <om:commonlyHasUnit rdf:resource="&om;petanewton"/> + <om:commonlyHasUnit rdf:resource="&om;piconewton"/> + <om:commonlyHasUnit rdf:resource="&om;teranewton"/> + </owl:Class> + + <owl:Class rdf:about="&om;Thrust"> + <om:commonlyHasUnit rdf:resource="&om;attonewton"/> + <om:commonlyHasUnit rdf:resource="&om;centinewton"/> + <om:commonlyHasUnit rdf:resource="&om;decanewton"/> + <om:commonlyHasUnit rdf:resource="&om;decinewton"/> + <om:commonlyHasUnit rdf:resource="&om;exanewton"/> + <om:commonlyHasUnit rdf:resource="&om;femtonewton"/> + <om:commonlyHasUnit rdf:resource="&om;giganewton"/> + <om:commonlyHasUnit rdf:resource="&om;hectonewton"/> + <om:commonlyHasUnit rdf:resource="&om;kilonewton"/> + <om:commonlyHasUnit rdf:resource="&om;meganewton"/> + <om:commonlyHasUnit rdf:resource="&om;micronewton"/> + <om:commonlyHasUnit rdf:resource="&om;millinewton"/> + <om:commonlyHasUnit rdf:resource="&om;nanonewton"/> + <om:commonlyHasUnit rdf:resource="&om;petanewton"/> + <om:commonlyHasUnit rdf:resource="&om;piconewton"/> + <om:commonlyHasUnit rdf:resource="&om;teranewton"/> + </owl:Class> + + <owl:Class rdf:about="&om;Weight"> + <om:commonlyHasUnit rdf:resource="&om;attonewton"/> + <om:commonlyHasUnit rdf:resource="&om;centinewton"/> + <om:commonlyHasUnit rdf:resource="&om;decanewton"/> + <om:commonlyHasUnit rdf:resource="&om;decinewton"/> + <om:commonlyHasUnit rdf:resource="&om;exanewton"/> + <om:commonlyHasUnit rdf:resource="&om;femtonewton"/> + <om:commonlyHasUnit rdf:resource="&om;giganewton"/> + <om:commonlyHasUnit rdf:resource="&om;hectonewton"/> + <om:commonlyHasUnit rdf:resource="&om;kilonewton"/> + <om:commonlyHasUnit rdf:resource="&om;meganewton"/> + <om:commonlyHasUnit rdf:resource="&om;micronewton"/> + <om:commonlyHasUnit rdf:resource="&om;millinewton"/> + <om:commonlyHasUnit rdf:resource="&om;nanonewton"/> + <om:commonlyHasUnit rdf:resource="&om;petanewton"/> + <om:commonlyHasUnit rdf:resource="&om;piconewton"/> + <om:commonlyHasUnit rdf:resource="&om;teranewton"/> + </owl:Class> + + <!-- Force Unit Ontology --> + + <om:Unit rdf:about="&om;dyne"> + <rdfs:label xml:lang="en">dyne</rdfs:label> + <rdfs:label xml:lang="nl">dyne</rdfs:label> + <rdfs:label xml:lang="zh">达因</rdfs:label> + <rdfs:comment xml:lang="en">The dyne is a unit of force defined as 1.0e-5 newton.</rdfs:comment> + <om:symbol>dyn</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.000010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;kip"> + <rdfs:label xml:lang="en">kip</rdfs:label> + <rdfs:label xml:lang="nl">kip</rdfs:label> + <rdfs:comment xml:lang="en">The kip is a unit of force defined as 4.448222e3 newton.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">4448.222</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;pound-Force"> + <rdfs:label xml:lang="en">pound-force</rdfs:label> + <rdfs:comment xml:lang="en">The pound-force is a unit of force defined as 4.448222 newton.</rdfs:comment> + <om:symbol>lbf</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">4.448222</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;poundal"> + <rdfs:label xml:lang="en">poundal</rdfs:label> + <rdfs:comment xml:lang="en">The poundal is a unit of force defined as 1.382550e-1 newton.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.1382550</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;ton-Force-Short"> + <rdfs:label xml:lang="en">ton-force (short)</rdfs:label> + <om:alternativeLabel xml:lang="en">short ton-force</om:alternativeLabel> + <rdfs:comment xml:lang="en">The short ton-force is a unit of force defined as 8.896443e3 newton.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">8896.443</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;newton"/> + <om:hasDimension rdf:resource="&om;force-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e-5Newton"> + <om:hasNumericalValue>1.0e-5</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;newton"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.382550e-1Newton"> + <om:hasNumericalValue>1.382550e-1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;newton"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.448222Newton"> + <om:hasNumericalValue>4.448222</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;newton"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.448222e3Newton"> + <om:hasNumericalValue>4.448222e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;newton"/> + </om:Measure> + + <om:Measure rdf:about="&om;_8.896443e3Newton"> + <om:hasNumericalValue>8.896443e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;newton"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Force"> + <om:commonlyHasUnit rdf:resource="&om;dyne"/> + <om:commonlyHasUnit rdf:resource="&om;kip"/> + <om:commonlyHasUnit rdf:resource="&om;poundal"/> + <om:commonlyHasUnit rdf:resource="&om;pound-Force"/> + <om:commonlyHasUnit rdf:resource="&om;ton-Force-Short"/> + </owl:Class> + + <owl:Class rdf:about="&om;Friction"> + <om:commonlyHasUnit rdf:resource="&om;dyne"/> + <om:commonlyHasUnit rdf:resource="&om;kip"/> + <om:commonlyHasUnit rdf:resource="&om;poundal"/> + <om:commonlyHasUnit rdf:resource="&om;pound-Force"/> + <om:commonlyHasUnit rdf:resource="&om;ton-Force-Short"/> + </owl:Class> + + <owl:Class rdf:about="&om;Thrust"> + <om:commonlyHasUnit rdf:resource="&om;dyne"/> + <om:commonlyHasUnit rdf:resource="&om;kip"/> + <om:commonlyHasUnit rdf:resource="&om;poundal"/> + <om:commonlyHasUnit rdf:resource="&om;pound-Force"/> + <om:commonlyHasUnit rdf:resource="&om;ton-Force-Short"/> + </owl:Class> + + <owl:Class rdf:about="&om;Weight"> + <om:commonlyHasUnit rdf:resource="&om;dyne"/> + <om:commonlyHasUnit rdf:resource="&om;kip"/> + <om:commonlyHasUnit rdf:resource="&om;poundal"/> + <om:commonlyHasUnit rdf:resource="&om;pound-Force"/> + <om:commonlyHasUnit rdf:resource="&om;ton-Force-Short"/> + </owl:Class> + + <!-- Newton Per Square Metre Ontology --> + + <om:UnitDivision rdf:about="&om;newtonPerSquareMetre"> + <rdfs:label xml:lang="en">newton per square metre</rdfs:label> + <rdfs:label xml:lang="nl">newton per vierkante meter</rdfs:label> + <om:symbol>N/m2</om:symbol> + <om:alternativeSymbol>N m-2</om:alternativeSymbol> + <om:alternativeSymbol>N·m-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;newton"/> + <om:hasDenominator rdf:resource="&om;squareMetre"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Pressure"> + <om:commonlyHasUnit rdf:resource="&om;newtonPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;PressureUnit"> + <rdfs:label xml:lang="en">pressure unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:SingularUnit rdf:about="&om;atmosphere-Standard"/> + <om:SingularUnit rdf:about="&om;atmosphere-Technical"/> + <om:SingularUnit rdf:about="&om;bar"/> + <om:SingularUnit rdf:about="&om;barye"/> + <om:SingularUnit rdf:about="&om;metreOfMercury"/> + <om:SingularUnit rdf:about="&om;pascal"/> + <om:SingularUnit rdf:about="&om;torr"/> + <om:PrefixedUnit rdf:about="&om;decibar"/> + <om:PrefixedUnit rdf:about="&om;microbar"/> + <om:PrefixedUnit rdf:about="&om;millibar"/> + <om:PrefixedUnit rdf:about="&om;centimetreOfMercury"/> + <om:PrefixedUnit rdf:about="&om;millimetreOfMercury"/> + <om:UnitMultiplication rdf:about="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + <om:UnitDivision rdf:about="&om;newtonPerSquareMetre"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedPascal"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;StressUnit"> + <rdfs:label xml:lang="en">stress unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:SingularUnit rdf:about="&om;atmosphere-Standard"/> + <om:SingularUnit rdf:about="&om;atmosphere-Technical"/> + <om:SingularUnit rdf:about="&om;bar"/> + <om:SingularUnit rdf:about="&om;barye"/> + <om:SingularUnit rdf:about="&om;metreOfMercury"/> + <om:SingularUnit rdf:about="&om;pascal"/> + <om:SingularUnit rdf:about="&om;torr"/> + <om:PrefixedUnit rdf:about="&om;decibar"/> + <om:PrefixedUnit rdf:about="&om;microbar"/> + <om:PrefixedUnit rdf:about="&om;millibar"/> + <om:PrefixedUnit rdf:about="&om;centimetreOfMercury"/> + <om:PrefixedUnit rdf:about="&om;millimetreOfMercury"/> + <om:UnitMultiplication rdf:about="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + <om:UnitDivision rdf:about="&om;newtonPerSquareMetre"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedPascal"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Pressure"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;PressureUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;Stress"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;StressUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicModulus"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;StressUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Kilogram Second To the Power -2 Ontology --> + + <om:UnitMultiplication rdf:about="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"> + <rdfs:label xml:lang="en">reciprocal metre kilogram second to the power -2</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde meter kilogram seconde tot de macht -2</rdfs:label> + <om:symbol>m-1 kg s-2</om:symbol> + <om:alternativeSymbol>m-1·kg·s-2</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;kilogramSecond-TimeToThePower-2"/> + <hasTerm2 rdf:resource="&om;reciprocalMetre"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:UnitMultiplication> + + <owl:Class rdf:about="&om;Pressure"> + <om:commonlyHasUnit rdf:resource="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + </owl:Class> + + <!-- Pascal Ontology --> + + <om:Unit rdf:about="&om;pascal"> + <rdfs:label xml:lang="en">pascal</rdfs:label> + <rdfs:label xml:lang="nl">pascal</rdfs:label> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>Pa</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;newtonPerSquareMetre"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;Pressure"> + <om:commonlyHasUnit rdf:resource="&om;pascal"/> + </owl:Class> + + <!-- Pascal Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctopascal"> + <rdfs:label xml:lang="en">yoctopascal</rdfs:label> + <rdfs:label xml:lang="nl">yoctopascal</rdfs:label> + <om:symbol>yPa</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptopascal"> + <rdfs:label xml:lang="en">zeptopascal</rdfs:label> + <rdfs:label xml:lang="nl">zeptopascal</rdfs:label> + <om:symbol>zPa</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attopascal"> + <rdfs:label xml:lang="en">attopascal</rdfs:label> + <rdfs:label xml:lang="nl">attopascal</rdfs:label> + <om:symbol>aPa</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtopascal"> + <rdfs:label xml:lang="en">femtopascal</rdfs:label> + <rdfs:label xml:lang="nl">femtopascal</rdfs:label> + <om:symbol>fPa</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picopascal"> + <rdfs:label xml:lang="en">picopascal</rdfs:label> + <rdfs:label xml:lang="nl">picopascal</rdfs:label> + <om:symbol>pPa</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanopascal"> + <rdfs:label xml:lang="en">nanopascal</rdfs:label> + <rdfs:label xml:lang="nl">nanopascal</rdfs:label> + <om:symbol>nPa</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;micropascal"> + <rdfs:label xml:lang="en">micropascal</rdfs:label> + <rdfs:label xml:lang="nl">micropascal</rdfs:label> + <om:symbol>μPa</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millipascal"> + <rdfs:label xml:lang="en">millipascal</rdfs:label> + <rdfs:label xml:lang="nl">millipascal</rdfs:label> + <om:symbol>mPa</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centipascal"> + <rdfs:label xml:lang="en">centipascal</rdfs:label> + <rdfs:label xml:lang="nl">centipascal</rdfs:label> + <om:symbol>cPa</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decipascal"> + <rdfs:label xml:lang="en">decipascal</rdfs:label> + <rdfs:label xml:lang="nl">decipascal</rdfs:label> + <om:symbol>dPa</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decapascal"> + <rdfs:label xml:lang="en">decapascal</rdfs:label> + <rdfs:label xml:lang="nl">decapascal</rdfs:label> + <om:symbol>daPa</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectopascal"> + <rdfs:label xml:lang="en">hectopascal</rdfs:label> + <rdfs:label xml:lang="nl">hectopascal</rdfs:label> + <om:symbol>hPa</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilopascal"> + <rdfs:label xml:lang="en">kilopascal</rdfs:label> + <rdfs:label xml:lang="nl">kilopascal</rdfs:label> + <om:symbol>kPa</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megapascal"> + <rdfs:label xml:lang="en">megapascal</rdfs:label> + <rdfs:label xml:lang="nl">megapascal</rdfs:label> + <om:symbol>MPa</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigapascal"> + <rdfs:label xml:lang="en">gigapascal</rdfs:label> + <rdfs:label xml:lang="nl">gigapascal</rdfs:label> + <om:symbol>GPa</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;terapascal"> + <rdfs:label xml:lang="en">terapascal</rdfs:label> + <rdfs:label xml:lang="nl">terapascal</rdfs:label> + <om:symbol>TPa</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petapascal"> + <rdfs:label xml:lang="en">petapascal</rdfs:label> + <rdfs:label xml:lang="nl">petapascal</rdfs:label> + <om:symbol>PPa</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exapascal"> + <rdfs:label xml:lang="en">exapascal</rdfs:label> + <rdfs:label xml:lang="nl">exapascal</rdfs:label> + <om:symbol>EPa</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettapascal"> + <rdfs:label xml:lang="en">zettapascal</rdfs:label> + <rdfs:label xml:lang="nl">zettapascal</rdfs:label> + <om:symbol>ZPa</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottapascal"> + <rdfs:label xml:lang="en">yottapascal</rdfs:label> + <rdfs:label xml:lang="nl">yottapascal</rdfs:label> + <om:symbol>YPa</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedPascal"> + <rdfs:label xml:lang="en">prefixed pascal</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;pascal"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Pressure"> + <om:commonlyHasUnit rdf:resource="&om;attopascal"/> + <om:commonlyHasUnit rdf:resource="&om;centipascal"/> + <om:commonlyHasUnit rdf:resource="&om;decapascal"/> + <om:commonlyHasUnit rdf:resource="&om;decipascal"/> + <om:commonlyHasUnit rdf:resource="&om;exapascal"/> + <om:commonlyHasUnit rdf:resource="&om;femtopascal"/> + <om:commonlyHasUnit rdf:resource="&om;gigapascal"/> + <om:commonlyHasUnit rdf:resource="&om;hectopascal"/> + <om:commonlyHasUnit rdf:resource="&om;kilopascal"/> + <om:commonlyHasUnit rdf:resource="&om;megapascal"/> + <om:commonlyHasUnit rdf:resource="&om;micropascal"/> + <om:commonlyHasUnit rdf:resource="&om;millipascal"/> + <om:commonlyHasUnit rdf:resource="&om;nanopascal"/> + <om:commonlyHasUnit rdf:resource="&om;petapascal"/> + <om:commonlyHasUnit rdf:resource="&om;picopascal"/> + <om:commonlyHasUnit rdf:resource="&om;terapascal"/> + </owl:Class> + + <!-- Bar Ontology --> + + <om:Unit rdf:about="&om;bar"> + <rdfs:label xml:lang="en">bar</rdfs:label> + <rdfs:label xml:lang="nl">bar</rdfs:label> + <!-- <rdfs:label xml:lang="zh">巴</rdfs:label> --> + <rdfs:label xml:lang="zh">巴(压力计量单位)</rdfs:label> + <rdfs:comment xml:lang="en">The bar is a unit of pressure defined as 100 000 pascal.</rdfs:comment> + <om:LaTeXCommand>\barUnit</om:LaTeXCommand> + <om:symbol>bar</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">100000</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e5Pascal"> + <om:hasNumericalValue>1.0e5</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;pascal"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Pressure"> + <om:commonlyHasUnit rdf:resource="&om;bar"/> + </owl:Class> + + <!-- Bar Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;microbar"> + <rdfs:label xml:lang="en">microbar</rdfs:label> + <rdfs:label xml:lang="nl">microbar</rdfs:label> + <rdfs:label xml:lang="zh">微巴</rdfs:label> + <rdfs:comment xml:lang="en">The microbar is a unit of pressure defined as 1.0e-6 bar.</rdfs:comment> + <om:symbol>μbar</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bar"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millibar"> + <rdfs:label xml:lang="en">millibar</rdfs:label> + <rdfs:label xml:lang="nl">millibar</rdfs:label> +<!-- <rdfs:label xml:lang="zh">毫巴</rdfs:label> --> + <rdfs:comment xml:lang="en">The millibar is a unit of pressure defined as 1.0e-3 bar.</rdfs:comment> + <om:symbol>mbar</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bar"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decibar"> + <rdfs:label xml:lang="en">decibar</rdfs:label> + <rdfs:label xml:lang="nl">decibar</rdfs:label> +<!-- <rdfs:label xml:lang="zh">分巴</rdfs:label> --> + <rdfs:comment xml:lang="en">The decibar is a unit of pressure defined as 1.0e-1 bar.</rdfs:comment> + <om:symbol>dbar</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bar"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;Pressure"> + <om:commonlyHasUnit rdf:resource="&om;decibar"/> + <om:commonlyHasUnit rdf:resource="&om;microbar"/> + <om:commonlyHasUnit rdf:resource="&om;millibar"/> + </owl:Class> + + <!-- Metre of Mercury Ontology --> + + <om:Unit rdf:about="&om;metreOfMercury"> + <rdfs:label xml:lang="en">metre of mercury</rdfs:label> + <rdfs:label xml:lang="nl">meter kwik</rdfs:label> + <rdfs:comment xml:lang="en">The metre of mercury is a unit of pressure defined as 133 322 pascal.</rdfs:comment> + <om:symbol>m Hg</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">133322</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.33322e5Pascal"> + <om:hasNumericalValue>1.33322e5</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;pascal"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Pressure"> + <om:commonlyHasUnit rdf:resource="&om;metreOfMercury"/> + </owl:Class> + + <!-- Metre of Mercury Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;millimetreOfMercury"> + <rdfs:label xml:lang="en">millimetre of mercury</rdfs:label> + <rdfs:label xml:lang="nl">millimeter kwik</rdfs:label> + <rdfs:comment xml:lang="en">The millimetre of mercury is a unit of pressure defined as 1.0e-3 metre of mercury.</rdfs:comment> + <om:symbol>mm Hg</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metreOfMercury"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centimetreOfMercury"> + <rdfs:label xml:lang="en">centimetre of mercury</rdfs:label> + <rdfs:label xml:lang="nl">centimeter kwik</rdfs:label> + <rdfs:comment xml:lang="en">The centimetre of mercury is a unit of pressure defined as 1.0e-2 metre of mercury.</rdfs:comment> + <om:symbol>cm Hg</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;metreOfMercury"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;Pressure"> + <om:commonlyHasUnit rdf:resource="&om;centimetreOfMercury"/> + <om:commonlyHasUnit rdf:resource="&om;millimetreOfMercury"/> + </owl:Class> + + <!-- Pressure Unit Ontology --> + + <om:Unit rdf:about="&om;atmosphere-Standard"> + <rdfs:label xml:lang="en">atmosphere (standard)</rdfs:label> + <rdfs:label xml:lang="nl">atmosfeer (standaard)</rdfs:label> + <om:alternativeLabel xml:lang="en">standard atmosphere</om:alternativeLabel> + <rdfs:comment xml:lang="en">The standard atmosphere is a unit of pressure defined as 1.01325e5 pascal.</rdfs:comment> + <om:symbol>atm</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">101325</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;atmosphere-Technical"> + <rdfs:label xml:lang="en">atmosphere (technical)</rdfs:label> + <om:alternativeLabel xml:lang="en">technical atmosphere</om:alternativeLabel> + <rdfs:comment xml:lang="en">The technical atmosphere is a unit of pressure defined as 9.80665e4 pascal.</rdfs:comment> + <om:symbol>at</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">98066.5</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;barye"> + <rdfs:label xml:lang="en">barye</rdfs:label> + <rdfs:label xml:lang="nl">barye</rdfs:label> + <rdfs:comment xml:lang="en">The barye is a unit of pressure defined as 0.1 pascal.</rdfs:comment> + <om:symbol>ba</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.10</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;torr"> + <rdfs:label xml:lang="en">torr</rdfs:label> + <rdfs:label xml:lang="nl">torr</rdfs:label> + <rdfs:comment xml:lang="en">The torr is a unit of pressure defined as 1.333224e2 pascal.</rdfs:comment> + <om:symbol>Torr</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">133.322368421053</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;pascal"/> + <om:hasDimension rdf:resource="&om;pressure-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e-1Pascal"> + <om:hasNumericalValue>1.0e-1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;pascal"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.01325e5Pascal"> + <om:hasNumericalValue>1.01325e5</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;pascal"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.33322368421053e2Pascal"> + <om:hasNumericalValue>1.33322368421053e2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;pascal"/> + </om:Measure> + + <om:Measure rdf:about="&om;_9.80665e4Pascal"> + <om:hasNumericalValue>9.80665e4</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;pascal"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Pressure"> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Standard"/> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Technical"/> + <om:commonlyHasUnit rdf:resource="&om;barye"/> + <om:commonlyHasUnit rdf:resource="&om;torr"/> + </owl:Class> + + <owl:Class rdf:about="&om;TorqueUnit"> + <rdfs:label xml:lang="en">torque unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitMultiplication rdf:about="&om;newtonMetre"/> + <om:UnitMultiplication rdf:about="&om;micronewtonMetre"/> + <om:UnitMultiplication rdf:about="&om;millinewtonMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MomentOfForceUnit"> + <rdfs:label xml:lang="en">moment of force unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitMultiplication rdf:about="&om;newtonMetre"/> + <om:UnitMultiplication rdf:about="&om;micronewtonMetre"/> + <om:UnitMultiplication rdf:about="&om;millinewtonMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Torque"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;TorqueUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;MomentOfForce"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MomentOfForceUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Newton Metre Ontology --> + + <om:UnitMultiplication rdf:about="&om;newtonMetre"> + <rdfs:label xml:lang="en">newton metre</rdfs:label> + <rdfs:label xml:lang="nl">newton meter</rdfs:label> + <om:symbol>N m</om:symbol> + <om:alternativeSymbol>N·m</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;newton"/> + <hasTerm2 rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:UnitMultiplication> + + <owl:Class rdf:about="&om;Energy"> + <om:commonlyHasUnit rdf:resource="&om;newtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Enthalpy"> + <om:commonlyHasUnit rdf:resource="&om;newtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;KineticEnergy"> + <om:commonlyHasUnit rdf:resource="&om;newtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;PotentialEnergy"> + <om:commonlyHasUnit rdf:resource="&om;newtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Work"> + <om:commonlyHasUnit rdf:resource="&om;newtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Torque"> + <om:commonlyHasUnit rdf:resource="&om;newtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;MomentOfForce"> + <om:commonlyHasUnit rdf:resource="&om;newtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;EnergyUnit"> + <rdfs:label xml:lang="en">energy unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;BritishThermalUnit-39F"/> + <om:Unit rdf:about="&om;BritishThermalUnit-59F"/> + <om:Unit rdf:about="&om;BritishThermalUnit-60F"/> + <om:Unit rdf:about="&om;BritishThermalUnit-InternationalTable"/> + <om:Unit rdf:about="&om;BritishThermalUnit-Mean"/> + <om:Unit rdf:about="&om;BritishThermalUnit-Thermochemical"/> + <om:Unit rdf:about="&om;calorie-15C"/> + <om:Unit rdf:about="&om;calorie-20C"/> + <om:Unit rdf:about="&om;calorie-InternationalTable"/> + <om:Unit rdf:about="&om;calorie-Mean"/> + <om:Unit rdf:about="&om;calorie-Thermochemical"/> + <om:Unit rdf:about="&om;electronvolt"/> + <om:Unit rdf:about="&om;erg"/> + <om:Unit rdf:about="&om;footPoundal"/> + <om:Unit rdf:about="&om;joule"/> + <om:Unit rdf:about="&om;quad"/> + <om:PrefixedUnit rdf:about="&om;gigaelectronvolt"/> + <om:PrefixedUnit rdf:about="&om;kiloelectronvolt"/> + <om:PrefixedUnit rdf:about="&om;megaelectronvolt"/> + <om:UnitMultiplication rdf:about="&om;wattHour"/> + <om:UnitMultiplication rdf:about="&om;kilowattHour"/> + <om:UnitMultiplication rdf:about="&om;terawattHour"/> + <om:Unit rdf:about="&om;therm-EC"/> + <om:Unit rdf:about="&om;therm-US"/> + <om:Unit rdf:about="&om;tonOfTNT"/> + <om:UnitMultiplication rdf:about="&om;newtonMetre"/> + <om:UnitMultiplication rdf:about="&om;micronewtonMetre"/> + <om:UnitMultiplication rdf:about="&om;millinewtonMetre"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedJoule"/> + <owl:Class rdf:about="&om;PrefixedElectronvolt"/> + <owl:Class rdf:about="&om;PrefixedCalorie-Mean"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Energy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;EnergyUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Newton Metre Multiples and Submultiples Ontology --> + + <om:UnitMultiplication rdf:about="&om;micronewtonMetre"> + <rdfs:label xml:lang="en">micronewton metre</rdfs:label> + <rdfs:label xml:lang="nl">micronewton meter</rdfs:label> + <om:symbol>μN m</om:symbol> + <om:alternativeSymbol>μN·m</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;micronewton"/> + <hasTerm2 rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:UnitMultiplication> + + <om:UnitMultiplication rdf:about="&om;millinewtonMetre"> + <rdfs:label xml:lang="en">millinewton metre</rdfs:label> + <rdfs:label xml:lang="nl">millinewton meter</rdfs:label> + <om:symbol>mN m</om:symbol> + <om:alternativeSymbol>mN·m</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;millinewton"/> + <hasTerm2 rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:UnitMultiplication> + + <owl:Class rdf:about="&om;Energy"> + <om:commonlyHasUnit rdf:resource="&om;micronewtonMetre"/> + <om:commonlyHasUnit rdf:resource="&om;millinewtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Enthalpy"> + <om:commonlyHasUnit rdf:resource="&om;micronewtonMetre"/> + <om:commonlyHasUnit rdf:resource="&om;millinewtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;KineticEnergy"> + <om:commonlyHasUnit rdf:resource="&om;micronewtonMetre"/> + <om:commonlyHasUnit rdf:resource="&om;millinewtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;PotentialEnergy"> + <om:commonlyHasUnit rdf:resource="&om;micronewtonMetre"/> + <om:commonlyHasUnit rdf:resource="&om;millinewtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Work"> + <om:commonlyHasUnit rdf:resource="&om;micronewtonMetre"/> + <om:commonlyHasUnit rdf:resource="&om;millinewtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Torque"> + <om:commonlyHasUnit rdf:resource="&om;micronewtonMetre"/> + <om:commonlyHasUnit rdf:resource="&om;millinewtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;MomentOfForce"> + <om:commonlyHasUnit rdf:resource="&om;micronewtonMetre"/> + <om:commonlyHasUnit rdf:resource="&om;millinewtonMetre"/> + </owl:Class> + + <!-- Joule Ontology --> + + <om:Unit rdf:about="&om;joule"> + <rdfs:label xml:lang="en">joule</rdfs:label> + <rdfs:label xml:lang="nl">joule</rdfs:label> + <rdfs:label xml:lang="zh">焦耳</rdfs:label> + <rdfs:comment xml:lang="en">The joule is a unit of energy defined as kilogram times square metre divided by second squared.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>J</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;newtonMetre"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;Energy"> + <om:commonlyHasUnit rdf:resource="&om;joule"/> + </owl:Class> + + <owl:Class rdf:about="&om;Enthalpy"> + <om:commonlyHasUnit rdf:resource="&om;joule"/> + </owl:Class> + + <owl:Class rdf:about="&om;KineticEnergy"> + <om:commonlyHasUnit rdf:resource="&om;joule"/> + </owl:Class> + + <owl:Class rdf:about="&om;PotentialEnergy"> + <om:commonlyHasUnit rdf:resource="&om;joule"/> + </owl:Class> + + <owl:Class rdf:about="&om;Work"> + <om:commonlyHasUnit rdf:resource="&om;joule"/> + </owl:Class> + + <!-- Joule Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctojoule"> + <rdfs:label xml:lang="en">yoctojoule</rdfs:label> + <rdfs:label xml:lang="nl">yoctojoule</rdfs:label> + <rdfs:comment xml:lang="en">The yoctojoule is a unit of energy defined as 1.0e-24 joule.</rdfs:comment> + <om:symbol>yJ</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptojoule"> + <rdfs:label xml:lang="en">zeptojoule</rdfs:label> + <rdfs:label xml:lang="nl">zeptojoule</rdfs:label> + <rdfs:comment xml:lang="en">The zeptjoule is a unit of energy defined as 1.0e-21 joule.</rdfs:comment> + <om:symbol>zJ</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attojoule"> + <rdfs:label xml:lang="en">attojoule</rdfs:label> + <rdfs:label xml:lang="nl">attojoule</rdfs:label> + <rdfs:comment xml:lang="en">The attojoule is a unit of energy defined as 1.0e-18 joule.</rdfs:comment> + <om:symbol>aJ</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtojoule"> + <rdfs:label xml:lang="en">femtojoule</rdfs:label> + <rdfs:label xml:lang="nl">femtojoule</rdfs:label> + <rdfs:comment xml:lang="en">The femtojoule is a unit of energy defined as 1.0e-15 joule.</rdfs:comment> + <om:symbol>fJ</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picojoule"> + <rdfs:label xml:lang="en">picojoule</rdfs:label> + <rdfs:label xml:lang="nl">picojoule</rdfs:label> + <rdfs:comment xml:lang="en">The picojoule is a unit of energy defined as 1.0e-12 joule.</rdfs:comment> + <om:symbol>pJ</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanojoule"> + <rdfs:label xml:lang="en">nanojoule</rdfs:label> + <rdfs:label xml:lang="nl">nanojoule</rdfs:label> + <rdfs:comment xml:lang="en">The nanojoule is a unit of energy defined as 1.0e-9 joule.</rdfs:comment> + <om:symbol>nJ</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microjoule"> + <rdfs:label xml:lang="en">microjoule</rdfs:label> + <rdfs:label xml:lang="nl">microjoule</rdfs:label> + <rdfs:comment xml:lang="en">The microjoule is a unit of energy defined as 1.0e-6 joule.</rdfs:comment> + <om:symbol>μJ</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millijoule"> + <rdfs:label xml:lang="en">millijoule</rdfs:label> + <rdfs:label xml:lang="nl">millijoule</rdfs:label> + <rdfs:comment xml:lang="en">The millijoule is a unit of energy defined as 1.0e-3 joule.</rdfs:comment> + <om:symbol>mJ</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centijoule"> + <rdfs:label xml:lang="en">centijoule</rdfs:label> + <rdfs:label xml:lang="nl">centijoule</rdfs:label> + <rdfs:comment xml:lang="en">The centijoule is a unit of energy defined as 1.0e-2 joule.</rdfs:comment> + <om:symbol>cJ</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decijoule"> + <rdfs:label xml:lang="en">decijoule</rdfs:label> + <rdfs:label xml:lang="nl">decijoule</rdfs:label> + <rdfs:comment xml:lang="en">The decijoule is a unit of energy defined as 1.0e-1 joule.</rdfs:comment> + <om:symbol>dJ</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decajoule"> + <rdfs:label xml:lang="en">decajoule</rdfs:label> + <rdfs:label xml:lang="nl">decajoule</rdfs:label> + <rdfs:comment xml:lang="en">The decajoule is a unit of energy defined as 1.0e1 joule.</rdfs:comment> + <om:symbol>daJ</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectojoule"> + <rdfs:label xml:lang="en">hectojoule</rdfs:label> + <rdfs:label xml:lang="nl">hectojoule</rdfs:label> + <rdfs:comment xml:lang="en">The hectojoule is a unit of energy defined as 1.0e2 joule.</rdfs:comment> + <om:symbol>hJ</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilojoule"> + <rdfs:label xml:lang="en">kilojoule</rdfs:label> + <rdfs:label xml:lang="nl">kilojoule</rdfs:label> + <rdfs:comment xml:lang="en">The kilojoule is a unit of energy defined as 1.0e3 joule.</rdfs:comment> + <om:symbol>kJ</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megajoule"> + <rdfs:label xml:lang="en">megajoule</rdfs:label> + <rdfs:label xml:lang="nl">megajoule</rdfs:label> + <rdfs:comment xml:lang="en">The megajoule is a unit of energy defined as 1.0e6 joule.</rdfs:comment> + <om:symbol>MJ</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigajoule"> + <rdfs:label xml:lang="en">gigajoule</rdfs:label> + <rdfs:label xml:lang="nl">gigajoule</rdfs:label> + <rdfs:comment xml:lang="en">The gigajoule is a unit of energy defined as 1.0e9 joule.</rdfs:comment> + <om:symbol>GJ</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;terajoule"> + <rdfs:label xml:lang="en">terajoule</rdfs:label> + <rdfs:label xml:lang="nl">terajoule</rdfs:label> + <rdfs:comment xml:lang="en">The terajoule is a unit of energy defined as 1.0e12 joule.</rdfs:comment> + <om:symbol>TJ</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petajoule"> + <rdfs:label xml:lang="en">petajoule</rdfs:label> + <rdfs:label xml:lang="nl">petajoule</rdfs:label> + <rdfs:comment xml:lang="en">The petajoule is a unit of energy defined as 1.0e15 joule.</rdfs:comment> + <om:symbol>PJ</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exajoule"> + <rdfs:label xml:lang="en">exajoule</rdfs:label> + <rdfs:label xml:lang="nl">exajoule</rdfs:label> + <rdfs:comment xml:lang="en">The exajoule is a unit of energy defined as 1.0e18 joule.</rdfs:comment> + <om:symbol>EJ</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettajoule"> + <rdfs:label xml:lang="en">zettajoule</rdfs:label> + <rdfs:label xml:lang="nl">zettajoule</rdfs:label> + <rdfs:comment xml:lang="en">The zettajoule is a unit of energy defined as 1.0e21 joule.</rdfs:comment> + <om:symbol>ZJ</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottajoule"> + <rdfs:label xml:lang="en">yottajoule</rdfs:label> + <rdfs:label xml:lang="nl">yottajoule</rdfs:label> + <rdfs:comment xml:lang="en">The yottajoule is a unit of energy defined as 1.0e24 joule.</rdfs:comment> + <om:symbol>YJ</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedJoule"> + <rdfs:label xml:lang="en">prefixed joule</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;joule"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Energy"> + <om:commonlyHasUnit rdf:resource="&om;attojoule"/> + <om:commonlyHasUnit rdf:resource="&om;centijoule"/> + <om:commonlyHasUnit rdf:resource="&om;decajoule"/> + <om:commonlyHasUnit rdf:resource="&om;decijoule"/> + <om:commonlyHasUnit rdf:resource="&om;exajoule"/> + <om:commonlyHasUnit rdf:resource="&om;femtojoule"/> + <om:commonlyHasUnit rdf:resource="&om;gigajoule"/> + <om:commonlyHasUnit rdf:resource="&om;hectojoule"/> + <om:commonlyHasUnit rdf:resource="&om;kilojoule"/> + <om:commonlyHasUnit rdf:resource="&om;megajoule"/> + <om:commonlyHasUnit rdf:resource="&om;microjoule"/> + <om:commonlyHasUnit rdf:resource="&om;millijoule"/> + <om:commonlyHasUnit rdf:resource="&om;nanojoule"/> + <om:commonlyHasUnit rdf:resource="&om;petajoule"/> + <om:commonlyHasUnit rdf:resource="&om;picojoule"/> + <om:commonlyHasUnit rdf:resource="&om;terajoule"/> + </owl:Class> + + <owl:Class rdf:about="&om;Enthalpy"> + <om:commonlyHasUnit rdf:resource="&om;attojoule"/> + <om:commonlyHasUnit rdf:resource="&om;centijoule"/> + <om:commonlyHasUnit rdf:resource="&om;decajoule"/> + <om:commonlyHasUnit rdf:resource="&om;decijoule"/> + <om:commonlyHasUnit rdf:resource="&om;exajoule"/> + <om:commonlyHasUnit rdf:resource="&om;femtojoule"/> + <om:commonlyHasUnit rdf:resource="&om;gigajoule"/> + <om:commonlyHasUnit rdf:resource="&om;hectojoule"/> + <om:commonlyHasUnit rdf:resource="&om;kilojoule"/> + <om:commonlyHasUnit rdf:resource="&om;megajoule"/> + <om:commonlyHasUnit rdf:resource="&om;microjoule"/> + <om:commonlyHasUnit rdf:resource="&om;millijoule"/> + <om:commonlyHasUnit rdf:resource="&om;nanojoule"/> + <om:commonlyHasUnit rdf:resource="&om;petajoule"/> + <om:commonlyHasUnit rdf:resource="&om;picojoule"/> + <om:commonlyHasUnit rdf:resource="&om;terajoule"/> + </owl:Class> + + <owl:Class rdf:about="&om;KineticEnergy"> + <om:commonlyHasUnit rdf:resource="&om;attojoule"/> + <om:commonlyHasUnit rdf:resource="&om;centijoule"/> + <om:commonlyHasUnit rdf:resource="&om;decajoule"/> + <om:commonlyHasUnit rdf:resource="&om;decijoule"/> + <om:commonlyHasUnit rdf:resource="&om;exajoule"/> + <om:commonlyHasUnit rdf:resource="&om;femtojoule"/> + <om:commonlyHasUnit rdf:resource="&om;gigajoule"/> + <om:commonlyHasUnit rdf:resource="&om;hectojoule"/> + <om:commonlyHasUnit rdf:resource="&om;kilojoule"/> + <om:commonlyHasUnit rdf:resource="&om;megajoule"/> + <om:commonlyHasUnit rdf:resource="&om;microjoule"/> + <om:commonlyHasUnit rdf:resource="&om;millijoule"/> + <om:commonlyHasUnit rdf:resource="&om;nanojoule"/> + <om:commonlyHasUnit rdf:resource="&om;petajoule"/> + <om:commonlyHasUnit rdf:resource="&om;picojoule"/> + <om:commonlyHasUnit rdf:resource="&om;terajoule"/> + </owl:Class> + + <owl:Class rdf:about="&om;PotentialEnergy"> + <om:commonlyHasUnit rdf:resource="&om;attojoule"/> + <om:commonlyHasUnit rdf:resource="&om;centijoule"/> + <om:commonlyHasUnit rdf:resource="&om;decajoule"/> + <om:commonlyHasUnit rdf:resource="&om;decijoule"/> + <om:commonlyHasUnit rdf:resource="&om;exajoule"/> + <om:commonlyHasUnit rdf:resource="&om;femtojoule"/> + <om:commonlyHasUnit rdf:resource="&om;gigajoule"/> + <om:commonlyHasUnit rdf:resource="&om;hectojoule"/> + <om:commonlyHasUnit rdf:resource="&om;kilojoule"/> + <om:commonlyHasUnit rdf:resource="&om;megajoule"/> + <om:commonlyHasUnit rdf:resource="&om;microjoule"/> + <om:commonlyHasUnit rdf:resource="&om;millijoule"/> + <om:commonlyHasUnit rdf:resource="&om;nanojoule"/> + <om:commonlyHasUnit rdf:resource="&om;petajoule"/> + <om:commonlyHasUnit rdf:resource="&om;picojoule"/> + <om:commonlyHasUnit rdf:resource="&om;terajoule"/> + </owl:Class> + + <owl:Class rdf:about="&om;Work"> + <om:commonlyHasUnit rdf:resource="&om;attojoule"/> + <om:commonlyHasUnit rdf:resource="&om;centijoule"/> + <om:commonlyHasUnit rdf:resource="&om;decajoule"/> + <om:commonlyHasUnit rdf:resource="&om;decijoule"/> + <om:commonlyHasUnit rdf:resource="&om;exajoule"/> + <om:commonlyHasUnit rdf:resource="&om;femtojoule"/> + <om:commonlyHasUnit rdf:resource="&om;gigajoule"/> + <om:commonlyHasUnit rdf:resource="&om;hectojoule"/> + <om:commonlyHasUnit rdf:resource="&om;kilojoule"/> + <om:commonlyHasUnit rdf:resource="&om;megajoule"/> + <om:commonlyHasUnit rdf:resource="&om;microjoule"/> + <om:commonlyHasUnit rdf:resource="&om;millijoule"/> + <om:commonlyHasUnit rdf:resource="&om;nanojoule"/> + <om:commonlyHasUnit rdf:resource="&om;petajoule"/> + <om:commonlyHasUnit rdf:resource="&om;picojoule"/> + <om:commonlyHasUnit rdf:resource="&om;terajoule"/> + </owl:Class> + + <!-- Electronvolt Ontology --> + + <om:Unit rdf:about="&om;electronvolt"> + <rdfs:label xml:lang="en">electronvolt</rdfs:label> + <rdfs:label xml:lang="nl">electronvolt</rdfs:label> + <!-- <rdfs:label xml:lang="zh">電子伏特</rdfs:label> --> + <rdfs:label xml:lang="zh">电子伏特</rdfs:label> + <rdfs:comment xml:lang="en">The electronvolt is a unit of energy defined as 1.602177e-19 joule.</rdfs:comment> + <om:symbol>eV</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0000000000000000001602177</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;Energy"> + <om:commonlyHasUnit rdf:resource="&om;electronvolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;Enthalpy"> + <om:commonlyHasUnit rdf:resource="&om;electronvolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;KineticEnergy"> + <om:commonlyHasUnit rdf:resource="&om;electronvolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;PotentialEnergy"> + <om:commonlyHasUnit rdf:resource="&om;electronvolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;Work"> + <om:commonlyHasUnit rdf:resource="&om;electronvolt"/> + </owl:Class> + + <!-- Electronvolt Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;kiloelectronvolt"> + <rdfs:label xml:lang="en">kiloelectronvolt</rdfs:label> + <rdfs:label xml:lang="nl">kiloelectronvolt</rdfs:label> + <rdfs:comment xml:lang="en">The kiloelectronvolt is a unit of energy defined as 1.0e3 electronvolt.</rdfs:comment> + <om:symbol>keV</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;electronvolt"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megaelectronvolt"> + <rdfs:label xml:lang="en">megaelectronvolt</rdfs:label> + <rdfs:label xml:lang="nl">megaelectronvolt</rdfs:label> + <rdfs:comment xml:lang="en">The megaelectronvolt is a unit of energy defined as 1.0e6 electronvolt.</rdfs:comment> + <om:symbol>MeV</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;electronvolt"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigaelectronvolt"> + <rdfs:label xml:lang="en">gigaelectronvolt</rdfs:label> + <rdfs:label xml:lang="nl">gigaelectronvolt</rdfs:label> + <rdfs:comment xml:lang="en">The gigaelectronvolt is a unit of energy defined as 1.0e9 electronvolt.</rdfs:comment> + <om:symbol>GeV</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;electronvolt"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedElectronvolt"> + <rdfs:label xml:lang="en">prefixed electronvolt</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;electronvolt"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Energy"> + <om:commonlyHasUnit rdf:resource="&om;gigaelectronvolt"/> + <om:commonlyHasUnit rdf:resource="&om;kiloelectronvolt"/> + <om:commonlyHasUnit rdf:resource="&om;megaelectronvolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;Enthalpy"> + <om:commonlyHasUnit rdf:resource="&om;gigaelectronvolt"/> + <om:commonlyHasUnit rdf:resource="&om;kiloelectronvolt"/> + <om:commonlyHasUnit rdf:resource="&om;megaelectronvolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;KineticEnergy"> + <om:commonlyHasUnit rdf:resource="&om;gigaelectronvolt"/> + <om:commonlyHasUnit rdf:resource="&om;kiloelectronvolt"/> + <om:commonlyHasUnit rdf:resource="&om;megaelectronvolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;PotentialEnergy"> + <om:commonlyHasUnit rdf:resource="&om;gigaelectronvolt"/> + <om:commonlyHasUnit rdf:resource="&om;kiloelectronvolt"/> + <om:commonlyHasUnit rdf:resource="&om;megaelectronvolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;Work"> + <om:commonlyHasUnit rdf:resource="&om;gigaelectronvolt"/> + <om:commonlyHasUnit rdf:resource="&om;kiloelectronvolt"/> + <om:commonlyHasUnit rdf:resource="&om;megaelectronvolt"/> + </owl:Class> + + <!-- Calorie (Mean) Ontology --> + + <om:Unit rdf:about="&om;calorie-Mean"> + <rdfs:label xml:lang="en">calorie (mean)</rdfs:label> + <om:alternativeLabel xml:lang="en">mean calorie</om:alternativeLabel> + <rdfs:comment xml:lang="en">The mean calorie is a unit of energy defined as 4.19002 joule.</rdfs:comment> + <om:symbol>cal</om:symbol> + <om:alternativeSymbol>c</om:alternativeSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">4.19002</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;Energy"> + <om:commonlyHasUnit rdf:resource="&om;calorie-Mean"/> + </owl:Class> + + <owl:Class rdf:about="&om;Enthalpy"> + <om:commonlyHasUnit rdf:resource="&om;calorie-Mean"/> + </owl:Class> + + <owl:Class rdf:about="&om;KineticEnergy"> + <om:commonlyHasUnit rdf:resource="&om;calorie-Mean"/> + </owl:Class> + + <owl:Class rdf:about="&om;PotentialEnergy"> + <om:commonlyHasUnit rdf:resource="&om;calorie-Mean"/> + </owl:Class> + + <owl:Class rdf:about="&om;Work"> + <om:commonlyHasUnit rdf:resource="&om;calorie-Mean"/> + </owl:Class> + + <!-- Calorie (Mean) Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;kilocalorie-Mean"> + <rdfs:label xml:lang="en">kilocalorie (mean)</rdfs:label> + <rdfs:comment xml:lang="en">The kilocalorie (mean) is a unit of energy defined as 1.0e3 calorie (mean).</rdfs:comment> + <om:symbol>kcal</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;calorie-Mean"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedCalorie-Mean"> + <rdfs:label xml:lang="en">prefixed calorie (mean)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;calorie-Mean"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Energy"> + <om:commonlyHasUnit rdf:resource="&om;kilocalorie-Mean"/> + </owl:Class> + + <owl:Class rdf:about="&om;Enthalpy"> + <om:commonlyHasUnit rdf:resource="&om;kilocalorie-Mean"/> + </owl:Class> + + <owl:Class rdf:about="&om;KineticEnergy"> + <om:commonlyHasUnit rdf:resource="&om;kilocalorie-Mean"/> + </owl:Class> + + <owl:Class rdf:about="&om;PotentialEnergy"> + <om:commonlyHasUnit rdf:resource="&om;kilocalorie-Mean"/> + </owl:Class> + + <owl:Class rdf:about="&om;Work"> + <om:commonlyHasUnit rdf:resource="&om;kilocalorie-Mean"/> + </owl:Class> + + <!-- Energy Unit Ontology --> + + <om:Unit rdf:about="&om;erg"> + <rdfs:label xml:lang="en">erg</rdfs:label> + <rdfs:label xml:lang="nl">erg</rdfs:label> + <!-- <rdfs:label xml:lang="zh">爾格</rdfs:label> --> + <rdfs:label xml:lang="zh">尔格</rdfs:label> + <rdfs:comment xml:lang="en">The erg is a unit of energy defined as 1.0e-7 joule.</rdfs:comment> + <om:symbol>erg</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.00000010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <om:PrefixedUnit rdf:about="&om;megaerg"> + <rdfs:label xml:lang="en">megaerg</rdfs:label> + <om:alternativeLabel xml:lang="en">megalerg</om:alternativeLabel> + <rdfs:comment xml:lang="en">The megaerg is a unit of energy defined as 1.0e6 erg.</rdfs:comment> + <om:symbol>Merg</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;erg"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:PrefixedUnit> + + <om:UnitMultiplication rdf:about="&om;wattHour"> + <rdfs:label xml:lang="en">watt hour</rdfs:label> + <om:alternativeLabel xml:lang="en">watt-hour</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">watthour</om:alternativeLabel> + <om:symbol>W h</om:symbol> + <om:alternativeSymbol>W·h</om:alternativeSymbol> + <om:alternativeSymbol>Wh</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;watt"/> + <hasTerm2 rdf:resource="&om;hour"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:UnitMultiplication> + + <om:UnitMultiplication rdf:about="&om;kilowattHour"> + <rdfs:label xml:lang="en">kilowatt hour</rdfs:label> +<!-- <rdfs:label xml:lang="zh">千瓦·時</rdfs:label> --> + <om:alternativeLabel xml:lang="en">kilowatt-hour</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">kilowatthour</om:alternativeLabel> + <om:symbol>kW h</om:symbol> + <om:alternativeSymbol>kW·h</om:alternativeSymbol> + <om:alternativeSymbol>kWh</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;kilowatt"/> + <hasTerm2 rdf:resource="&om;hour"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:UnitMultiplication> + + <om:UnitMultiplication rdf:about="&om;megawattHour"> + <rdfs:label xml:lang="en">megawatt hour</rdfs:label> + <om:alternativeLabel xml:lang="en">megawatt-hour</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">megawatthour</om:alternativeLabel> + <om:symbol>MW h</om:symbol> + <om:alternativeSymbol>MW·h</om:alternativeSymbol> + <om:alternativeSymbol>MWh</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;megawatt"/> + <hasTerm2 rdf:resource="&om;hour"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:UnitMultiplication> + + <om:UnitMultiplication rdf:about="&om;gigawattHour"> + <rdfs:label xml:lang="en">gigawatt hour</rdfs:label> + <om:alternativeLabel xml:lang="en">gigawatt-hour</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">gigawatthour</om:alternativeLabel> + <om:symbol>GW h</om:symbol> + <om:alternativeSymbol>GW·h</om:alternativeSymbol> + <om:alternativeSymbol>GWh</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;gigawatt"/> + <hasTerm2 rdf:resource="&om;hour"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:UnitMultiplication> + + <om:UnitMultiplication rdf:about="&om;terawattHour"> + <rdfs:label xml:lang="en">terawatt hour</rdfs:label> + <om:alternativeLabel xml:lang="en">terawatt-hour</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">terawatthour</om:alternativeLabel> + <om:symbol>TW h</om:symbol> + <om:alternativeSymbol>TW·h</om:alternativeSymbol> + <om:alternativeSymbol>TWh</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;terawatt"/> + <hasTerm2 rdf:resource="&om;hour"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:UnitMultiplication> + + <om:Unit rdf:about="&om;BritishThermalUnit-39F"> + <rdfs:label xml:lang="en">British thermal unit (39 °F)</rdfs:label> + <rdfs:label xml:lang="zh">英国热力单位(39°F)</rdfs:label> + <om:alternativeLabel xml:lang="en">39 °F British thermal unit</om:alternativeLabel> + <!-- <rdfs:comment xml:lang="en">The 39 °F British thermal unit is a unit of energy defined as 1.05967e3 joule.</rdfs:comment> --> + <om:LaTeXCommand>\BritishTermalUnitThirtyNineF</om:LaTeXCommand> + <om:symbol>Btu</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <!-- <om:hasFactor rdf:datatype="&xsd;decimal">1059.67</om:hasFactor> --> + <!-- hasDefinition --> <!-- <om:hasUnit rdf:resource="&om;joule"/> --> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;BritishThermalUnit-59F"> + <rdfs:label xml:lang="en">British thermal unit (59 °F)</rdfs:label> + <rdfs:label xml:lang="zh">英国热力单位(59°F)</rdfs:label> + <om:alternativeLabel xml:lang="en">59 °F British thermal unit</om:alternativeLabel> + <!-- <rdfs:comment xml:lang="en">The 59 °F British thermal unit is a unit of energy defined as 1.05480e3 joule.</rdfs:comment> --> + <om:LaTeXCommand>\BritishTermalUnitFiftyNineF</om:LaTeXCommand> + <om:symbol>Btu</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <!-- <om:hasFactor rdf:datatype="&xsd;decimal">1054.80</om:hasFactor> --> + <!-- hasDefinition --> <!-- <om:hasUnit rdf:resource="&om;joule"/> --> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;BritishThermalUnit-60F"> + <rdfs:label xml:lang="en">British thermal unit (60 °F)</rdfs:label> + <rdfs:label xml:lang="zh">英国热力单位(60°F)</rdfs:label> + <om:alternativeLabel xml:lang="en">60 °F British thermal unit</om:alternativeLabel> + <!-- <rdfs:comment xml:lang="en">The 60 °F British thermal unit is a unit of energy defined as 1.05468e3 joule.</rdfs:comment> --> + <om:LaTeXCommand>\BritishTermalUnitSixtyF</om:LaTeXCommand> + <om:symbol>Btu</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <!-- <om:hasFactor rdf:datatype="&xsd;decimal">1054.68</om:hasFactor> --> + <!-- hasDefinition --> <!-- <om:hasUnit rdf:resource="&om;joule"/> --> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;BritishThermalUnit-InternationalTable"> + <rdfs:label xml:lang="en">British thermal unit (International Table)</rdfs:label> + <rdfs:label xml:lang="zh">英国热力单位(国际表)</rdfs:label> + <om:alternativeLabel xml:lang="en">International Table British thermal unit</om:alternativeLabel> + <!-- <rdfs:comment xml:lang="en">The International Table British thermal unit is a unit of energy defined as 1.055056e3 joule.</rdfs:comment> --> + <om:symbol>Btu_IT</om:symbol> + <om:LaTeXSymbol>Btu_{IT}</om:LaTeXSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <!-- <om:hasFactor rdf:datatype="&xsd;decimal">1055.056</om:hasFactor> --> + <!-- hasDefinition --> <!-- <om:hasUnit rdf:resource="&om;joule"/> --> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;BritishThermalUnit-Mean"> + <rdfs:label xml:lang="en">British thermal unit (mean)</rdfs:label> + <rdfs:label xml:lang="zh">英国热力单位(平均)</rdfs:label> + <om:alternativeLabel xml:lang="en">mean British thermal unit</om:alternativeLabel> + <!-- <rdfs:comment xml:lang="en">The mean British thermal unit is a unit of energy defined as 1.05587e3 joule.</rdfs:comment> --> + <om:symbol>Btu</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <!-- <om:hasFactor rdf:datatype="&xsd;decimal">1055.87</om:hasFactor> --> + <!-- hasDefinition --> <!-- <om:hasUnit rdf:resource="&om;joule"/> --> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;BritishThermalUnit-Thermochemical"> + <rdfs:label xml:lang="en">British thermal unit (thermochemical)</rdfs:label> + <rdfs:label xml:lang="zh">英国热力单位(热力化学)</rdfs:label> + <om:alternativeLabel xml:lang="en">thermochemical British thermal unit</om:alternativeLabel> + <!-- <rdfs:comment xml:lang="en">The thermochemical British thermal unit is a unit of energy defined as 1.054350e3 joule.</rdfs:comment> --> + <om:symbol>Btu_th</om:symbol> + <om:LaTeXSymbol>BTU_{th}</om:LaTeXSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <!-- <om:hasFactor rdf:datatype="&xsd;decimal">1054.350</om:hasFactor> --> + <!-- hasDefinition --> <!-- <om:hasUnit rdf:resource="&om;joule"/> --> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;calorie-15C"> + <rdfs:label xml:lang="en">calorie (15 °C)</rdfs:label> + <rdfs:label xml:lang="nl">calorie (15 °C)</rdfs:label> + <om:alternativeLabel xml:lang="en">15 °C calorie</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">15 °C calorie</om:alternativeLabel> + <!-- <rdfs:comment xml:lang="en">The 15 °C calorie is a unit of energy defined as 4.18580 joule.</rdfs:comment> --> + <om:symbol>cal_15</om:symbol> + <om:LaTeXSymbol>cal_{15}</om:LaTeXSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <!-- <om:hasFactor rdf:datatype="&xsd;decimal">4.18580</om:hasFactor> --> + <!-- hasDefinition --> <!-- <om:hasUnit rdf:resource="&om;joule"/> --> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;calorie-20C"> + <rdfs:label xml:lang="en">calorie (20 °C)</rdfs:label> + <rdfs:label xml:lang="nl">calorie (20 °C)</rdfs:label> + <om:alternativeLabel xml:lang="en">20 °C calorie</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">20 °C calorie</om:alternativeLabel> + <!-- <rdfs:comment xml:lang="en">The 20 °C calorie is a unit of energy defined as 4.18190 joule.</rdfs:comment> --> + <om:LaTeXCommand>\calorieTwentyC</om:LaTeXCommand> + <om:symbol>cal_20</om:symbol> + <om:LaTeXSymbol>cal_{20}</om:LaTeXSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <!-- <om:hasFactor rdf:datatype="&xsd;decimal">4.18190</om:hasFactor> --> + <!-- hasDefinition --> <!-- <om:hasUnit rdf:resource="&om;joule"/> --> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;calorie-InternationalTable"> + <rdfs:label xml:lang="en">calorie (International Table)</rdfs:label> + <om:alternativeLabel xml:lang="en">calorie (International Steam Table)</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">International Table calorie</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">International Steam Table calorie</om:alternativeLabel> + <!-- <rdfs:comment xml:lang="en">The International Table calorie is a unit of energy defined as 4.1868 joule.</rdfs:comment> --> + <om:symbol>cal_IT</om:symbol> + <om:LaTeXSymbol>cal_{IT}</om:LaTeXSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <!-- <om:hasFactor rdf:datatype="&xsd;decimal">4.1868</om:hasFactor> --> + <!-- hasDefinition --> <!-- <om:hasUnit rdf:resource="&om;joule"/> --> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;calorie-Thermochemical"> + <rdfs:label xml:lang="en">calorie (thermochemical)</rdfs:label> + <om:alternativeLabel xml:lang="en">thermochemical calorie</om:alternativeLabel> + <!-- <rdfs:comment xml:lang="en">The thermochemical calorie is a unit of energy defined as 4.184 joule.</rdfs:comment> --> + <om:symbol>cal_th</om:symbol> + <om:LaTeXSymbol>cal_{th}</om:LaTeXSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <!-- <om:hasFactor rdf:datatype="&xsd;decimal">4.184</om:hasFactor> --> + <!-- hasDefinition --> <!-- <om:hasUnit rdf:resource="&om;joule"/> --> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;footPoundal"> + <rdfs:label xml:lang="en">foot poundal</rdfs:label> + <rdfs:comment xml:lang="en">The foot poundal is a unit of energy defined as 4.214011e-2 joule.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.04214011</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;quad"> + <rdfs:label xml:lang="en">quad</rdfs:label> + <rdfs:comment xml:lang="en">The quad is a unit of energy defined as 1.0e15 British thermal unit (International Table).</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">1000000000000000</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;BritishThermalUnit-InternationalTable"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + <om:LaTeXCommand>\quadUnit</om:LaTeXCommand> + </om:Unit> + + <om:Unit rdf:about="&om;therm-EC"> + <rdfs:label xml:lang="en">therm (EC)</rdfs:label> + <om:alternativeLabel xml:lang="en">EC therm</om:alternativeLabel> + <rdfs:comment xml:lang="en">The EC therm is a unit of energy defined as 1.05506e8 joule.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">105506000</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;therm-US"> + <rdfs:label xml:lang="en">therm (US)</rdfs:label> + <om:alternativeLabel xml:lang="en">US therm</om:alternativeLabel> + <rdfs:comment xml:lang="en">The US therm is a unit of energy defined as 1.054804e8 joule.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">105480400</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;tonOfTNT"> + <rdfs:label xml:lang="en">ton of TNT</rdfs:label> + <rdfs:comment xml:lang="en">The ton of TNT is a unit of energy defined as 4.184e9 joule.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">4184000000</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;joule"/> + <om:hasDimension rdf:resource="&om;energy-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e-7Joule"> + <om:hasNumericalValue>1.0e-7</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;joule"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.0e15BritishThermalUnit-InternationalTable"> + <om:hasNumericalValue>1.0e15</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;BritishThermalUnit-InternationalTable"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.054350e3Joule"> + <om:hasNumericalValue>1.054350e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;joule"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.05468e3Joule"> + <om:hasNumericalValue>1.05468e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;joule"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.05480e3Joule"> + <om:hasNumericalValue>1.05480e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;joule"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.054804e8Joule"> + <om:hasNumericalValue>1.054804e8</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;joule"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.055056e3Joule"> + <om:hasNumericalValue>1.055056e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;joule"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.05506e8Joule"> + <om:hasNumericalValue>1.05506e8</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;joule"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.05587e3Joule"> + <om:hasNumericalValue>1.05587e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;joule"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.05967e3Joule"> + <om:hasNumericalValue>1.05967e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;joule"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.602177e-19Joule"> + <om:hasNumericalValue>1.602177e-19</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;joule"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.18190Joule"> + <om:hasNumericalValue>4.18190</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;joule"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.184Joule"> + <om:hasNumericalValue>4.184</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;joule"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.184e9Joule"> + <om:hasNumericalValue>4.184e9</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;joule"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.18580Joule"> + <om:hasNumericalValue>4.18580</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;joule"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.1868Joule"> + <om:hasNumericalValue>4.1868</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;joule"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.19002Joule"> + <om:hasNumericalValue>4.19002</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;joule"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.214011e-2Joule"> + <om:hasNumericalValue>4.214011e-2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;joule"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Energy"> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-39F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-59F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-60F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-InternationalTable"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-Mean"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-Thermochemical"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-15C"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-20C"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-InternationalTable"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-Thermochemical"/> + <om:commonlyHasUnit rdf:resource="&om;erg"/> + <om:commonlyHasUnit rdf:resource="&om;footPoundal"/> + <om:commonlyHasUnit rdf:resource="&om;quad"/> + <om:commonlyHasUnit rdf:resource="&om;wattHour"/> + <om:commonlyHasUnit rdf:resource="&om;kilowattHour"/> + <om:commonlyHasUnit rdf:resource="&om;megawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;gigawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;terawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;therm-EC"/> + <om:commonlyHasUnit rdf:resource="&om;therm-US"/> + <om:commonlyHasUnit rdf:resource="&om;tonOfTNT"/> + <om:commonlyHasUnit rdf:resource="&om;megaerg"/> + </owl:Class> + + <owl:Class rdf:about="&om;Enthalpy"> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-39F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-59F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-60F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-InternationalTable"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-Mean"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-Thermochemical"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-15C"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-20C"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-InternationalTable"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-Thermochemical"/> + <om:commonlyHasUnit rdf:resource="&om;erg"/> + <om:commonlyHasUnit rdf:resource="&om;footPoundal"/> + <om:commonlyHasUnit rdf:resource="&om;quad"/> + <om:commonlyHasUnit rdf:resource="&om;wattHour"/> + <om:commonlyHasUnit rdf:resource="&om;kilowattHour"/> + <om:commonlyHasUnit rdf:resource="&om;megawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;gigawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;terawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;therm-EC"/> + <om:commonlyHasUnit rdf:resource="&om;therm-US"/> + <om:commonlyHasUnit rdf:resource="&om;tonOfTNT"/> + <om:commonlyHasUnit rdf:resource="&om;megaerg"/> + </owl:Class> + + <owl:Class rdf:about="&om;KineticEnergy"> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-39F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-59F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-60F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-InternationalTable"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-Mean"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-Thermochemical"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-15C"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-20C"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-InternationalTable"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-Thermochemical"/> + <om:commonlyHasUnit rdf:resource="&om;erg"/> + <om:commonlyHasUnit rdf:resource="&om;footPoundal"/> + <om:commonlyHasUnit rdf:resource="&om;quad"/> + <om:commonlyHasUnit rdf:resource="&om;wattHour"/> + <om:commonlyHasUnit rdf:resource="&om;kilowattHour"/> + <om:commonlyHasUnit rdf:resource="&om;megawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;gigawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;terawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;therm-EC"/> + <om:commonlyHasUnit rdf:resource="&om;therm-US"/> + <om:commonlyHasUnit rdf:resource="&om;tonOfTNT"/> + <om:commonlyHasUnit rdf:resource="&om;megaerg"/> + </owl:Class> + + <owl:Class rdf:about="&om;PotentialEnergy"> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-39F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-59F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-60F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-InternationalTable"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-Mean"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-Thermochemical"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-15C"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-20C"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-InternationalTable"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-Thermochemical"/> + <om:commonlyHasUnit rdf:resource="&om;erg"/> + <om:commonlyHasUnit rdf:resource="&om;footPoundal"/> + <om:commonlyHasUnit rdf:resource="&om;quad"/> + <om:commonlyHasUnit rdf:resource="&om;wattHour"/> + <om:commonlyHasUnit rdf:resource="&om;kilowattHour"/> + <om:commonlyHasUnit rdf:resource="&om;megawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;gigawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;terawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;therm-EC"/> + <om:commonlyHasUnit rdf:resource="&om;therm-US"/> + <om:commonlyHasUnit rdf:resource="&om;tonOfTNT"/> + <om:commonlyHasUnit rdf:resource="&om;megaerg"/> + </owl:Class> + + <owl:Class rdf:about="&om;Work"> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-39F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-59F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-60F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-InternationalTable"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-Mean"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-Thermochemical"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-15C"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-20C"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-InternationalTable"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-Thermochemical"/> + <om:commonlyHasUnit rdf:resource="&om;erg"/> + <om:commonlyHasUnit rdf:resource="&om;footPoundal"/> + <om:commonlyHasUnit rdf:resource="&om;quad"/> + <om:commonlyHasUnit rdf:resource="&om;wattHour"/> + <om:commonlyHasUnit rdf:resource="&om;kilowattHour"/> + <om:commonlyHasUnit rdf:resource="&om;megawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;gigawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;terawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;therm-EC"/> + <om:commonlyHasUnit rdf:resource="&om;therm-US"/> + <om:commonlyHasUnit rdf:resource="&om;tonOfTNT"/> + <om:commonlyHasUnit rdf:resource="&om;megaerg"/> + </owl:Class> + + <!-- Joule Per Second Ontology --> + + <om:UnitDivision rdf:about="&om;joulePerSecond-Time"> + <rdfs:label xml:lang="en">joule per second</rdfs:label> + <rdfs:label xml:lang="nl">joule per seconde</rdfs:label> + <om:symbol>J/s</om:symbol> + <om:alternativeSymbol>J s-1</om:alternativeSymbol> + <om:alternativeSymbol>J·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;joule"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Power"> + <om:commonlyHasUnit rdf:resource="&om;joulePerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;PowerUnit"> + <rdfs:label xml:lang="en">power unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;horsepower-Boiler"/> + <om:Unit rdf:about="&om;horsepower-British"/> + <om:Unit rdf:about="&om;horsepower-Electric"/> + <om:Unit rdf:about="&om;horsepower-Metric"/> + <om:Unit rdf:about="&om;horsepower-Water"/> + <om:Unit rdf:about="&om;kilocalorie-MeanPerDay"/> + <om:Unit rdf:about="&om;solarLuminosity"/> + <om:Unit rdf:about="&om;tonOfRefrigeration"/> + <om:Unit rdf:about="&om;watt"/> + <om:UnitDivision rdf:about="&om;joulePerSecond-Time"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedWatt"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Power"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;PowerUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Watt Ontology --> + + <om:Unit rdf:about="&om;watt"> + <rdfs:label xml:lang="en">watt</rdfs:label> + <rdfs:label xml:lang="nl">watt</rdfs:label> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>W</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;joulePerSecond-Time"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;Power"> + <om:commonlyHasUnit rdf:resource="&om;watt"/> + </owl:Class> + + <!-- Watt Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctowatt"> + <rdfs:label xml:lang="en">yoctowatt</rdfs:label> + <rdfs:label xml:lang="nl">yoctowatt</rdfs:label> + <om:symbol>yW</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptowatt"> + <rdfs:label xml:lang="en">zeptowatt</rdfs:label> + <rdfs:label xml:lang="nl">zeptowatt</rdfs:label> + <om:symbol>zW</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attowatt"> + <rdfs:label xml:lang="en">attowatt</rdfs:label> + <rdfs:label xml:lang="nl">attowatt</rdfs:label> + <om:symbol>aW</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtowatt"> + <rdfs:label xml:lang="en">femtowatt</rdfs:label> + <rdfs:label xml:lang="nl">femtowatt</rdfs:label> + <om:symbol>fW</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picowatt"> + <rdfs:label xml:lang="en">picowatt</rdfs:label> + <rdfs:label xml:lang="nl">picowatt</rdfs:label> + <om:symbol>pW</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanowatt"> + <rdfs:label xml:lang="en">nanowatt</rdfs:label> + <rdfs:label xml:lang="nl">nanowatt</rdfs:label> + <om:symbol>nW</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microwatt"> + <rdfs:label xml:lang="en">microwatt</rdfs:label> + <rdfs:label xml:lang="nl">microwatt</rdfs:label> + <om:symbol>μW</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;milliwatt"> + <rdfs:label xml:lang="en">milliwatt</rdfs:label> + <rdfs:label xml:lang="nl">milliwatt</rdfs:label> + <om:symbol>mW</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centiwatt"> + <rdfs:label xml:lang="en">centiwatt</rdfs:label> + <rdfs:label xml:lang="nl">centiwatt</rdfs:label> + <om:symbol>cW</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;deciwatt"> + <rdfs:label xml:lang="en">deciwatt</rdfs:label> + <rdfs:label xml:lang="nl">deciwatt</rdfs:label> + <om:symbol>dW</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decawatt"> + <rdfs:label xml:lang="en">decawatt</rdfs:label> + <rdfs:label xml:lang="nl">decawatt</rdfs:label> + <om:symbol>daW</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectowatt"> + <rdfs:label xml:lang="en">hectowatt</rdfs:label> + <rdfs:label xml:lang="nl">hectowatt</rdfs:label> + <om:symbol>hW</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilowatt"> + <rdfs:label xml:lang="en">kilowatt</rdfs:label> + <rdfs:label xml:lang="nl">kilowatt</rdfs:label> + <om:symbol>kW</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megawatt"> + <rdfs:label xml:lang="en">megawatt</rdfs:label> + <rdfs:label xml:lang="nl">megawatt</rdfs:label> + <om:symbol>MW</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigawatt"> + <rdfs:label xml:lang="en">gigawatt</rdfs:label> + <rdfs:label xml:lang="nl">gigawatt</rdfs:label> + <om:symbol>GW</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;terawatt"> + <rdfs:label xml:lang="en">terawatt</rdfs:label> + <rdfs:label xml:lang="nl">terawatt</rdfs:label> + <om:symbol>TW</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petawatt"> + <rdfs:label xml:lang="en">petawatt</rdfs:label> + <rdfs:label xml:lang="nl">petawatt</rdfs:label> + <om:symbol>PW</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exawatt"> + <rdfs:label xml:lang="en">exawatt</rdfs:label> + <rdfs:label xml:lang="nl">exawatt</rdfs:label> + <om:symbol>EW</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettawatt"> + <rdfs:label xml:lang="en">zettawatt</rdfs:label> + <rdfs:label xml:lang="nl">zettawatt</rdfs:label> + <om:symbol>ZW</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottawatt"> + <rdfs:label xml:lang="en">yottawatt</rdfs:label> + <rdfs:label xml:lang="nl">yottawatt</rdfs:label> + <om:symbol>YW</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedWatt"> + <rdfs:label xml:lang="en">prefixed watt</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;watt"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Power"> + <om:commonlyHasUnit rdf:resource="&om;attowatt"/> + <om:commonlyHasUnit rdf:resource="&om;centiwatt"/> + <om:commonlyHasUnit rdf:resource="&om;decawatt"/> + <om:commonlyHasUnit rdf:resource="&om;deciwatt"/> + <om:commonlyHasUnit rdf:resource="&om;exawatt"/> + <om:commonlyHasUnit rdf:resource="&om;femtowatt"/> + <om:commonlyHasUnit rdf:resource="&om;gigawatt"/> + <om:commonlyHasUnit rdf:resource="&om;hectowatt"/> + <om:commonlyHasUnit rdf:resource="&om;kilowatt"/> + <om:commonlyHasUnit rdf:resource="&om;megawatt"/> + <om:commonlyHasUnit rdf:resource="&om;microwatt"/> + <om:commonlyHasUnit rdf:resource="&om;milliwatt"/> + <om:commonlyHasUnit rdf:resource="&om;nanowatt"/> + <om:commonlyHasUnit rdf:resource="&om;petawatt"/> + <om:commonlyHasUnit rdf:resource="&om;picowatt"/> + <om:commonlyHasUnit rdf:resource="&om;terawatt"/> + </owl:Class> + + <owl:Class rdf:about="&om;RadiantFlux"> + <om:commonlyHasUnit rdf:resource="&om;attowatt"/> + <om:commonlyHasUnit rdf:resource="&om;centiwatt"/> + <om:commonlyHasUnit rdf:resource="&om;decawatt"/> + <om:commonlyHasUnit rdf:resource="&om;deciwatt"/> + <om:commonlyHasUnit rdf:resource="&om;exawatt"/> + <om:commonlyHasUnit rdf:resource="&om;femtowatt"/> + <om:commonlyHasUnit rdf:resource="&om;gigawatt"/> + <om:commonlyHasUnit rdf:resource="&om;hectowatt"/> + <om:commonlyHasUnit rdf:resource="&om;kilowatt"/> + <om:commonlyHasUnit rdf:resource="&om;megawatt"/> + <om:commonlyHasUnit rdf:resource="&om;microwatt"/> + <om:commonlyHasUnit rdf:resource="&om;milliwatt"/> + <om:commonlyHasUnit rdf:resource="&om;nanowatt"/> + <om:commonlyHasUnit rdf:resource="&om;petawatt"/> + <om:commonlyHasUnit rdf:resource="&om;picowatt"/> + <om:commonlyHasUnit rdf:resource="&om;terawatt"/> + </owl:Class> + + <!-- Power Unit Ontology --> + + <om:Unit rdf:about="&om;horsepower-Boiler"> + <rdfs:label xml:lang="en">horsepower (boiler)</rdfs:label> + <om:alternativeLabel xml:lang="en">boiler horsepower</om:alternativeLabel> + <rdfs:comment xml:lang="en">The boiler horsepower is a unit of power defined as 9.80950e3 watt.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">9809.50</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;horsepower-British"> + <rdfs:label xml:lang="en">horsepower (British)</rdfs:label> + <om:alternativeLabel xml:lang="en">British horsepower</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">imperial horsepower</om:alternativeLabel> + <rdfs:comment xml:lang="en">The British horsepower is a unit of power defined as 7.4570e2 watt.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">745.70</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;horsepower-Electric"> + <rdfs:label xml:lang="en">horsepower (electric)</rdfs:label> + <om:alternativeLabel xml:lang="en">electric horsepower</om:alternativeLabel> + <rdfs:comment xml:lang="en">The electric horsepower is a unit of power defined as 7.46e2 watt.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">746</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;horsepower-Metric"> + <rdfs:label xml:lang="en">horsepower (metric)</rdfs:label> + <om:alternativeLabel xml:lang="en">metric horsepower</om:alternativeLabel> + <rdfs:comment xml:lang="en">The metric horsepower is a unit of power defined as 7.354988e2 watt.</rdfs:comment> + <om:symbol>PS</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">735.4988</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;horsepower-Water"> + <rdfs:label xml:lang="en">horsepower (water)</rdfs:label> + <om:alternativeLabel xml:lang="en">water horsepower</om:alternativeLabel> + <rdfs:comment xml:lang="en">The water horsepower is a unit of power defined as 7.46043e2 watt.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">746.043</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:Unit> + + <om:UnitDivision rdf:about="&om;kilocalorie-MeanPerDay"> + <rdfs:label xml:lang="en">kilocalorie (mean) per day</rdfs:label> + <om:symbol>kcal/d</om:symbol> + <om:alternativeSymbol>kcal d-1</om:alternativeSymbol> + <om:alternativeSymbol>kcal·d-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilocalorie-Mean"/> + <om:hasDenominator rdf:resource="&om;day"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:UnitDivision> + + <om:Unit rdf:about="&om;tonOfRefrigeration"> + <rdfs:label xml:lang="en">ton of refrigeration</rdfs:label> + <rdfs:comment xml:lang="en">The ton of refrigeration is a unit of power defined as 3.516853e3 watt.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">3516.853</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_3.516853e3Watt"> + <om:hasNumericalValue>3.516853e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;watt"/> + </om:Measure> + + <om:Measure rdf:about="&om;_3.839e26Watt"> + <om:hasNumericalValue>3.839e26</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;watt"/> + </om:Measure> + + <om:Measure rdf:about="&om;_7.354988e2Watt"> + <om:hasNumericalValue>7.354988e2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;watt"/> + </om:Measure> + + <om:Measure rdf:about="&om;_7.4570e2Watt"> + <om:hasNumericalValue>7.4570e2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;watt"/> + </om:Measure> + + <om:Measure rdf:about="&om;_7.46e2Watt"> + <om:hasNumericalValue>7.46e2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;watt"/> + </om:Measure> + + <om:Measure rdf:about="&om;_7.46043e2Watt"> + <om:hasNumericalValue>7.46043e2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;watt"/> + </om:Measure> + + <om:Measure rdf:about="&om;_9.80950e3Watt"> + <om:hasNumericalValue>9.80950e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;watt"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Power"> + <om:commonlyHasUnit rdf:resource="&om;horsepower-Boiler"/> + <om:commonlyHasUnit rdf:resource="&om;horsepower-British"/> + <om:commonlyHasUnit rdf:resource="&om;horsepower-Electric"/> + <om:commonlyHasUnit rdf:resource="&om;horsepower-Metric"/> + <om:commonlyHasUnit rdf:resource="&om;horsepower-Water"/> + <om:commonlyHasUnit rdf:resource="&om;tonOfRefrigeration"/> + </owl:Class> + + <!-- Joule Per Gram Multiples and Submultiples Ontology --> + + <om:UnitDivision rdf:about="&om;joulePerKilogram"> + <rdfs:label xml:lang="en">joule per kilogram</rdfs:label> + <rdfs:label xml:lang="nl">joule per kilogram</rdfs:label> + <rdfs:label xml:lang="zh">焦耳每千克</rdfs:label> + <om:symbol>J/kg</om:symbol> + <om:alternativeSymbol>J kg-1</om:alternativeSymbol> + <om:alternativeSymbol>J·kg-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;joule"/> + <om:hasDenominator rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;kilocalorie-MeanPerHectogram"> + <rdfs:label xml:lang="en">kilocalorie (mean) per hectogram</rdfs:label> + <om:alternativeLabel xml:lang="en">kilocalorie per 100 gram</om:alternativeLabel> + <om:symbol>kcal/hg</om:symbol> + <om:alternativeSymbol>kcal/100 g</om:alternativeSymbol> + <om:alternativeSymbol>kcal hg-1</om:alternativeSymbol> + <om:alternativeSymbol>kcal·hg-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilocalorie-Mean"/> + <om:hasDenominator rdf:resource="&om;hectogram"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;kilojoulePerHectogram"> + <rdfs:label xml:lang="en">kilojoule per hectogram</rdfs:label> + <rdfs:label xml:lang="nl">kilojoule per hectogram</rdfs:label> + <om:alternativeLabel xml:lang="en">kilojoule per 100 gram</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">kilojoule per 100 gram</om:alternativeLabel> + <om:symbol>kJ/hg</om:symbol> + <om:alternativeSymbol>kJ/100 g</om:alternativeSymbol> + <om:alternativeSymbol>kJ hg-1</om:alternativeSymbol> + <om:alternativeSymbol>kJ·hg-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilojoule"/> + <om:hasDenominator rdf:resource="&om;hectogram"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;SpecificEnergy"> + <om:commonlyHasUnit rdf:resource="&om;joulePerKilogram"/> + <om:commonlyHasUnit rdf:resource="&om;kilocalorie-MeanPerHectogram"/> + <om:commonlyHasUnit rdf:resource="&om;kilojoulePerHectogram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificEnergyUnit"> + <rdfs:label xml:lang="en">specific energy unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;joulePerKilogram"/> + <om:UnitDivision rdf:about="&om;kilocalorie-MeanPerHectogram"/> + <om:UnitDivision rdf:about="&om;kilojoulePerHectogram"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificEnergy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;SpecificEnergyUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Radian Per Second Ontology --> + + <om:UnitDivision rdf:about="&om;radianPerSecond-Time"> + <rdfs:label xml:lang="en">radian per second</rdfs:label> + <rdfs:label xml:lang="nl">radiaal per seconde</rdfs:label> + <om:symbol>rad/s</om:symbol> + <om:alternativeSymbol>rad s-1</om:alternativeSymbol> + <om:alternativeSymbol>rad·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;radian"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;angularSpeed-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;AngularSpeed"> + <om:commonlyHasUnit rdf:resource="&om;radianPerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;AngularVelocity"> + <om:commonlyHasUnit rdf:resource="&om;radianPerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;AngularSpeedUnit"> + <rdfs:label xml:lang="en">angular speed unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;millisecond-AnglePerYear"/> + <om:UnitDivision rdf:about="&om;radianPerSecond-Time"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AngularSpeed"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;AngularSpeedUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Angular Speed Unit Ontology --> + + <om:UnitDivision rdf:about="&om;millisecond-AnglePerYear"> + <rdfs:label xml:lang="en">millisecond (angle) per year</rdfs:label> + <rdfs:label xml:lang="nl">milliseconde (hoek) per jaar</rdfs:label> + <rdfs:comment xml:lang="nl">Wordt gebruikt om de waargenomen verandering van de positie van sterren uit te drukken (de proper motion).</rdfs:comment> + <om:symbol>mas/yr</om:symbol> + <om:hasNumerator rdf:resource="&om;millisecond-Angle"/> + <om:hasDenominator rdf:resource="&om;year"/> + <om:hasDimension rdf:resource="&om;angularSpeed-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;AngularSpeed"> + <om:commonlyHasUnit rdf:resource="&om;millisecond-AnglePerYear"/> + </owl:Class> + + <!-- Radian Per Second Squared Ontology --> + + <om:UnitDivision rdf:about="&om;radianPerSecond-TimeSquared"> + <rdfs:label xml:lang="en">radian per second squared</rdfs:label> + <rdfs:label xml:lang="nl">radiaal per seconde kwadraat</rdfs:label> + <om:symbol>rad/s2</om:symbol> + <om:alternativeSymbol>rad s-2</om:alternativeSymbol> + <om:alternativeSymbol>rad·s-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;radian"/> + <om:hasDenominator rdf:resource="&om;second-TimeSquared"/> + <om:hasDimension rdf:resource="&om;angularAcceleration-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;AngularAcceleration"> + <om:commonlyHasUnit rdf:resource="&om;radianPerSecond-TimeSquared"/> + </owl:Class> + + <owl:Class rdf:about="&om;AngularAccelerationUnit"> + <rdfs:label xml:lang="en">angular acceleration unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;radianPerSecond-TimeSquared"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AngularAcceleration"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;AngularAccelerationUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Pascal Second Ontology --> + + <om:UnitMultiplication rdf:about="&om;pascalSecond-Time"> + <rdfs:label xml:lang="en">pascal second</rdfs:label> + <rdfs:label xml:lang="nl">pascal seconde</rdfs:label> + <om:symbol>Pa s</om:symbol> + <om:alternativeSymbol>Pa·s</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;pascal"/> + <hasTerm2 rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;dynamicViscosity-Dimension"/> + </om:UnitMultiplication> + + <owl:Class rdf:about="&om;DynamicViscosity"> + <om:commonlyHasUnit rdf:resource="&om;pascalSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicViscosityUnit"> + <rdfs:label xml:lang="en">dynamic viscosity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;poise"/> + <om:UnitMultiplication rdf:about="&om;pascalSecond-Time"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedPoise"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicViscosity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;DynamicViscosityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Poise Ontology --> + + <om:Unit rdf:about="&om;poise"> + <rdfs:label xml:lang="en">poise</rdfs:label> + <rdfs:label xml:lang="nl">poise</rdfs:label> + <rdfs:comment xml:lang="en">The poise is a unit of dynamic viscosity defined as 1.0e-1 pascal second (time).</rdfs:comment> + <om:symbol>P</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.10</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;pascalSecond-Time"/> + <om:hasDimension rdf:resource="&om;dynamicViscosity-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e-1PascalSecond-Time"> + <om:hasNumericalValue>1.0e-1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;pascalSecond-Time"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;DynamicViscosity"> + <om:commonlyHasUnit rdf:resource="&om;poise"/> + </owl:Class> + + <!-- Poise Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;centipoise"> + <rdfs:label xml:lang="en">centipoise</rdfs:label> + <rdfs:label xml:lang="nl">centipoise</rdfs:label> + <om:symbol>cP</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;poise"/> + <om:hasDimension rdf:resource="&om;dynamicViscosity-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedPoise"> + <rdfs:label xml:lang="en">prefixed poise</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;poise"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicViscosity"> + <om:commonlyHasUnit rdf:resource="&om;centipoise"/> + </owl:Class> + + <!-- Square Metre Per Second Ontology --> + + <om:UnitDivision rdf:about="&om;squareMetrePerSecond-Time"> + <rdfs:label xml:lang="en">square metre per second</rdfs:label> + <rdfs:label xml:lang="nl">vierkante meter per seconde</rdfs:label> + <om:symbol>m2/s</om:symbol> + <om:alternativeSymbol>m2 s-1</om:alternativeSymbol> + <om:alternativeSymbol>m2·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;squareMetre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;kinematicViscosityOrThermalDiffusivity-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;KinematicViscosity"> + <om:commonlyHasUnit rdf:resource="&om;squareMetrePerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;KinematicViscosityUnit"> + <rdfs:label xml:lang="en">kinematic viscosity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;stokes"/> + <om:UnitDivision rdf:about="&om;squareMetrePerSecond-Time"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedStokes"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;KinematicViscosity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;KinematicViscosityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Stokes Ontology --> + + <om:Unit rdf:about="&om;stokes"> + <rdfs:label xml:lang="en">stokes</rdfs:label> + <rdfs:label xml:lang="nl">stokes</rdfs:label> + <rdfs:comment xml:lang="en">The stokes is a unit of kinematic viscosity defined as 1.0e-4 square metre per second (time).</rdfs:comment> + <om:symbol>St</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.00010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;squareMetrePerSecond-Time"/> + <om:hasDimension rdf:resource="&om;kinematicViscosityOrThermalDiffusivity-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e-4SquareMetrePerSecond-Time"> + <om:hasNumericalValue>1.0e-4</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;squareMetrePerSecond-Time"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;KinematicViscosity"> + <om:commonlyHasUnit rdf:resource="&om;stokes"/> + </owl:Class> + + <!-- Stokes Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;centistokes"> + <rdfs:label xml:lang="en">centistokes</rdfs:label> + <rdfs:label xml:lang="nl">centistokes</rdfs:label> + <om:symbol>cSt</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;stokes"/> + <om:hasDimension rdf:resource="&om;kinematicViscosityOrThermalDiffusivity-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedStokes"> + <rdfs:label xml:lang="en">prefixed stokes</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;stokes"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;KinematicViscosity"> + <om:commonlyHasUnit rdf:resource="&om;centistokes"/> + </owl:Class> + + <!-- Watt Per Square Metre Ontology --> + + <om:UnitDivision rdf:about="&om;wattPerSquareMetre"> + <rdfs:label xml:lang="en">watt per square metre</rdfs:label> + <rdfs:label xml:lang="nl">watt per vierkante meter</rdfs:label> + <om:symbol>W/m2</om:symbol> + <om:alternativeSymbol>W m-2</om:alternativeSymbol> + <om:alternativeSymbol>W·m-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;watt"/> + <om:hasDenominator rdf:resource="&om;squareMetre"/> + <om:hasDimension rdf:resource="&om;powerDensity-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;PowerDensity"> + <om:commonlyHasUnit rdf:resource="&om;wattPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Irradiance"> + <om:commonlyHasUnit rdf:resource="&om;wattPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;PowerDensityUnit"> + <rdfs:label xml:lang="en">power density unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;wattPerSquareMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;PowerDensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;PowerDensityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Watt Per Steradian Ontology --> + + <om:UnitDivision rdf:about="&om;wattPerSteradian"> + <rdfs:label xml:lang="en">watt per steradian</rdfs:label> + <rdfs:label xml:lang="nl">watt per steradiaal</rdfs:label> + <om:symbol>W/sr</om:symbol> + <om:alternativeSymbol>W sr-1</om:alternativeSymbol> + <om:alternativeSymbol>W·sr-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;watt"/> + <om:hasDenominator rdf:resource="&om;steradian"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;RadiantIntensity"> + <om:commonlyHasUnit rdf:resource="&om;wattPerSteradian"/> + </owl:Class> + + <owl:Class rdf:about="&om;RadiantIntensityUnit"> + <rdfs:label xml:lang="en">radiant intensity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;wattPerSteradian"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;RadiantIntensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;RadiantIntensityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Watt Per Square Metre Steradian Ontology --> + + <om:UnitDivision rdf:about="&om;wattPerSquareMetreSteradian"> + <rdfs:label xml:lang="en">watt per square metre steradian</rdfs:label> + <rdfs:label xml:lang="nl">watt per vierkante meter steradiaal</rdfs:label> + <om:symbol>W/(m2 sr)</om:symbol> + <om:alternativeSymbol>W/(m2·sr)</om:alternativeSymbol> + <om:alternativeSymbol>W m-2 sr-1</om:alternativeSymbol> + <om:alternativeSymbol>W·m-2·sr-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;watt"/> + <om:hasDenominator rdf:resource="&om;squareMetreSteradian"/> + <om:hasDimension rdf:resource="&om;radiance-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Radiance"> + <om:commonlyHasUnit rdf:resource="&om;wattPerSquareMetreSteradian"/> + </owl:Class> + + <owl:Class rdf:about="&om;RadianceUnit"> + <rdfs:label xml:lang="en">radiance unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;wattPerSquareMetreSteradian"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Radiance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;RadianceUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Joule Per Cubic Metre Ontology --> + + <om:UnitDivision rdf:about="&om;joulePerCubicmetre"> + <rdfs:label xml:lang="en">joule per cubic metre</rdfs:label> + <rdfs:label xml:lang="nl">joule per kubieke meter</rdfs:label> + <om:symbol>J/m3</om:symbol> + <om:alternativeSymbol>J m-3</om:alternativeSymbol> + <om:alternativeSymbol>J·m-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;joule"/> + <om:hasDenominator rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;energyDensity-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;EnergyDensity"> + <om:commonlyHasUnit rdf:resource="&om;joulePerCubicmetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;EnergyDensityUnit"> + <rdfs:label xml:lang="en">energy density unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;joulePerCubicmetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;EnergyDensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;EnergyDensityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Joule Second Ontology --> + + <om:UnitMultiplication rdf:about="&om;jouleSecond-Time"> + <rdfs:label xml:lang="en">joule second</rdfs:label> + <rdfs:label xml:lang="nl">joule seconde</rdfs:label> + <om:symbol>J s</om:symbol> + <om:alternativeSymbol>J·s</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;joule"/> + <hasTerm2 rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;actionOrAngularMomentum-Dimension"/> + </om:UnitMultiplication> + + <owl:Class rdf:about="&om;Action"> + <om:commonlyHasUnit rdf:resource="&om;jouleSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;AngularMomentum"> + <om:commonlyHasUnit rdf:resource="&om;jouleSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;ActionUnit"> + <rdfs:label xml:lang="en">action unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitMultiplication rdf:about="&om;ergSecond-Time"/> + <om:UnitMultiplication rdf:about="&om;jouleSecond-Time"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AngularMomentumUnit"> + <rdfs:label xml:lang="en">angular momentum unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitMultiplication rdf:about="&om;ergSecond-Time"/> + <om:UnitMultiplication rdf:about="&om;jouleSecond-Time"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Action"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ActionUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;AngularMomentum"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;AngularMomentumUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Action Unit Ontology --> + + <om:UnitMultiplication rdf:about="&om;ergSecond-Time"> + <rdfs:label xml:lang="en">erg second</rdfs:label> + <rdfs:label xml:lang="nl">erg seconde</rdfs:label> + <om:symbol>erg s</om:symbol> + <om:alternativeSymbol>erg·s</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;erg"/> + <hasTerm2 rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;actionOrAngularMomentum-Dimension"/> + </om:UnitMultiplication> + + <owl:Class rdf:about="&om;Action"> + <om:commonlyHasUnit rdf:resource="&om;ergSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;AngularMomentum"> + <om:commonlyHasUnit rdf:resource="&om;ergSecond-Time"/> + </owl:Class> + + <!-- Reciprocal Pascal Second Ontology --> + + <om:UnitExponentiation rdf:about="&om;reciprocalPascalSecond-Time"> + <rdfs:label xml:lang="en">reciprocal pascal second</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde pascal seconde</rdfs:label> + <om:symbol>Pa-1 s-1</om:symbol> + <om:alternativeSymbol>Pa-1·s-1</om:alternativeSymbol> + <om:alternativeSymbol>(Pa s)-1</om:alternativeSymbol> + <om:alternativeSymbol>(Pa·s)-1</om:alternativeSymbol> + <om:hasBase rdf:resource="&om;pascalSecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">-1</om:hasExponent> + <om:hasDimension rdf:resource="&om;fluidity-Dimension"/> + </om:UnitExponentiation> + + <owl:Class rdf:about="&om;Fluidity"> + <om:commonlyHasUnit rdf:resource="&om;reciprocalPascalSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;FluidityUnit"> + <rdfs:label xml:lang="en">fluidity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;rhe"/> + <om:UnitExponentiation rdf:about="&om;reciprocalPascalSecond-Time"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Fluidity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;FluidityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Fluidity Unit Ontology --> + + <om:Unit rdf:about="&om;rhe"> + <rdfs:label xml:lang="en">rhe</rdfs:label> + <rdfs:label xml:lang="nl">rhe</rdfs:label> + <rdfs:comment xml:lang="en">The rhe is a unit of fluidity defined as 10 reciprocal pascal second (time).</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">10</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;reciprocalPascalSecond-Time"/> + <om:hasDimension rdf:resource="&om;fluidity-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e1ReciprocalPascalSecond-Time"> + <om:hasNumericalValue>1.0e1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;reciprocalPascalSecond-Time"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Fluidity"> + <om:commonlyHasUnit rdf:resource="&om;rhe"/> + </owl:Class> + + <!-- Gram Per Gram Ontology --> + + <om:UnitDivision rdf:about="&om;gramPerGram"> + <rdfs:label xml:lang="en">gram per gram</rdfs:label> + <rdfs:label xml:lang="nl">gram per gram</rdfs:label> + <om:symbol>g/g</om:symbol> + <om:alternativeSymbol>g g-1</om:alternativeSymbol> + <om:alternativeSymbol>g·g-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;gram"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitDivision> + + <!-- <om:Measure rdf:about="&om;_0.001-One"> + <om:hasNumericalValue>0.001</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;one"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;MassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <!-- Gram Per Gram Multiples and Submultiples Ontology --> + + <om:UnitDivision rdf:about="&om;gramPerKilogram"> + <rdfs:label xml:lang="en">gram per kilogram</rdfs:label> + <rdfs:label xml:lang="nl">gram per kilogram</rdfs:label> + <om:symbol>g/kg</om:symbol> + <om:alternativeSymbol>g kg-1</om:alternativeSymbol> + <om:alternativeSymbol>g·kg-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;kilogram"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.001</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;one"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;gramPerHectogram"> + <rdfs:label xml:lang="en">gram per hectogram</rdfs:label> + <rdfs:label xml:lang="nl">gram per hectogram</rdfs:label> + <om:alternativeLabel xml:lang="en">gram per 100 gram</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">gram per 100 gram</om:alternativeLabel> + <om:symbol>g/hg</om:symbol> + <om:alternativeSymbol>g/100 g</om:alternativeSymbol> + <om:alternativeSymbol>g hg-1</om:alternativeSymbol> + <om:alternativeSymbol>g·hg-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;hectogram"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;kilogramPerKilogram"> + <rdfs:label xml:lang="en">kilogram per kilogram</rdfs:label> + <rdfs:label xml:lang="nl">kilogram per kilogram</rdfs:label> + <om:symbol>kg/kg</om:symbol> + <om:alternativeSymbol>kg kg-1</om:alternativeSymbol> + <om:alternativeSymbol>kg·kg-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilogram"/> + <om:hasDenominator rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;milligramPerKilogram"> + <rdfs:label xml:lang="en">milligram per kilogram</rdfs:label> + <rdfs:label xml:lang="nl">milligram per kilogram</rdfs:label> + <om:symbol>mg/kg</om:symbol> + <om:alternativeSymbol>mg kg-1</om:alternativeSymbol> + <om:alternativeSymbol>mg·kg-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;milligram"/> + <om:hasDenominator rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;milligramPerHectogram"> + <rdfs:label xml:lang="en">milligram per hectogram</rdfs:label> + <rdfs:label xml:lang="nl">milligram per hectogram</rdfs:label> + <om:alternativeLabel xml:lang="en">milligram per 100 gram</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">milligram per 100 gram</om:alternativeLabel> + <om:symbol>mg/hg</om:symbol> + <om:alternativeSymbol>mg/100 g</om:alternativeSymbol> + <om:alternativeSymbol>mg hg-1</om:alternativeSymbol> + <om:alternativeSymbol>mg·hg-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;milligram"/> + <om:hasDenominator rdf:resource="&om;hectogram"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;microgramPerHectogram"> + <rdfs:label xml:lang="en">microgram per hectogram</rdfs:label> + <rdfs:label xml:lang="nl">microgram per hectogram</rdfs:label> + <om:alternativeLabel xml:lang="en">microgram per 100 gram</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">microgram per 100 gram</om:alternativeLabel> + <om:symbol>μg/hg</om:symbol> + <om:alternativeSymbol>μg/100 g</om:alternativeSymbol> + <om:alternativeSymbol>μg hg-1</om:alternativeSymbol> + <om:alternativeSymbol>μg·hg-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;microgram"/> + <om:hasDenominator rdf:resource="&om;hectogram"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;MassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerKilogram"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerHectogram"/> + <om:commonlyHasUnit rdf:resource="&om;kilogramPerKilogram"/> + <om:commonlyHasUnit rdf:resource="&om;milligramPerHectogram"/> + <om:commonlyHasUnit rdf:resource="&om;milligramPerKilogram"/> + <om:commonlyHasUnit rdf:resource="&om;microgramPerHectogram"/> + </owl:Class> + + <!-- Metre Kilogram Per Second Ontology --> + + <om:UnitDivision rdf:about="&om;metreKilogramPerSecond-Time"> + <rdfs:label xml:lang="en">metre kilogram per second</rdfs:label> + <rdfs:label xml:lang="nl">meter kilogram per seconde</rdfs:label> + <om:symbol>m kg/s</om:symbol> + <om:alternativeSymbol>m·kg/s</om:alternativeSymbol> + <om:alternativeSymbol>m kg s-1</om:alternativeSymbol> + <om:alternativeSymbol>m·kg·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metreKilogram"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Momentum"> + <om:commonlyHasUnit rdf:resource="&om;metreKilogramPerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;MomentumUnit"> + <rdfs:label xml:lang="en">momentum unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;metreKilogramPerSecond-Time"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Momentum"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MomentumUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Kilogram Square Metre Ontology --> + + <om:UnitMultiplication rdf:about="&om;kilogramSquareMetre"> + <rdfs:label xml:lang="en">kilogram square metre</rdfs:label> + <rdfs:label xml:lang="nl">kilogram vierkante meter</rdfs:label> + <om:symbol>kg m2</om:symbol> + <om:alternativeSymbol>kg·m2</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;kilogram"/> + <hasTerm2 rdf:resource="&om;squareMetre"/> + </om:UnitMultiplication> + + <owl:Class rdf:about="&om;MomentOfInertia"> + <om:commonlyHasUnit rdf:resource="&om;kilogramSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;MomentOfInertiaUnit"> + <rdfs:label xml:lang="en">moment of inertia unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitMultiplication rdf:about="&om;kilogramSquareMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MomentOfInertia"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MomentOfInertiaUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Shear Rate Unit Ontology --> + + <owl:Class rdf:about="&om;ShearRate"> + <om:commonlyHasUnit rdf:resource="&om;reciprocalSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearRateUnit"> + <rdfs:label xml:lang="en">shear rate unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitExponentiation rdf:about="&om;reciprocalSecond-Time"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ShearRate"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ShearRateUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Newton Per Metre Ontology --> + + <om:UnitDivision rdf:about="&om;newtonPerMetre"> + <rdfs:label xml:lang="en">newton per metre</rdfs:label> + <rdfs:label xml:lang="nl">newton per meter</rdfs:label> + <om:symbol>N/m</om:symbol> + <om:alternativeSymbol>N m-1</om:alternativeSymbol> + <om:alternativeSymbol>N·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;newton"/> + <om:hasDenominator rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;surfaceTension-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;SurfaceTension"> + <om:commonlyHasUnit rdf:resource="&om;newtonPerMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;SurfaceTensionUnit"> + <rdfs:label xml:lang="en">surface tension unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;newtonPerMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;SurfaceTension"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;SurfaceTensionUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Cubic Metre Per Second Ontology --> + + <om:UnitDivision rdf:about="&om;cubicMetrePerSecond-Time"> + <rdfs:label xml:lang="en">cubic metre per second</rdfs:label> + <rdfs:label xml:lang="nl">kubieke meter per seconde</rdfs:label> + <om:symbol>m3/s</om:symbol> + <om:alternativeSymbol>m3 s-1</om:alternativeSymbol> + <om:alternativeSymbol>m3·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;cubicMetre"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;volumetricFlowRate-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;VolumetricFlowRate"> + <om:commonlyHasUnit rdf:resource="&om;cubicMetrePerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricFlowRateUnit"> + <rdfs:label xml:lang="en">volumetric flow rate unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;cubicMetrePerSecond-Time"/> + <om:UnitDivision rdf:about="&om;cubicMetrePerYear"/> + <om:UnitDivision rdf:about="&om;litrePerHour"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricFlowRate"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;VolumetricFlowRateUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Cubic Metre Per Year Ontology --> + + <om:UnitDivision rdf:about="&om;cubicMetrePerYear"> + <rdfs:label xml:lang="en">cubic metre per year</rdfs:label> + <rdfs:label xml:lang="nl">kubieke meter per jaar</rdfs:label> + <om:hasNumerator rdf:resource="&om;cubicMetre"/> + <om:hasDenominator rdf:resource="&om;year"/> + <om:hasDimension rdf:resource="&om;volumetricFlowRate-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;VolumetricFlowRate"> + <om:commonlyHasUnit rdf:resource="&om;cubicMetrePerYear"/> + </owl:Class> + + <!-- Litre Per Hour Ontology --> + + <om:UnitDivision rdf:about="&om;litrePerHour"> + <rdfs:label xml:lang="en">litre per hour</rdfs:label> + <rdfs:label xml:lang="nl">liter per uur</rdfs:label> + <om:symbol>l/h</om:symbol> + <om:alternativeSymbol>l h-1</om:alternativeSymbol> + <om:alternativeSymbol>l·h-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;litre"/> + <om:hasDenominator rdf:resource="&om;hour"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;VolumetricFlowRate"> + <om:commonlyHasUnit rdf:resource="&om;litrePerHour"/> + </owl:Class> + + <!-- Cubic Metre Per Cubic Metre Ontology --> + + <om:UnitDivision rdf:about="&om;cubicMetrePerCubicmetre"> + <rdfs:label xml:lang="en">cubic metre per cubic metre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke meter per kubieke meter</rdfs:label> + <om:symbol>m3/m3</om:symbol> + <om:alternativeSymbol>m3 m-3</om:alternativeSymbol> + <om:alternativeSymbol>m3·m-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;cubicMetre"/> + <om:hasDenominator rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;VolumeFraction"> + <om:commonlyHasUnit rdf:resource="&om;cubicMetrePerCubicmetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Overrun"> + <om:commonlyHasUnit rdf:resource="&om;cubicMetrePerCubicmetre"/> + </owl:Class> + + <!-- Cubic Millimetre Per Cubic Millimetre Ontology --> + + <om:UnitDivision rdf:about="&om;cubicMillimetrePerCubicMillimetre"> + <rdfs:label xml:lang="en">cubic millimetre per cubic millimetre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke millimeter per kubieke millimeter</rdfs:label> + <om:symbol>mm3/mm3</om:symbol> + <om:alternativeSymbol>mm3 mm-3</om:alternativeSymbol> + <om:alternativeSymbol>mm3·mm-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;cubicMillimetre"/> + <om:hasDenominator rdf:resource="&om;cubicMillimetre"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;VolumeFraction"> + <om:commonlyHasUnit rdf:resource="&om;cubicMillimetrePerCubicMillimetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Overrun"> + <om:commonlyHasUnit rdf:resource="&om;cubicMillimetrePerCubicMillimetre"/> + </owl:Class> + + <!-- Cubic Centimetre Per Cubic Centimetre Ontology --> + + <om:UnitDivision rdf:about="&om;cubicCentimetrePerCubicCentimetre"> + <rdfs:label xml:lang="en">cubic centimetre per cubic centimetre</rdfs:label> + <rdfs:label xml:lang="nl">kubieke centimeter per kubieke centimeter</rdfs:label> + <om:symbol>cm3/cm3</om:symbol> + <om:alternativeSymbol>cm3 cm-3</om:alternativeSymbol> + <om:alternativeSymbol>cm3·cm-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;cubicCentimetre"/> + <om:hasDenominator rdf:resource="&om;cubicCentimetre"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;VolumeFraction"> + <om:commonlyHasUnit rdf:resource="&om;cubicCentimetrePerCubicCentimetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Overrun"> + <om:commonlyHasUnit rdf:resource="&om;cubicCentimetrePerCubicCentimetre"/> + </owl:Class> + + <!-- Reciprocal Watt Ontology --> + + <om:UnitExponentiation rdf:about="&om;reciprocalWatt"> + <rdfs:label xml:lang="en">reciprocal watt</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde watt</rdfs:label> + <om:symbol>W-1</om:symbol> + <om:hasBase rdf:resource="&om;watt"/> + <om:hasExponent rdf:datatype="&xsd;integer">-1</om:hasExponent> + </om:UnitExponentiation> + + <owl:Class rdf:about="&om;Detectivity"> + <om:commonlyHasUnit rdf:resource="&om;reciprocalWatt"/> + </owl:Class> + + <owl:Class rdf:about="&om;DetectivityUnit"> + <rdfs:label xml:lang="en">detectivity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitExponentiation rdf:about="&om;reciprocalWatt"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Detectivity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;DetectivityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Kilogram Per Second Ontology --> + + <om:UnitDivision rdf:about="&om;kilogramPerSecond-Time"> + <rdfs:label xml:lang="en">kilogram per second</rdfs:label> + <rdfs:label xml:lang="nl">kilogram per seconde</rdfs:label> + <om:symbol>kg/s</om:symbol> + <om:alternativeSymbol>kg s-1</om:alternativeSymbol> + <om:alternativeSymbol>kg·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilogram"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;massFlow-Dimension"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;gramPerDay"> + <rdfs:label xml:lang="en">gram per day</rdfs:label> + <rdfs:label xml:lang="nl">gram per dag</rdfs:label> + <om:symbol>g/d</om:symbol> + <om:alternativeSymbol>g d-1</om:alternativeSymbol> + <om:alternativeSymbol>g·d-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;day"/> + <om:hasDimension rdf:resource="&om;massFlow-Dimension"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;milligramPerDay"> + <rdfs:label xml:lang="en">milligram per day</rdfs:label> + <rdfs:label xml:lang="nl">milligram per dag</rdfs:label> + <om:symbol>mg/d</om:symbol> + <om:alternativeSymbol>mg d-1</om:alternativeSymbol> + <om:alternativeSymbol>mg·d-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;milligram"/> + <om:hasDenominator rdf:resource="&om;day"/> + <om:hasDimension rdf:resource="&om;massFlow-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;MassFlow"> + <om:commonlyHasUnit rdf:resource="&om;kilogramPerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;MassFlowUnit"> + <rdfs:label xml:lang="en">mass flow unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;gramPerDay"/> + <om:UnitDivision rdf:about="&om;kilogramPerSecond-Time"/> + <om:UnitDivision rdf:about="&om;milligramPerDay"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MassFlow"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MassFlowUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Metre Gram Ontology --> + + <om:UnitMultiplication rdf:about="&om;metreKilogram"> + <rdfs:label xml:lang="en">metre kilogram</rdfs:label> + <rdfs:label xml:lang="nl">meter kilogram</rdfs:label> + <om:symbol>m kg</om:symbol> + <om:alternativeSymbol>m·kg</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;metre"/> + <hasTerm2 rdf:resource="&om;kilogram"/> + </om:UnitMultiplication> + + <owl:Class rdf:about="&om;PrefixedMetrePrefixedGram"> + <rdfs:label xml:lang="en">prefixed metre prefixed gram</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitMultiplication"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasTerm1"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedMetre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasTerm1"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasTerm2"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedGram"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasTerm2"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <!-- Reciprocal Gram Ontology --> + + <om:UnitExponentiation rdf:about="&om;reciprocalGram"> + <rdfs:label xml:lang="en">reciprocal gram</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde gram</rdfs:label> + <om:symbol>g-1</om:symbol> + <om:hasBase rdf:resource="&om;gram"/> + <om:hasExponent rdf:datatype="&xsd;integer">-1</om:hasExponent> + </om:UnitExponentiation> + + <!-- Gram Second To the Power -2 Ontology --> + + <om:UnitMultiplication rdf:about="&om;kilogramSecond-TimeToThePower-2"> + <rdfs:label xml:lang="en">kilogram second to the power -2</rdfs:label> + <rdfs:label xml:lang="nl">kilogram seconde tot de macht -2</rdfs:label> + <om:symbol>kg s-2</om:symbol> + <om:alternativeSymbol>kg·s-2</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;kilogram"/> + <hasTerm2 rdf:resource="&om;second-TimeToThePower-2"/> + </om:UnitMultiplication> + + <!-- Mass Per Energy Unit Ontology --> + + <om:UnitDivision rdf:about="&om;gramPerJoule"> + <rdfs:label xml:lang="en">gram per joule</rdfs:label> + <rdfs:label xml:lang="nl">gram per joule</rdfs:label> + <rdfs:comment xml:lang="en">Gram per joule is a unit of mass per energy.</rdfs:comment> + <om:longcomment xml:lang="en">Gram per joule is a unit of mass per energy defined as gram divided by joule. Gram per joule is a derived unit in the International System of Units.</om:longcomment> + <om:symbol>g/J</om:symbol> + <om:alternativeSymbol>g J-1</om:alternativeSymbol> + <om:alternativeSymbol>g·J-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;joule"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;kilogramPerGigajoule"> + <rdfs:label xml:lang="en">kilogram per gigajoule</rdfs:label> + <rdfs:label xml:lang="nl">kilogram per gigajoule</rdfs:label> + <rdfs:comment xml:lang="en">Kilogram per gigajoule is a unit of mass per energy.</rdfs:comment> + <om:longcomment xml:lang="en">Kilogram per gigajoule is a unit of mass per energy defined as kilogram divided by gigajoule. Kilogram per gigajoule is a derived unit in the International System of Units.</om:longcomment> + <om:symbol>kg/GJ</om:symbol> + <om:alternativeSymbol>kg GJ-1</om:alternativeSymbol> + <om:alternativeSymbol>kg·GJ-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilogram"/> + <om:hasDenominator rdf:resource="&om;gigajoule"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;microgramPerJoule"> + <rdfs:label xml:lang="en">microgram per joule</rdfs:label> + <rdfs:label xml:lang="nl">microgram per joule</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Microgram per joule is a unit of mass per energy.</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Microgram per joule is a unit of mass per energy defined as microgram divided by joule. Microgram per joule is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>μg/J</om:symbol> + <om:alternativeSymbol>μg J-1</om:alternativeSymbol> + <om:alternativeSymbol>μg·J-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;microgram"/> + <om:hasDenominator rdf:resource="&om;joule"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;MassPerEnergyUnit"> + <rdfs:label xml:lang="en">mass per energy unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;gramPerJoule"/> + <om:UnitDivision rdf:about="&om;kilogramPerGigaJoule"/> + <om:UnitDivision rdf:about="&om;microgramPerJoule"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MassPerEnergy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MassPerEnergyUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Gram Per Metre Ontology --> + + <om:UnitDivision rdf:about="&om;gramPerMetre"> + <rdfs:label xml:lang="en">gram per metre</rdfs:label> + <rdfs:label xml:lang="nl">gram per meter</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Gram per metre is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Gram per metre is a unit of defined as gram divided by metre. Gram per metre is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>g/m</om:symbol> + <om:alternativeSymbol>g m-1</om:alternativeSymbol> + <om:alternativeSymbol>g·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:UnitDivision> + + <!-- Milligram Per Kilometre Ontology --> + + <om:UnitDivision rdf:about="&om;milligramPerKilometre"> + <rdfs:label xml:lang="en">milligram per kilometre</rdfs:label> + <rdfs:label xml:lang="nl">milligram per kilometer</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Milligram per kilometre is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Milligram per kilometre is a unit of defined as milligram divided by kilometre. Milligram per kilometre is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>mg/km</om:symbol> + <om:alternativeSymbol>mg km-1</om:alternativeSymbol> + <om:alternativeSymbol>mg·km-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;milligram"/> + <om:hasDenominator rdf:resource="&om;kilometre"/> + </om:UnitDivision> + + <!-- Gram Per Square Metre Ontology --> + + <om:UnitDivision rdf:about="&om;gramPerSquareMetre"> + <rdfs:label xml:lang="en">gram per square metre</rdfs:label> + <rdfs:label xml:lang="nl">gram per vierkante meter</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Gram per square metre is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Gram per square metre is a unit of defined as gram divided by square metre. Gram per square metre is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>g/m2</om:symbol> + <om:alternativeSymbol>g m-2</om:alternativeSymbol> + <om:alternativeSymbol>g·m-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;squareMetre"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;AreaDensity"> + <om:commonlyHasUnit rdf:resource="&om;gramPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;AreaDensityUnit"> + <rdfs:label xml:lang="en">area density unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;gramPerSquareMetre"/> + <om:UnitDivision rdf:about="&om;kilogramPerSquareMetre"/> + <om:UnitDivision rdf:about="&om;kilogramPerHectare"/> + <om:UnitDivision rdf:about="&om;ounceAvoirdupoisPerSquareYard-International"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AreaDensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;AreaDensityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Kilogram Per Square Metre Ontology --> + + <om:UnitDivision rdf:about="&om;kilogramPerSquareMetre"> + <rdfs:label xml:lang="en">kilogram per square metre</rdfs:label> + <rdfs:label xml:lang="nl">kilogram per vierkante meter</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Kilogram per square metre is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Kilogram per square metre is a unit of defined as kilogram divided by square metre. Kilogram per square metre is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>kg/m2</om:symbol> + <om:alternativeSymbol>kg m-2</om:alternativeSymbol> + <om:alternativeSymbol>kg·m-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilogram"/> + <om:hasDenominator rdf:resource="&om;squareMetre"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;AreaDensity"> + <om:commonlyHasUnit rdf:resource="&om;kilogramPerSquareMetre"/> + </owl:Class> + + <!-- Kilogram Per Hectare Ontology --> + + <om:UnitDivision rdf:about="&om;kilogramPerHectare"> + <rdfs:label xml:lang="en">kilogram per hectare</rdfs:label> + <rdfs:label xml:lang="nl">kilogram per hectare</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Kilogram per hectare is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Kilogram per hectare is a unit of defined as kilogram divided by hectare. Kilogram per hectare is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>kg/ha</om:symbol> + <om:alternativeSymbol>kg ha-1</om:alternativeSymbol> + <om:alternativeSymbol>kg·ha-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilogram"/> + <om:hasDenominator rdf:resource="&om;hectare"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;AreaDensity"> + <om:commonlyHasUnit rdf:resource="&om;kilogramPerHectare"/> + </owl:Class> + + <!-- Area Density Unit Ontology --> + + <om:UnitDivision rdf:about="&om;ounceAvoirdupoisPerSquareYard-International"> + <rdfs:label xml:lang="en">ounce (avoirdupois) per square yard (international)</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Ounce (avoirdupois) per square yard (international) is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Ounce (avoirdupois) per square yard (international) is a unit of defined as ounce (avoirdupois) divided by square yard.</om:longcomment> --> + <om:symbol>oz/yd2</om:symbol> + <om:alternativeSymbol>oz yd-2</om:alternativeSymbol> + <om:alternativeSymbol>oz·yd-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;ounceAvoirdupois"/> + <om:hasDenominator rdf:resource="&om;squareYard-International"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;AreaDensity"> + <om:commonlyHasUnit rdf:resource="&om;ounceAvoirdupoisPerSquareYard-International"/> + </owl:Class> + + <!-- Hectare Day Ontology --> + + <om:UnitMultiplication rdf:about="&om;hectareDay"> + <rdfs:label xml:lang="en">hectare day</rdfs:label> + <rdfs:label xml:lang="nl">hectare dag</rdfs:label> +<!-- <rdfs:comment xml:lang="en">Hectare day is a unit of .</rdfs:comment> --> +<!-- <om:longcomment xml:lang="en">Hectare day is a unit of defined as hectare multiplied by day.</om:longcomment> --> + <om:symbol>ha d</om:symbol> + <om:alternativeSymbol>ha·d</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;hectare"/> + <hasTerm2 rdf:resource="&om;day"/> + </om:UnitMultiplication> + + <!-- Kilogram Per Hectare Day Ontology --> + + <om:UnitDivision rdf:about="&om;kilogramPerHectareDay"> + <rdfs:label xml:lang="en">kilogram per hectare day</rdfs:label> + <rdfs:label xml:lang="nl">kilogram per hectare dag</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Kilogram per hectare day is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Kilogram per hectare day is a unit of defined as kilogram divided by hectare day.</om:longcomment> --> + <om:symbol>kg/(ha d)</om:symbol> + <om:alternativeSymbol>kg ha-1 d-1</om:alternativeSymbol> + <om:alternativeSymbol>kg·ha-1·d-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilogram"/> + <om:hasDenominator rdf:resource="&om;hectareDay"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;AreaDensityRate"> + <om:commonlyHasUnit rdf:resource="&om;kilogramPerHectareDay"/> + </owl:Class> + + <owl:Class rdf:about="&om;AreaDensityRateUnit"> + <rdfs:label xml:lang="en">area density rate unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;kilogramPerHectareDay"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AreaDensityRate"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;AreaDensityRateUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Joule Per Square Metre Ontology --> + + <om:UnitDivision rdf:about="&om;joulePerSquareMetre"> + <rdfs:label xml:lang="en">joule per square metre</rdfs:label> + <rdfs:label xml:lang="nl">joule per vierkante meter</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Joule per square metre is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Joule per square metre is a unit of defined as joule divided by square metre. Joule per square metre is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>J/m2</om:symbol> + <om:alternativeSymbol>J m-2</om:alternativeSymbol> + <om:alternativeSymbol>J·m-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;joule"/> + <om:hasDenominator rdf:resource="&om;squareMetre"/> + </om:UnitDivision> + + <!-- Megajoule Per Square Metre Ontology --> + + <om:UnitDivision rdf:about="&om;megajoulePerSquareMetre"> + <rdfs:label xml:lang="en">megajoule per square metre</rdfs:label> + <rdfs:label xml:lang="nl">megajoule per vierkante meter</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Megajoule per square metre is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Megajoule per square metre is a unit of defined as megajoule divided by square metre. Megajoule per square metre is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>MJ/m2</om:symbol> + <om:alternativeSymbol>MJ m-2</om:alternativeSymbol> + <om:alternativeSymbol>MJ·m-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;megajoule"/> + <om:hasDenominator rdf:resource="&om;squareMetre"/> + </om:UnitDivision> + + <!-- Joule Per Square Metre Second Ontology --> + + <om:UnitDivision rdf:about="&om;joulePerSquareMetreSecond-Time"> + <rdfs:label xml:lang="en">joule per square metre second</rdfs:label> + <rdfs:label xml:lang="nl">joule per vierkante meter seconde</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Joule per square metre second is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Joule per square metre second is a unit of defined as joule divided by square metre second.</om:longcomment> --> + <om:symbol>J/(m2 s)</om:symbol> + <om:alternativeSymbol>J m-2 s-1</om:alternativeSymbol> + <om:alternativeSymbol>J·m-2·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;joule"/> + <om:hasDenominator rdf:resource="&om;squareMetreSecond-Time"/> + </om:UnitDivision> + + <!-- Joule Per Square Metre Day Ontology --> + + <om:UnitDivision rdf:about="&om;joulePerSquareMetreDay"> + <rdfs:label xml:lang="en">joule per square metre day</rdfs:label> + <rdfs:label xml:lang="nl">joule per vierkante meter dag</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Joule per square metre day is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Joule per square metre day is a unit of defined as joule divided by square metre day.</om:longcomment> --> + <om:symbol>J/(m2 d)</om:symbol> + <om:alternativeSymbol>J m-2 d-1</om:alternativeSymbol> + <om:alternativeSymbol>J·m-2·d-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;joule"/> + <om:hasDenominator rdf:resource="&om;squareMetreDay"/> + </om:UnitDivision> + + <!-- Kilojoule Per Square Metre Day Ontology --> + + <om:UnitDivision rdf:about="&om;kilojoulePerSquareMetreDay"> + <rdfs:label xml:lang="en">kilojoule per square metre day</rdfs:label> + <rdfs:label xml:lang="nl">kilojoule per vierkante meter dag</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Kilojoule per square metre day is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Kilojoule per square metre day is a unit of defined as kilojoule divided by square metre day.</om:longcomment> --> + <om:symbol>kJ/(m2 d)</om:symbol> + <om:alternativeSymbol>kJ m-2 d-1</om:alternativeSymbol> + <om:alternativeSymbol>kJ·m-2·d-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilojoule"/> + <om:hasDenominator rdf:resource="&om;squareMetreDay"/> + </om:UnitDivision> + + <!-- Megajoule Per Square Metre Day Ontology --> + + <om:UnitDivision rdf:about="&om;megajoulePerSquareMetreDay"> + <rdfs:label xml:lang="en">megajoule per square metre day</rdfs:label> + <rdfs:label xml:lang="nl">megajoule per vierkante meter dag</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Megajoule per square metre day is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Megajoule per square metre day is a unit of defined as megajoule divided by square metre day.</om:longcomment> --> + <om:symbol>MJ/(m2 d)</om:symbol> + <om:alternativeSymbol>MJ m-2 d-1</om:alternativeSymbol> + <om:alternativeSymbol>MJ·m-2·d-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;megajoule"/> + <om:hasDenominator rdf:resource="&om;squareMetreDay"/> + </om:UnitDivision> + + <!-- Gram Per Square Metre Second Ontology --> + + <om:UnitDivision rdf:about="&om;gramPerSquareMetreSecond-Time"> + <rdfs:label xml:lang="en">gram per square metre second</rdfs:label> + <rdfs:label xml:lang="nl">gram per vierkante meter seconde</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Gram per square metre second is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Gram per square metre second is a unit of defined as gram divided by square metre second. Gram per square metre second is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>g/(m2 s)</om:symbol> + <om:alternativeSymbol>g m-2 s-1</om:alternativeSymbol> + <om:alternativeSymbol>g·m-2·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;squareMetreSecond-Time"/> + </om:UnitDivision> + + <!-- Gram Per Square Metre Day Ontology --> + + <om:UnitDivision rdf:about="&om;gramPerSquareMetreDay"> + <rdfs:label xml:lang="en">gram per square metre day</rdfs:label> + <rdfs:label xml:lang="nl">gram per vierkante meter dag</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Gram per square metre day is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Gram per square metre day is a unit of defined as gram divided by square metre day.</om:longcomment> --> + <om:symbol>g/(m2 d)</om:symbol> + <om:alternativeSymbol>g m-2 d-1</om:alternativeSymbol> + <om:alternativeSymbol>g·m-2·d-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;squareMetreDay"/> + </om:UnitDivision> + + <!-- Microgram Per Square Metre Second Ontology --> + + <om:UnitDivision rdf:about="&om;microgramPerSquareMetreSecond-Time"> + <rdfs:label xml:lang="en">microgram per square metre second</rdfs:label> + <rdfs:label xml:lang="nl">microgram per vierkante meter seconde</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Microgram per square metre second is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Microgram per square metre second is a unit of defined as microgram divided by square metre second. Microgram per square metre second is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>μg/(m2 s)</om:symbol> + <om:alternativeSymbol>μg m-2 s-1</om:alternativeSymbol> + <om:alternativeSymbol>μg·m-2·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;microgram"/> + <om:hasDenominator rdf:resource="&om;squareMetreSecond-Time"/> + </om:UnitDivision> + + <!-- Tonne Per Cubic Metre Ontology --> + + <om:UnitDivision rdf:about="&om;tonnePerCubicmetre"> + <rdfs:label xml:lang="en">tonne per cubic metre</rdfs:label> + <rdfs:label xml:lang="nl">ton per kubieke meter</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Tonne per cubic metre is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Tonne per cubic metre is a unit of defined as tonne divided by cubic metre.</om:longcomment> --> + <om:symbol>t/m3</om:symbol> + <om:alternativeSymbol>t m-3</om:alternativeSymbol> + <om:alternativeSymbol>t·m-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;tonne"/> + <om:hasDenominator rdf:resource="&om;cubicMetre"/> + </om:UnitDivision> + + <!-- Watt Square Metre Ontology --> + + <om:UnitMultiplication rdf:about="&om;wattSquareMetre"> + <rdfs:label xml:lang="en">watt square metre</rdfs:label> + <rdfs:label xml:lang="nl">watt vierkante meter</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Watt square metre is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Watt square metre is a unit of defined as watt multiplied by square metre.</om:longcomment> --> + <om:symbol>W m2</om:symbol> + <om:alternativeSymbol>W·m2</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;watt"/> + <hasTerm2 rdf:resource="&om;squareMetre"/> + </om:UnitMultiplication> + + <!-- Reciprocal Square Metre Reciprocal Gram Ontology --> + + <om:UnitMultiplication rdf:about="&om;reciprocalSquareMetreReciprocalGram"> + <rdfs:label xml:lang="en">reciprocal square metre reciprocal gram</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde vierkante meter omgekeerde gram</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Reciprocal square metre reciprocal gram is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Reciprocal square metre reciprocal gram is a unit of defined as reciprocal square metre multiplied by reciprocal gram. Reciprocal square metre reciprocal gram is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>m-2 g-1</om:symbol> + <om:alternativeSymbol>m-2·g-1</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;reciprocalSquareMetre"/> + <hasTerm2 rdf:resource="&om;reciprocalGram"/> + </om:UnitMultiplication> + + <!-- Gram Per Megajoule Ontology --> + + <om:UnitDivision rdf:about="&om;gramPerMegajoule"> + <rdfs:label xml:lang="en">gram per megajoule</rdfs:label> + <rdfs:label xml:lang="nl">gram per megajoule</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Gram per megajoule is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Gram per megajoule is a unit of defined as gram divided by megajoule. Gram per megajoule is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>g/MJ</om:symbol> + <om:alternativeSymbol>g MJ-1</om:alternativeSymbol> + <om:alternativeSymbol>g·MJ-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gram"/> + <om:hasDenominator rdf:resource="&om;megajoule"/> + </om:UnitDivision> + + <!-- Watt Per Cubic Metre Ontology --> + + <om:UnitDivision rdf:about="&om;wattPerCubicmetre"> + <rdfs:label xml:lang="en">watt per cubic metre</rdfs:label> + <rdfs:label xml:lang="nl">watt per kubieke meter</rdfs:label> + <om:symbol>W/m3</om:symbol> + <om:alternativeSymbol>W m-3</om:alternativeSymbol> + <om:alternativeSymbol>W·m-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;watt"/> + <om:hasDenominator rdf:resource="&om;cubicMetre"/> + </om:UnitDivision> + + <!-- Watt Per Hertz Ontology --> + + <om:UnitDivision rdf:about="&om;wattPerHertz"> + <rdfs:label xml:lang="en">watt per hertz</rdfs:label> + <rdfs:label xml:lang="nl">watt per hertz</rdfs:label> + <om:symbol>W/Hz</om:symbol> + <om:alternativeSymbol>W Hz-1</om:alternativeSymbol> + <om:alternativeSymbol>W·Hz-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;watt"/> + <om:hasDenominator rdf:resource="&om;hertz"/> + </om:UnitDivision> + + <!-- Watt Per Nanometre Ontology --> + + <om:UnitDivision rdf:about="&om;wattPerNanometre"> + <rdfs:label xml:lang="en">watt per nanometre</rdfs:label> + <rdfs:label xml:lang="nl">watt per nanometer</rdfs:label> + <om:symbol>W/nm</om:symbol> + <om:alternativeSymbol>W nm-1</om:alternativeSymbol> + <om:alternativeSymbol>W·nm-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;watt"/> + <om:hasDenominator rdf:resource="&om;nanometre"/> + </om:UnitDivision> + + <!-- Watt Per Square Metre Hertz Ontology --> + + <om:UnitDivision rdf:about="&om;wattPerSquareMetreHertz"> + <rdfs:label xml:lang="en">watt per square metre hertz</rdfs:label> + <rdfs:label xml:lang="nl">watt per vierkante meter hertz</rdfs:label> + <om:symbol>W/(m2 Hz)</om:symbol> + <om:alternativeSymbol>W m-2 Hz-1</om:alternativeSymbol> + <om:alternativeSymbol>W·m-2·Hz-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;watt"/> + <om:hasDenominator rdf:resource="&om;squareMetreHertz"/> + </om:UnitDivision> + + <!-- Watt Per Square Metre Nanometre Ontology --> + + <om:UnitDivision rdf:about="&om;wattPerSquareMetreNanometre"> + <rdfs:label xml:lang="en">watt per square metre nanometre</rdfs:label> + <rdfs:label xml:lang="nl">watt per vierkante meter nanometer</rdfs:label> + <om:symbol>W/(m2 nm)</om:symbol> + <om:alternativeSymbol>W m-2 nm-1</om:alternativeSymbol> + <om:alternativeSymbol>W·m-2·nm-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;watt"/> + <om:hasDenominator rdf:resource="&om;squareMetreNanometre"/> + </om:UnitDivision> + + <!-- Watt Per Steradian Square Metre Ontology --> + + <om:UnitDivision rdf:about="&om;wattPerSteradianSquareMetre"> + <rdfs:label xml:lang="en">watt per steradian square metre</rdfs:label> + <rdfs:label xml:lang="nl">watt per steradiaal vierkante meter</rdfs:label> + <om:symbol>W/(sr m2)</om:symbol> + <om:alternativeSymbol>W sr-1 m-2</om:alternativeSymbol> + <om:alternativeSymbol>W·sr-1·m-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;watt"/> + <om:hasDenominator rdf:resource="&om;steradianSquareMetre"/> + </om:UnitDivision> + + <!-- Watt Per Steradian Square Metre Hertz Ontology --> + + <om:UnitDivision rdf:about="&om;wattPerSteradianSquareMetreHertz"> + <rdfs:label xml:lang="en">watt per steradian square metre hertz</rdfs:label> + <rdfs:label xml:lang="nl">watt per steradiaal vierkante meter hertz</rdfs:label> + <om:symbol>W/(sr m2 Hz)</om:symbol> + <om:alternativeSymbol>W sr-1 m-2 Hz-1</om:alternativeSymbol> + <om:alternativeSymbol>W·sr-1·m-2·Hz-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;watt"/> + <om:hasDenominator rdf:resource="&om;steradianSquareMetreHertz"/> + </om:UnitDivision> + + <!-- Square Metre Per Gram Ontology --> + + <om:UnitDivision rdf:about="&om;squareMetrePerGram"> + <rdfs:label xml:lang="en">square metre per gram</rdfs:label> + <rdfs:label xml:lang="nl">vierkante meter per gram</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Square metre per gram is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Square metre per gram is a unit of defined as square metre divided by gram. Square metre per gram is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>m2/g</om:symbol> + <om:alternativeSymbol>m2 g-1</om:alternativeSymbol> + <om:alternativeSymbol>m2·g-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;squareMetre"/> + <om:hasDenominator rdf:resource="&om;gram"/> + </om:UnitDivision> + + <!-- Megametre Per Kilojoule Ontology --> + + <om:UnitDivision rdf:about="&om;megametrePerKilojoule"> + <rdfs:label xml:lang="en">megametre per kilojoule</rdfs:label> + <om:alternativeLabel xml:lang="en">1000 kilometre per kilojoule</om:alternativeLabel> + <om:unofficialAbbreviation>1000 km/kJ</om:unofficialAbbreviation> + <om:symbol>Mm/kJ</om:symbol> + <om:hasNumerator rdf:resource="&om;megametre"/> + <om:hasDenominator rdf:resource="&om;kilojoule"/> + </om:UnitDivision> + + <!-- Megaeuro Per Petajoule Ontology --> + + <om:UnitDivision rdf:about="&om;megaeuroPerPetajoule"> + <rdfs:label xml:lang="en">megaeuro per petajoule</rdfs:label> + <om:hasNumerator rdf:resource="&om;megaeuro"/> + <om:hasDenominator rdf:resource="&om;petajoule"/> + </om:UnitDivision> + + <!-- Megaeuro Per Megawatt Ontology --> + + <om:UnitDivision rdf:about="&om;megaeuroPerMegawatt"> + <rdfs:label xml:lang="en">megaeuro per megawatt</rdfs:label> + <om:hasNumerator rdf:resource="&om;megaeuro"/> + <om:hasDenominator rdf:resource="&om;megawatt"/> + </om:UnitDivision> + + <!-- Gram Per Square Metre Metre Ontology --> + + <om:UnitDivision rdf:about="&om;gramPerSquareMetreMetre"> + <rdfs:label xml:lang="en">gram per square metre metre</rdfs:label> + <om:symbol>g/(m2 m)</om:symbol> + <om:alternativeSymbol>g m-2 m-1</om:alternativeSymbol> + <om:alternativeSymbol>g·m-2·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gramPerSquareMetre"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:UnitDivision> + + <!-- Gram Per Square Metre Centimetre Ontology --> + + <om:UnitDivision rdf:about="&om;gramPerSquareMetreCentimetre"> + <rdfs:label xml:lang="en">gram per square metre centimetre</rdfs:label> + <om:symbol>g/(m2 cm)</om:symbol> + <om:alternativeSymbol>g m-2 cm-1</om:alternativeSymbol> + <om:alternativeSymbol>g·m-2·cm-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gramPerSquareMetre"/> + <om:hasDenominator rdf:resource="&om;centimetre"/> + </om:UnitDivision> + + <!-- Tonne Per Hectare Ontology --> + + <om:UnitDivision rdf:about="&om;tonnePerHectare"> + <rdfs:label xml:lang="en">tonne per hectare</rdfs:label> + <om:symbol>t/ha</om:symbol> + <om:alternativeSymbol>t ha-1</om:alternativeSymbol> + <om:alternativeSymbol>t·ha-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;tonne"/> + <om:hasDenominator rdf:resource="&om;hectare"/> + </om:UnitDivision> + + <!-- Metre Per Second Per Metre Ontology --> + + <om:UnitDivision rdf:about="&om;metrePerSecond-TimePerMetre"> + <rdfs:label xml:lang="en">metre per second per metre</rdfs:label> + <rdfs:label xml:lang="nl">meter per seconde per metre</rdfs:label> + <om:symbol>m/s/m</om:symbol> + <om:hasNumerator rdf:resource="&om;metrePerSecond-Time"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:UnitDivision> + + <!-- Metre Per Cubic Metre Ontology --> + + <om:UnitDivision rdf:about="&om;metrePerCubicMetre"> + <rdfs:label xml:lang="en">metre per cubic metre</rdfs:label> + <rdfs:label xml:lang="nl">meter per kubieke meter</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Metre per cubic metre is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Metre per cubic metre is a unit of defined as metre divided by cubic metre. Metre per cubic metre is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>m/m3</om:symbol> + <om:alternativeSymbol>m m-3</om:alternativeSymbol> + <om:alternativeSymbol>m·m-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;metre"/> + <om:hasDenominator rdf:resource="&om;cubicMetre"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;centimetrePerCubicCentimetre"> + <rdfs:label xml:lang="en">centimetre per cubic centimetre</rdfs:label> + <rdfs:label xml:lang="nl">centimeter per kubieke centimeter</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Centimetre per cubic centimetre is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Centimetre per cubic centimetre is a unit of defined as centimetre divided by cubic centimetre. Centimetre per cubic centimetre is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>cm/cm3</om:symbol> + <om:alternativeSymbol>cm cm-3</om:alternativeSymbol> + <om:alternativeSymbol>cm·cm-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;centimetre"/> + <om:hasDenominator rdf:resource="&om;cubicCentimetre"/> + </om:UnitDivision> + + <!-- Square Metre Second Ontology --> + + <om:UnitMultiplication rdf:about="&om;squareMetreSecond-Time"> + <rdfs:label xml:lang="en">square metre second</rdfs:label> + <rdfs:label xml:lang="nl">vierkante meter seconde</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Square metre second is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Square metre second is a unit of defined as square metre multiplied by second. Square metre second is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>m2 s</om:symbol> + <om:alternativeSymbol>m2·s</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;squareMetre"/> + <hasTerm2 rdf:resource="&om;second-Time"/> + </om:UnitMultiplication> + + <!-- Square Metre Day Ontology --> + + <om:UnitMultiplication rdf:about="&om;squareMetreDay"> + <rdfs:label xml:lang="en">square metre day</rdfs:label> + <rdfs:label xml:lang="nl">vierkante meter dag</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Square metre day is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Square metre day is a unit of defined as square metre multiplied by day.</om:longcomment> --> + <om:symbol>m2 d</om:symbol> + <om:alternativeSymbol>m2·d</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;squareMetre"/> + <hasTerm2 rdf:resource="&om;day"/> + </om:UnitMultiplication> + + <!-- Second Per Day Ontology --> + + <om:UnitDivision rdf:about="&om;second-TimePerDay"> + <rdfs:label xml:lang="en">second per day</rdfs:label> + <rdfs:label xml:lang="nl">seconde per dag</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Second per day is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Second per day is a unit of defined as second divided by day.</om:longcomment> --> + <om:symbol>s/d</om:symbol> + <om:alternativeSymbol>s d-1</om:alternativeSymbol> + <om:alternativeSymbol>s·d-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;second-Time"/> + <om:hasDenominator rdf:resource="&om;day"/> + </om:UnitDivision> + + <!-- Reciprocal Square Metre Reciprocal Metre Ontology --> + + <om:UnitMultiplication rdf:about="&om;reciprocalSquareMetreReciprocalMetre"> + <rdfs:label xml:lang="en">reciprocal square metre reciprocal metre</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde vierkante meter omgekeerde meter</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Reciprocal square metre reciprocal metre is a unit of .</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Reciprocal square metre reciprocal metre is a unit of defined as reciprocal square metre multiplied by reciprocal metre. Reciprocal square metre reciprocal metre is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>m-2 m-1</om:symbol> + <om:alternativeSymbol>m-2·m-1</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;reciprocalSquareMetre"/> + <hasTerm2 rdf:resource="&om;reciprocalMetre"/> + </om:UnitMultiplication> + + <!-- Square Metre Hertz Ontology --> + + <om:UnitMultiplication rdf:about="&om;squareMetreHertz"> + <rdfs:label xml:lang="en">square metre hertz</rdfs:label> + <rdfs:label xml:lang="nl">vierkante meter hertz</rdfs:label> + <om:symbol>m2 Hz</om:symbol> + <om:alternativeSymbol>m2·Hz</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;squareMetre"/> + <hasTerm2 rdf:resource="&om;hertz"/> + </om:UnitMultiplication> + + <!-- Square Metre Nanometre Ontology --> + + <om:UnitMultiplication rdf:about="&om;squareMetreNanometre"> + <rdfs:label xml:lang="en">square metre nanometre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante meter nanometer</rdfs:label> + <om:symbol>m2 nm</om:symbol> + <om:alternativeSymbol>m2·nm</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;squareMetre"/> + <hasTerm2 rdf:resource="&om;nanometre"/> + </om:UnitMultiplication> + + <!-- Reciprocal Square Metre Ontology --> + + <om:UnitExponentiation rdf:about="&om;reciprocalSquareMetre"> + <rdfs:label xml:lang="en">reciprocal square metre</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde vierkante meter</rdfs:label> + <om:symbol>m-2</om:symbol> + <om:hasBase rdf:resource="&om;metre"/> + <om:hasExponent rdf:datatype="&xsd;integer">-2</om:hasExponent> + <om:hasDimension rdf:resource="&om;columnNumberDensity-Dimension"/> + </om:UnitExponentiation> + + <om:UnitExponentiation rdf:about="&om;reciprocalSquareCentimetre"> + <rdfs:label xml:lang="en">reciprocal square centimetre</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde vierkante centimeter</rdfs:label> + <om:symbol>cm-2</om:symbol> + <om:hasBase rdf:resource="&om;centimetre"/> + <om:hasExponent rdf:datatype="&xsd;integer">-2</om:hasExponent> + <om:hasDimension rdf:resource="&om;columnNumberDensity-Dimension"/> + </om:UnitExponentiation> + + <owl:Class rdf:about="&om;ColumnNumberDensity"> + <om:commonlyHasUnit rdf:resource="&om;reciprocalSquareMetre"/> + <om:commonlyHasUnit rdf:resource="&om;reciprocalSquareCentimetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ColumnNumberDensityUnit"> + <rdfs:label xml:lang="en">column number density unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitExponentiation rdf:about="&om;reciprocalSquareCentimetre"/> + <om:UnitExponentiation rdf:about="&om;reciprocalSquareMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ColumnNumberDensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ColumnNumberDensityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Parts Per Million Per Year Ontology --> + + <om:UnitDivision rdf:about="&om;partsPerMillionPerYear"> + <rdfs:label xml:lang="en">parts per million per year</rdfs:label> + <om:symbol>ppm/a</om:symbol> + <om:alternativeSymbol>ppm a-1</om:alternativeSymbol> + <om:alternativeSymbol>ppm·a-1</om:alternativeSymbol> + <om:alternativeSymbol>ppm/y</om:alternativeSymbol> + <om:alternativeSymbol>ppm y-1</om:alternativeSymbol> + <om:alternativeSymbol>ppm·y-1</om:alternativeSymbol> + <om:alternativeSymbol>ppm/yr</om:alternativeSymbol> + <om:alternativeSymbol>ppm yr-1</om:alternativeSymbol> + <om:alternativeSymbol>ppm·yr-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;partsPerMillion"/> + <om:hasDenominator rdf:resource="&om;year"/> + </om:UnitDivision> + + <!-- Reciprocal Parts Per Million Ontology --> + + <om:UnitExponentiation rdf:about="&om;reciprocalPartsPerMillionPerYear"> + <rdfs:label xml:lang="en">reciprocal parts per million</rdfs:label> + <om:symbol>ppm-1</om:symbol> + <om:hasBase rdf:resource="&om;partsPerMillion"/> + <om:hasExponent rdf:datatype="&xsd;integer">-1</om:hasExponent> + </om:UnitExponentiation> + + <!-- Second Per Square Metre Ontology --> + + <om:UnitDivision rdf:about="&om;second-TimePerSquareMetre"> + <rdfs:label xml:lang="en">second per square metre</rdfs:label> + <om:symbol>s/m2</om:symbol> + <om:alternativeSymbol>s m-2</om:alternativeSymbol> + <om:alternativeSymbol>s·m-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;second-Time"/> + <om:hasDenominator rdf:resource="&om;squareMetre"/> + </om:UnitDivision> + + <!-- Square Metre Per Square Metre Day Ontology --> + + <om:UnitDivision rdf:about="&om;squareMetrePerSquareMetreDay"> + <rdfs:label xml:lang="en">square metre per square metre day</rdfs:label> + <om:symbol>m2/(m2 d)</om:symbol> + <om:alternativeSymbol>m2 m-2 d-1</om:alternativeSymbol> + <om:alternativeSymbol>m2·m-2·d-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;squareMetrePerSquareMetre"/> + <om:hasDenominator rdf:resource="&om;day"/> + </om:UnitDivision> + + <!-- Square Metre Per Square Metre Ontology --> + + <om:UnitDivision rdf:about="&om;squareMetrePerSquareMetre"> + <rdfs:label xml:lang="en">square metre per square metre</rdfs:label> + <rdfs:label xml:lang="nl">vierkante meter per vierkante meter</rdfs:label> + <om:symbol>m2/m2</om:symbol> + <om:alternativeSymbol>m2 m-2</om:alternativeSymbol> + <om:alternativeSymbol>m2·m-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;squareMetre"/> + <om:hasDenominator rdf:resource="&om;squareMetre"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;AreaFraction"> + <om:commonlyHasUnit rdf:resource="&om;squareMetrePerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Coverage"> + <om:commonlyHasUnit rdf:resource="&om;squareMetrePerSquareMetre"/> + </owl:Class> + + <!-- Second Squared Ontology --> + + <om:UnitExponentiation rdf:about="&om;second-TimeSquared"> + <rdfs:label xml:lang="en">second squared</rdfs:label> + <rdfs:label xml:lang="nl">seconde kwadraat</rdfs:label> + <om:symbol>s2</om:symbol> + <om:hasBase rdf:resource="&om;second-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:UnitExponentiation> + + <!-- Second Squared Multiples and Submultiples Ontology --> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;yoctosecond-TimeSquared"> + <rdfs:label xml:lang="en">yoctosecond squared</rdfs:label> + <rdfs:label xml:lang="nl">yoctoseconde kwadraat</rdfs:label> + <om:symbol>ys2</om:symbol> + <om:hasBase rdf:resource="&om;yoctosecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;zeptosecond-TimeSquared"> + <rdfs:label xml:lang="en">zeptosecond squared</rdfs:label> + <rdfs:label xml:lang="nl">zeptoseconde kwadraat</rdfs:label> + <om:symbol>zs2</om:symbol> + <om:hasBase rdf:resource="&om;zeptosecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;attosecond-TimeSquared"> + <rdfs:label xml:lang="en">attosecond squared</rdfs:label> + <rdfs:label xml:lang="nl">attoseconde kwadraat</rdfs:label> + <om:symbol>as2</om:symbol> + <om:hasBase rdf:resource="&om;attosecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;femtosecond-TimeSquared"> + <rdfs:label xml:lang="en">femtosecond squared</rdfs:label> + <rdfs:label xml:lang="nl">femtoseconde kwadraat</rdfs:label> + <om:symbol>fs2</om:symbol> + <om:hasBase rdf:resource="&om;femtosecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;picosecond-TimeSquared"> + <rdfs:label xml:lang="en">picosecond squared</rdfs:label> + <rdfs:label xml:lang="nl">picoseconde kwadraat</rdfs:label> + <om:symbol>ps2</om:symbol> + <om:hasBase rdf:resource="&om;picosecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;nanosecond-TimeSquared"> + <rdfs:label xml:lang="en">nanosecond squared</rdfs:label> + <rdfs:label xml:lang="nl">nanoseconde kwadraat</rdfs:label> + <om:symbol>ns2</om:symbol> + <om:hasBase rdf:resource="&om;nanosecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;microsecond-TimeSquared"> + <rdfs:label xml:lang="en">microsecond squared</rdfs:label> + <rdfs:label xml:lang="nl">microseconde kwadraat</rdfs:label> + <om:symbol>μs2</om:symbol> + <om:hasBase rdf:resource="&om;microsecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;millisecond-TimeSquared"> + <rdfs:label xml:lang="en">millisecond squared</rdfs:label> + <rdfs:label xml:lang="nl">milliseconde kwadraat</rdfs:label> + <om:symbol>ms2</om:symbol> + <om:hasBase rdf:resource="&om;millisecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;centisecond-TimeSquared"> + <rdfs:label xml:lang="en">centisecond squared</rdfs:label> + <rdfs:label xml:lang="nl">centiseconde kwadraat</rdfs:label> + <om:symbol>cs2</om:symbol> + <om:hasBase rdf:resource="&om;centisecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;decisecond-TimeSquared"> + <rdfs:label xml:lang="en">decisecond squared</rdfs:label> + <rdfs:label xml:lang="nl">deciseconde kwadraat</rdfs:label> + <om:symbol>ds2</om:symbol> + <om:hasBase rdf:resource="&om;decisecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;decasecond-TimeSquared"> + <rdfs:label xml:lang="en">decasecond squared</rdfs:label> + <rdfs:label xml:lang="nl">decaseconde kwadraat</rdfs:label> + <om:symbol>das2</om:symbol> + <om:hasBase rdf:resource="&om;decasecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;hectosecond-TimeSquared"> + <rdfs:label xml:lang="en">hectosecond squared</rdfs:label> + <rdfs:label xml:lang="nl">hectoseconde kwadraat</rdfs:label> + <om:symbol>hs2</om:symbol> + <om:hasBase rdf:resource="&om;hectosecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;kilosecond-TimeSquared"> + <rdfs:label xml:lang="en">kilosecond squared</rdfs:label> + <rdfs:label xml:lang="nl">kiloseconde kwadraat</rdfs:label> + <om:symbol>ks2</om:symbol> + <om:hasBase rdf:resource="&om;kilosecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;megasecond-TimeSquared"> + <rdfs:label xml:lang="en">megasecond squared</rdfs:label> + <rdfs:label xml:lang="nl">megaseconde kwadraat</rdfs:label> + <om:symbol>Ms2</om:symbol> + <om:hasBase rdf:resource="&om;megasecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;gigasecond-TimeSquared"> + <rdfs:label xml:lang="en">gigasecond squared</rdfs:label> + <rdfs:label xml:lang="nl">gigaseconde kwadraat</rdfs:label> + <om:symbol>Gs2</om:symbol> + <om:hasBase rdf:resource="&om;gigasecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;terasecond-TimeSquared"> + <rdfs:label xml:lang="en">terasecond squared</rdfs:label> + <rdfs:label xml:lang="nl">teraseconde kwadraat</rdfs:label> + <om:symbol>Ts2</om:symbol> + <om:hasBase rdf:resource="&om;terasecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;petasecond-TimeSquared"> + <rdfs:label xml:lang="en">petasecond squared</rdfs:label> + <rdfs:label xml:lang="nl">petaseconde kwadraat</rdfs:label> + <om:symbol>Ps2</om:symbol> + <om:hasBase rdf:resource="&om;petasecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;exasecond-TimeSquared"> + <rdfs:label xml:lang="en">exasecond squared</rdfs:label> + <rdfs:label xml:lang="nl">exaseconde kwadraat</rdfs:label> + <om:symbol>Es2</om:symbol> + <om:hasBase rdf:resource="&om;exasecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;zettasecond-TimeSquared"> + <rdfs:label xml:lang="en">zettasecond squared</rdfs:label> + <rdfs:label xml:lang="nl">zettaseconde kwadraat</rdfs:label> + <om:symbol>Zs2</om:symbol> + <om:hasBase rdf:resource="&om;zettasecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <om:PrefixedSecond-TimeSquared rdf:about="&om;yottasecond-TimeSquared"> + <rdfs:label xml:lang="en">yottasecond squared</rdfs:label> + <rdfs:label xml:lang="nl">yottaseconde kwadraat</rdfs:label> + <om:symbol>Ys2</om:symbol> + <om:hasBase rdf:resource="&om;yottasecond-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">2</om:hasExponent> + </om:PrefixedSecond-TimeSquared> + + <owl:Class rdf:about="&om;PrefixedSecond-TimeSquared"> + <rdfs:label xml:lang="en">prefixed second (time) squared</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitExponentiation"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasBase"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedSecond-Time"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasBase"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasExponent"/> + <owl:hasValue rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">2</owl:hasValue> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasExponent"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <!-- Second To the Power -2 Ontology --> + + <om:UnitExponentiation rdf:about="&om;second-TimeToThePower-2"> + <rdfs:label xml:lang="en">second to the power -2</rdfs:label> + <rdfs:label xml:lang="nl">seconde tot de macht -2</rdfs:label> + <om:symbol>s-2</om:symbol> + <om:hasBase rdf:resource="&om;second-Time"/> + <om:hasExponent rdf:datatype="&xsd;integer">-2</om:hasExponent> + </om:UnitExponentiation> + + <!-- Steradian Square Metre Ontology --> + + <om:UnitMultiplication rdf:about="&om;steradianSquareMetre"> + <rdfs:label xml:lang="en">steradian square metre</rdfs:label> + <rdfs:label xml:lang="nl">steradiaal vierkante meter</rdfs:label> + <om:symbol>sr m2</om:symbol> + <om:alternativeSymbol>sr·m2</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;steradian"/> + <hasTerm2 rdf:resource="&om;squareMetre"/> + </om:UnitMultiplication> + + <!-- Steradian Square Metre Hertz Ontology --> + + <om:UnitMultiplication rdf:about="&om;steradianSquareMetreHertz"> + <rdfs:label xml:lang="en">steradian square metre hertz</rdfs:label> + <rdfs:label xml:lang="nl">steradiaal vierkante meter hertz</rdfs:label> + <om:symbol>sr m2 Hz</om:symbol> + <om:alternativeSymbol>sr·m2·Hz</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;steradianSquareMetre"/> + <hasTerm2 rdf:resource="&om;hertz"/> + </om:UnitMultiplication> + + <!-- Square Metre Steradian Ontology --> + + <om:UnitMultiplication rdf:about="&om;squareMetreSteradian"> + <rdfs:label xml:lang="en">square metre steradian</rdfs:label> + <rdfs:label xml:lang="nl">vierkante meter steradian</rdfs:label> + <om:symbol>m2 sr</om:symbol> + <om:alternativeSymbol>m2·sr</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;squareMetre"/> + <hasTerm2 rdf:resource="&om;steradian"/> + </om:UnitMultiplication> + + <!-- Litre Per 100 Kilometre Ontology --> + + <om:UnitDivision rdf:about="&om;litrePer100Kilometre"> + <rdfs:label xml:lang="en">litre per 100 kilometre</rdfs:label> + <rdfs:label xml:lang="nl">liter per 100 kilometer</rdfs:label> + <om:alternativeLabel xml:lang="en">litre per 100 kilometre</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">liter per 100 kilometer</om:alternativeLabel> + <om:symbol>l/100 km</om:symbol> + <om:hasNumerator rdf:resource="&om;litre"/> + <om:hasDenominator rdf:resource="&om;_100Kilometre"/> + </om:UnitDivision> + + <om:UnitMultiple rdf:about="&om;_100Kilometre"> + <rdfs:label xml:lang="en">100 kilometre</rdfs:label> + <rdfs:label xml:lang="nl">100 kilometer</rdfs:label> + <om:symbol>100 km</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">100</om:hasFactor> + <om:hasUnit rdf:resource="&om;kilometre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:UnitMultiple> + + <!-- <om:Measure rdf:about="&om;_100Kilometre"> --> + <!-- <om:hasNumericalValue>100</om:hasNumericalValue> --> + <!-- <om:hasUnit rdf:resource="&om;kilometre"/> --> + <!-- </om:Measure> --> + + <!-- Dimension Ontologies --> + + <!-- Contents --> + + <!-- Time Dimension Ontology --> + <!-- Mass Dimension Ontology --> + <!-- Number Density Dimension Ontology --> + <!-- Column Number Density Dimension Ontology --> + <!-- Wavenumber Dimension Ontology --> + <!-- Frequency Dimension Ontology --> + <!-- Acceleration Dimension Ontology --> + <!-- Density Dimension Ontology --> + <!-- Specific Volume Dimension Ontology --> + <!-- Speed Dimension Ontology --> + <!-- Force Dimension Ontology --> + <!-- Pressure Dimension Ontology --> + <!-- Energy Dimension Ontology --> + <!-- Power Dimension Ontology --> + <!-- Specific Energy, Absorbed Dose or Dose Equivalent Dimension Ontology --> + <!-- Angular Speed Dimension Ontology --> + <!-- Angular Acceleration Dimension Ontology --> + <!-- Dynamic Viscosity Dimension Ontology --> + <!-- Kinematic Viscosity Or Thermal Diffusivity Dimension Ontology --> + <!-- Power Density Dimension Ontology --> + <!-- Energy Density Dimension Ontology --> + <!-- Action or Angular Momentum Dimension Ontology --> + <!-- Fluidity Dimension Ontology --> + <!-- Volumetric Flow Rate Dimension Ontology --> + <!-- Mass Flow Dimension Ontology --> + + <!-- Time Dimension Ontology --> + + <om:Dimension rdf:about="&om;time-Dimension"> + <rdfs:label xml:lang="en">time dimension</rdfs:label> + <rdfs:label xml:lang="nl">dimensie van tijd</rdfs:label> + <om:symbol>T</om:symbol> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Time"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;time-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Mass Dimension Ontology --> + + <om:Dimension rdf:about="&om;mass-Dimension"> + <rdfs:label xml:lang="en">mass dimension</rdfs:label> + <rdfs:label xml:lang="nl">massadimensie</rdfs:label> + <om:symbol>M</om:symbol> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Mass"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;mass-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Number Density Dimension Ontology --> + + <om:Dimension rdf:about="&om;numberDensity-Dimension"> + <rdfs:label xml:lang="en">number density dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-3</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;NumberDensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;numberDensity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Column Number Density Dimension Ontology --> + + <om:Dimension rdf:about="&om;columnNumberDensity-Dimension"> + <rdfs:label xml:lang="en">column number density dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;ColumnNumberDensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;columnNumberDensity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Wavenumber Dimension Ontology --> + + <om:Dimension rdf:about="&om;wavenumber-Dimension"> + <rdfs:label xml:lang="en">wavenumber dimension</rdfs:label> + <rdfs:label xml:lang="nl">golfgetaldimensie</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Wavenumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;wavenumber-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Frequency Dimension Ontology --> + + <om:Dimension rdf:about="&om;frequency-Dimension"> + <rdfs:label xml:lang="en">frequency dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Frequency"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;frequency-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Acceleration Dimension Ontology --> + + <om:Dimension rdf:about="&om;acceleration-Dimension"> + <rdfs:label xml:lang="en">acceleration dimension</rdfs:label> + <rdfs:label xml:lang="nl">versnellingdimensie</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Acceleration"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;acceleration-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Density Dimension Ontology --> + + <om:Dimension rdf:about="&om;density-Dimension"> + <rdfs:label xml:lang="en">density dimension</rdfs:label> + <rdfs:label xml:lang="nl">dichtheiddimensie</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-3</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Density"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;density-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Specific Volume Dimension Ontology --> + + <om:Dimension rdf:about="&om;specificVolume-Dimension"> + <rdfs:label xml:lang="en">specific volume dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">3</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;SpecificVolume"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;specificVolume-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Speed Dimension Ontology --> + + <om:Dimension rdf:about="&om;speed-Dimension"> + <rdfs:label xml:lang="en">speed dimension</rdfs:label> + <rdfs:label xml:lang="nl">snelheiddimensie</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Speed"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;speed-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Force Dimension Ontology --> + + <om:Dimension rdf:about="&om;force-Dimension"> + <rdfs:label xml:lang="en">force dimension</rdfs:label> + <rdfs:label xml:lang="nl">krachtdimensie</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Force"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;force-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Pressure Dimension Ontology --> + + <om:Dimension rdf:about="&om;pressure-Dimension"> + <rdfs:label xml:lang="en">pressure dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Pressure"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;pressure-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Energy Dimension Ontology --> + + <om:Dimension rdf:about="&om;energy-Dimension"> + <rdfs:label xml:lang="en">energy dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Energy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;energy-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;Torque"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;energy-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;MomentOfForce"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;energy-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Power Dimension Ontology --> + + <om:Dimension rdf:about="&om;power-Dimension"> + <rdfs:label xml:lang="en">power dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-3</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Power"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;power-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Specific Energy, Absorbed Dose or Dose Equivalent Dimension Ontology --> + + <om:Dimension rdf:about="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"> + <rdfs:label xml:lang="en">specific energy, absorbed dose, or dose equivalent dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;SpecificEnergy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Angular Speed Dimension Ontology --> + + <om:Dimension rdf:about="&om;angularSpeed-Dimension"> + <rdfs:label xml:lang="en">angular speed dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;AngularSpeed"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;angularSpeed-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Angular Acceleration Dimension Ontology --> + + <om:Dimension rdf:about="&om;angularAcceleration-Dimension"> + <rdfs:label xml:lang="en">angular acceleration dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;AngularAcceleration"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;angularAcceleration-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Dynamic Viscosity Dimension Ontology --> + + <om:Dimension rdf:about="&om;dynamicViscosity-Dimension"> + <rdfs:label xml:lang="en">dynamic viscosity dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;DynamicViscosity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dynamicViscosity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Kinematic Viscosity Or Thermal Diffusivity Dimension Ontology --> + + <om:Dimension rdf:about="&om;kinematicViscosityOrThermalDiffusivity-Dimension"> + <rdfs:label xml:lang="en">kinematic viscosity dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;KinematicViscosity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;kinematicViscosityOrThermalDiffusivity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Power Density Dimension Ontology --> + + <om:Dimension rdf:about="&om;powerDensity-Dimension"> + <rdfs:label xml:lang="en">power density dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-3</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;PowerDensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;powerDensity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Energy Density Dimension Ontology --> + + <om:Dimension rdf:about="&om;energyDensity-Dimension"> + <rdfs:label xml:lang="en">energy density dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;EnergyDensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;energyDensity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Action or Angular Momentum Dimension Ontology --> + + <om:Dimension rdf:about="&om;actionOrAngularMomentum-Dimension"> + <rdfs:label xml:lang="en">action or angular momentum dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Action"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;actionOrAngularMomentum-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;AngularMomentum"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;actionOrAngularMomentum-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Fluidity Dimension Ontology --> + + <om:Dimension rdf:about="&om;fluidity-Dimension"> + <rdfs:label xml:lang="en">fluidity dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Fluidity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;fluidity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Volumetric Flow Rate Dimension Ontology --> + + <om:Dimension rdf:about="&om;volumetricFlowRate-Dimension"> + <rdfs:label xml:lang="en">volumetric flow rate dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">3</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;VolumetricFlowRate"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;volumetricFlowRate-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Mass Flow Dimension Ontology --> + + <om:Dimension rdf:about="&om;massFlow-Dimension"> + <rdfs:label xml:lang="en">mass flow dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;MassFlow"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;massFlow-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Thermodynamics Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Unit of Measure Ontologies --> + <!-- Measurement Scale Ontologies --> + <!-- Dimension Ontologies --> + + <om:ApplicationArea rdf:about="&om;thermodynamics"> + <rdfs:label xml:lang="en">thermodynamics</rdfs:label> + <rdfs:label xml:lang="nl">thermodynamica</rdfs:label> + <!-- <om:uses_application_area rdf:resource="&om;space_and_time"/> --> + <om:usesQuantity rdf:resource="&om;Temperature"/> + <om:usesQuantity rdf:resource="&om;ThermodynamicTemperature"/> + <om:usesQuantity rdf:resource="&om;CelsiusTemperature"/> + <om:usesQuantity rdf:resource="&om;FahrenheitTemperature"/> + <om:usesQuantity rdf:resource="&om;RankineTemperature"/> + <om:usesQuantity rdf:resource="&om;ReaumurTemperature"/> + <om:usesQuantity rdf:resource="&om;Heat"/> + <om:usesQuantity rdf:resource="&om;InternalEnergy"/> + <om:usesQuantity rdf:resource="&om;HeatFluxDensity"/> + <om:usesQuantity rdf:resource="&om;Entropy"/> + <om:usesQuantity rdf:resource="&om;HeatCapacity"/> + <om:usesQuantity rdf:resource="&om;SpecificHeatCapacity"/> + <om:usesQuantity rdf:resource="&om;HeatFlowRate"/> + <om:usesQuantity rdf:resource="&om;SpecificEntropy"/> + <om:usesQuantity rdf:resource="&om;ThermalConductivity"/> + <om:usesQuantity rdf:resource="&om;ThermalResistance"/> + <om:usesQuantity rdf:resource="&om;TemperatureRate"/> + <om:usesQuantity rdf:resource="&om;HeatTransferCoefficient"/> + <om:usesUnit rdf:resource="&om;kelvin"/> + <om:usesUnit rdf:resource="&om;attokelvin"/> + <om:usesUnit rdf:resource="&om;centikelvin"/> + <om:usesUnit rdf:resource="&om;decakelvin"/> + <om:usesUnit rdf:resource="&om;decikelvin"/> + <om:usesUnit rdf:resource="&om;exakelvin"/> + <om:usesUnit rdf:resource="&om;femtokelvin"/> + <om:usesUnit rdf:resource="&om;gigakelvin"/> + <om:usesUnit rdf:resource="&om;hectokelvin"/> + <om:usesUnit rdf:resource="&om;kilokelvin"/> + <om:usesUnit rdf:resource="&om;megakelvin"/> + <om:usesUnit rdf:resource="&om;microkelvin"/> + <om:usesUnit rdf:resource="&om;millikelvin"/> + <om:usesUnit rdf:resource="&om;nanokelvin"/> + <om:usesUnit rdf:resource="&om;petakelvin"/> + <om:usesUnit rdf:resource="&om;picokelvin"/> + <om:usesUnit rdf:resource="&om;terakelvin"/> + <om:usesUnit rdf:resource="&om;degreeCelsius"/> + <om:usesUnit rdf:resource="&om;attodegreeCelsius"/> + <om:usesUnit rdf:resource="&om;centidegreeCelsius"/> + <om:usesUnit rdf:resource="&om;decidegreeCelsius"/> + <om:usesUnit rdf:resource="&om;femtodegreeCelsius"/> + <om:usesUnit rdf:resource="&om;microdegreeCelsius"/> + <om:usesUnit rdf:resource="&om;millidegreeCelsius"/> + <om:usesUnit rdf:resource="&om;nanodegreeCelsius"/> + <om:usesUnit rdf:resource="&om;picodegreeCelsius"/> + <om:usesUnit rdf:resource="&om;degreeFahrenheit"/> + <om:usesUnit rdf:resource="&om;degreeRankine"/> + <om:usesUnit rdf:resource="&om;degreeReaumur"/> + <om:usesUnit rdf:resource="&om;joulePerKelvin"/> + <om:usesUnit rdf:resource="&om;joulePerKelvinKilogram"/> + <om:usesUnit rdf:resource="&om;wattPerMetreKelvin"/> + <om:usesUnit rdf:resource="&om;squareMetreKelvinPerWatt"/> + <om:usesUnit rdf:resource="&om;degreeCelsiusPerMinute-Time"/> + <om:usesUnit rdf:resource="&om;wattPerSquareMetreKelvin"/> + </om:ApplicationArea> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Temperature Upper Ontology --> + <!-- Thermodynamic Temperature Upper Ontology --> + <!-- Celsius Temperature Upper Ontology --> + <!-- Temperature Subclass Upper Ontology --> + <!-- Energy Subclass Upper Ontology --> + <!-- Heat Flux Density Upper Ontology --> + <!-- Entropy Upper Ontology --> + <!-- Heat Capacity Upper Ontology --> + <!-- Power Subclass Upper Ontology --> + <!-- Specific Entropy Upper Ontology --> + <!-- Specific Heat Capacity Upper Ontology --> + <!-- Thermal Conductivity Upper Ontology --> + <!-- Thermal Diffusivity Upper Ontology --> + <!-- Thermal Insulance Upper Ontology --> + <!-- Thermal Resistance Upper Ontology --> + <!-- Temperature Rate Upper Ontology --> + <!-- Heat Transfer Coefficient Upper Ontology --> + <!-- Volumetric Heat Capacity Upper Ontology --> + + <!-- Temperature Upper Ontology --> + + <owl:Class rdf:about="&om;Temperature"> + <rdfs:label xml:lang="en">temperature</rdfs:label> + <rdfs:label xml:lang="nl">temperatuur</rdfs:label> + <rdfs:label xml:lang="zh">温度</rdfs:label> + <rdfs:comment xml:lang="en">Temperature is the extent to which an object is hot.</rdfs:comment> + <om:unofficialAbbreviation>temp</om:unofficialAbbreviation> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>T</om:symbol> + <om:alternativeSymbol>t</om:alternativeSymbol> + <om:alternativeSymbol>θ</om:alternativeSymbol> + </owl:Class> + + <!-- Thermodynamic Temperature Upper Ontology --> + + <owl:Class rdf:about="&om;ThermodynamicTemperature"> + <rdfs:label xml:lang="en">thermodynamic temperature</rdfs:label> + <rdfs:label xml:lang="nl">absolute temperatuur</rdfs:label> + <om:alternativeLabel xml:lang="nl">thermodynamische temperatuur</om:alternativeLabel> + <rdfs:comment xml:lang="en">Thermodynamic temperature is the absolute measure of temperature. Its zero point is the temperature at which the particle constituents of matter have minimal motion and can be no colder. Thermodynamic temperature is a base quantity in the International System of Units.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Temperature"/> + <om:symbol>T</om:symbol> + </owl:Class> + + <!-- Celsius Temperature Upper Ontology --> + + <owl:Class rdf:about="&om;CelsiusTemperature"> + <rdfs:label xml:lang="en">Celsius temperature</rdfs:label> + <rdfs:label xml:lang="nl">Celsiustemperatuur</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Temperature"/> + <om:symbol>t</om:symbol> + <om:alternativeSymbol>θ</om:alternativeSymbol> + </owl:Class> + + <!-- Temperature Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;FahrenheitTemperature"> + <rdfs:label xml:lang="en">Fahrenheit temperature</rdfs:label> + <rdfs:label xml:lang="nl">Fahrenheittemperatuur</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Temperature"/> + <om:symbol>T</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;RankineTemperature"> + <rdfs:label xml:lang="en">Rankine temperature</rdfs:label> + <rdfs:label xml:lang="nl">Rankinetemperatuur</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Temperature"/> + <om:symbol>T</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;ReaumurTemperature"> + <rdfs:label xml:lang="en">Réaumur temperature</rdfs:label> + <rdfs:label xml:lang="nl">Réaumurtemperatuur</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Temperature"/> + <om:symbol>T</om:symbol> + </owl:Class> + + <!-- Energy Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;Heat"> + <rdfs:label xml:lang="en">heat</rdfs:label> + <rdfs:label xml:lang="nl">warmte</rdfs:label> + <om:alternativeLabel xml:lang="en">quantity of heat</om:alternativeLabel> + <rdfs:comment xml:lang="en">Heat is any flow of energy from one body or system to another due to a difference in temperature.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Energy"/> + <om:symbol>Q</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;InternalEnergy"> + <rdfs:label xml:lang="en">internal energy</rdfs:label> + <rdfs:label xml:lang="nl">inwendige energie</rdfs:label> + <rdfs:comment xml:lang="en">The internal energy of a thermodynamic system, or a body with well-defined boundaries is the total of the kinetic energy due to the motion of molecules (translational, rotational, vibrational) and the potential energy associated with the vibrational and electric energy of atoms within molecules or crystals.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Energy"/> + <om:symbol>U</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Heat"> + <om:commonlyHasUnit rdf:resource="&om;newtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;InternalEnergy"> + <om:commonlyHasUnit rdf:resource="&om;newtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Heat"> + <om:commonlyHasUnit rdf:resource="&om;micronewtonMetre"/> + <om:commonlyHasUnit rdf:resource="&om;millinewtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;InternalEnergy"> + <om:commonlyHasUnit rdf:resource="&om;micronewtonMetre"/> + <om:commonlyHasUnit rdf:resource="&om;millinewtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Heat"> + <om:commonlyHasUnit rdf:resource="&om;joule"/> + </owl:Class> + + <owl:Class rdf:about="&om;InternalEnergy"> + <om:commonlyHasUnit rdf:resource="&om;joule"/> + </owl:Class> + + <owl:Class rdf:about="&om;Heat"> + <om:commonlyHasUnit rdf:resource="&om;attojoule"/> + <om:commonlyHasUnit rdf:resource="&om;centijoule"/> + <om:commonlyHasUnit rdf:resource="&om;decajoule"/> + <om:commonlyHasUnit rdf:resource="&om;decijoule"/> + <om:commonlyHasUnit rdf:resource="&om;exajoule"/> + <om:commonlyHasUnit rdf:resource="&om;femtojoule"/> + <om:commonlyHasUnit rdf:resource="&om;gigajoule"/> + <om:commonlyHasUnit rdf:resource="&om;hectojoule"/> + <om:commonlyHasUnit rdf:resource="&om;kilojoule"/> + <om:commonlyHasUnit rdf:resource="&om;megajoule"/> + <om:commonlyHasUnit rdf:resource="&om;microjoule"/> + <om:commonlyHasUnit rdf:resource="&om;millijoule"/> + <om:commonlyHasUnit rdf:resource="&om;nanojoule"/> + <om:commonlyHasUnit rdf:resource="&om;petajoule"/> + <om:commonlyHasUnit rdf:resource="&om;picojoule"/> + <om:commonlyHasUnit rdf:resource="&om;terajoule"/> + </owl:Class> + + <owl:Class rdf:about="&om;InternalEnergy"> + <om:commonlyHasUnit rdf:resource="&om;attojoule"/> + <om:commonlyHasUnit rdf:resource="&om;centijoule"/> + <om:commonlyHasUnit rdf:resource="&om;decajoule"/> + <om:commonlyHasUnit rdf:resource="&om;decijoule"/> + <om:commonlyHasUnit rdf:resource="&om;exajoule"/> + <om:commonlyHasUnit rdf:resource="&om;femtojoule"/> + <om:commonlyHasUnit rdf:resource="&om;gigajoule"/> + <om:commonlyHasUnit rdf:resource="&om;hectojoule"/> + <om:commonlyHasUnit rdf:resource="&om;kilojoule"/> + <om:commonlyHasUnit rdf:resource="&om;megajoule"/> + <om:commonlyHasUnit rdf:resource="&om;microjoule"/> + <om:commonlyHasUnit rdf:resource="&om;millijoule"/> + <om:commonlyHasUnit rdf:resource="&om;nanojoule"/> + <om:commonlyHasUnit rdf:resource="&om;petajoule"/> + <om:commonlyHasUnit rdf:resource="&om;picojoule"/> + <om:commonlyHasUnit rdf:resource="&om;terajoule"/> + </owl:Class> + + <owl:Class rdf:about="&om;Heat"> + <om:commonlyHasUnit rdf:resource="&om;electronvolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;InternalEnergy"> + <om:commonlyHasUnit rdf:resource="&om;electronvolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;Heat"> + <om:commonlyHasUnit rdf:resource="&om;gigaelectronvolt"/> + <om:commonlyHasUnit rdf:resource="&om;kiloelectronvolt"/> + <om:commonlyHasUnit rdf:resource="&om;megaelectronvolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;InternalEnergy"> + <om:commonlyHasUnit rdf:resource="&om;gigaelectronvolt"/> + <om:commonlyHasUnit rdf:resource="&om;kiloelectronvolt"/> + <om:commonlyHasUnit rdf:resource="&om;megaelectronvolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;Heat"> + <om:commonlyHasUnit rdf:resource="&om;calorie-Mean"/> + </owl:Class> + + <owl:Class rdf:about="&om;InternalEnergy"> + <om:commonlyHasUnit rdf:resource="&om;calorie-Mean"/> + </owl:Class> + + <owl:Class rdf:about="&om;Heat"> + <om:commonlyHasUnit rdf:resource="&om;kilocalorie-Mean"/> + </owl:Class> + + <owl:Class rdf:about="&om;InternalEnergy"> + <om:commonlyHasUnit rdf:resource="&om;kilocalorie-Mean"/> + </owl:Class> + + <owl:Class rdf:about="&om;Heat"> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-39F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-59F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-60F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-InternationalTable"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-Mean"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-Thermochemical"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-15C"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-20C"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-InternationalTable"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-Thermochemical"/> + <om:commonlyHasUnit rdf:resource="&om;erg"/> + <om:commonlyHasUnit rdf:resource="&om;footPoundal"/> + <om:commonlyHasUnit rdf:resource="&om;quad"/> + <om:commonlyHasUnit rdf:resource="&om;wattHour"/> + <om:commonlyHasUnit rdf:resource="&om;kilowattHour"/> + <om:commonlyHasUnit rdf:resource="&om;megawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;gigawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;terawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;therm-EC"/> + <om:commonlyHasUnit rdf:resource="&om;therm-US"/> + <om:commonlyHasUnit rdf:resource="&om;tonOfTNT"/> + <om:commonlyHasUnit rdf:resource="&om;megaerg"/> + </owl:Class> + + <owl:Class rdf:about="&om;InternalEnergy"> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-39F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-59F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-60F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-InternationalTable"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-Mean"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-Thermochemical"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-15C"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-20C"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-InternationalTable"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-Thermochemical"/> + <om:commonlyHasUnit rdf:resource="&om;erg"/> + <om:commonlyHasUnit rdf:resource="&om;footPoundal"/> + <om:commonlyHasUnit rdf:resource="&om;quad"/> + <om:commonlyHasUnit rdf:resource="&om;wattHour"/> + <om:commonlyHasUnit rdf:resource="&om;kilowattHour"/> + <om:commonlyHasUnit rdf:resource="&om;megawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;gigawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;terawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;therm-EC"/> + <om:commonlyHasUnit rdf:resource="&om;therm-US"/> + <om:commonlyHasUnit rdf:resource="&om;tonOfTNT"/> + <om:commonlyHasUnit rdf:resource="&om;megaerg"/> + </owl:Class> + + <!-- Heat Flux Density Upper Ontology --> + + <owl:Class rdf:about="&om;HeatFluxDensity"> + <rdfs:label xml:lang="en">heat flux density</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PowerDensity"/> + </owl:Class> + + <owl:Class rdf:about="&om;HeatFluxDensity"> + <om:commonlyHasUnit rdf:resource="&om;wattPerSquareMetre"/> + </owl:Class> + + <!-- Entropy Upper Ontology --> + + <owl:Class rdf:about="&om;Entropy"> + <rdfs:label xml:lang="en">entropy</rdfs:label> + <rdfs:label xml:lang="nl">entropie</rdfs:label> + <!-- <rdfs:label xml:lang="zh">熵</rdfs:label> --> + <rdfs:label xml:lang="zh">熵单位</rdfs:label> + <rdfs:comment xml:lang="en">Entropy is a measure of the unavailability of a system’s energy to do work.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>S</om:symbol> + </owl:Class> + + <!-- Heat Capacity Upper Ontology --> + + <owl:Class rdf:about="&om;HeatCapacity"> + <rdfs:label xml:lang="en">heat capacity</rdfs:label> + <rdfs:label xml:lang="nl">warmtecapaciteit</rdfs:label> + <!-- <rdfs:label xml:lang="zh">熱容量</rdfs:label> --> + <rdfs:label xml:lang="zh">热容量</rdfs:label> + <rdfs:comment xml:lang="en">Heat capacity is the heat required to increase the temperature of a system or substance one unit temperature.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>C_p</om:symbol> + <om:alternativeSymbol>C_v</om:alternativeSymbol> + </owl:Class> + + <!-- Specific Heat Capacity Upper Ontology --> + + <owl:Class rdf:about="&om;SpecificHeatCapacity"> + <rdfs:label xml:lang="en">specific heat capacity</rdfs:label> + <rdfs:label xml:lang="nl">soortelijke warmte</rdfs:label> + <om:alternativeLabel xml:lang="nl">specifieke warmte</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">specifieke warmtecapaciteit</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>c_p</om:symbol> + <om:alternativeSymbol>c_v</om:alternativeSymbol> + </owl:Class> + + <!-- Power Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;HeatFlowRate"> + <rdfs:label xml:lang="en">heat flow rate</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Power"/> + <om:symbol>Φ</om:symbol> + <om:alternativeSymbol>q</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;HeatFlowRate"> + <om:commonlyHasUnit rdf:resource="&om;joulePerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;HeatFlowRate"> + <om:commonlyHasUnit rdf:resource="&om;watt"/> + </owl:Class> + + <owl:Class rdf:about="&om;HeatFlowRate"> + <om:commonlyHasUnit rdf:resource="&om;attowatt"/> + <om:commonlyHasUnit rdf:resource="&om;centiwatt"/> + <om:commonlyHasUnit rdf:resource="&om;decawatt"/> + <om:commonlyHasUnit rdf:resource="&om;deciwatt"/> + <om:commonlyHasUnit rdf:resource="&om;exawatt"/> + <om:commonlyHasUnit rdf:resource="&om;femtowatt"/> + <om:commonlyHasUnit rdf:resource="&om;gigawatt"/> + <om:commonlyHasUnit rdf:resource="&om;hectowatt"/> + <om:commonlyHasUnit rdf:resource="&om;kilowatt"/> + <om:commonlyHasUnit rdf:resource="&om;megawatt"/> + <om:commonlyHasUnit rdf:resource="&om;microwatt"/> + <om:commonlyHasUnit rdf:resource="&om;milliwatt"/> + <om:commonlyHasUnit rdf:resource="&om;nanowatt"/> + <om:commonlyHasUnit rdf:resource="&om;petawatt"/> + <om:commonlyHasUnit rdf:resource="&om;picowatt"/> + <om:commonlyHasUnit rdf:resource="&om;terawatt"/> + </owl:Class> + + <owl:Class rdf:about="&om;HeatFlowRate"> + <om:commonlyHasUnit rdf:resource="&om;horsepower-Boiler"/> + <om:commonlyHasUnit rdf:resource="&om;horsepower-British"/> + <om:commonlyHasUnit rdf:resource="&om;horsepower-Electric"/> + <om:commonlyHasUnit rdf:resource="&om;horsepower-Metric"/> + <om:commonlyHasUnit rdf:resource="&om;horsepower-Water"/> + <om:commonlyHasUnit rdf:resource="&om;tonOfRefrigeration"/> + </owl:Class> + + <!-- Specific Entropy Upper Ontology --> + + <owl:Class rdf:about="&om;SpecificEntropy"> + <rdfs:label xml:lang="en">specific entropy</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Thermal Conductivity Upper Ontology --> + + <owl:Class rdf:about="&om;ThermalConductivity"> + <rdfs:label xml:lang="en">thermal conductivity</rdfs:label> + <rdfs:label xml:lang="nl">thermische geleidbaarheid</rdfs:label> + <rdfs:comment xml:lang="en">Termal conductivity indicates the ability of a material to conduct heat.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>κ</om:symbol> + <om:alternativeSymbol>k</om:alternativeSymbol> + <om:alternativeSymbol>K</om:alternativeSymbol> + <om:alternativeSymbol>λ</om:alternativeSymbol> + </owl:Class> + + <!-- Thermal Diffusivity Upper Ontology --> + + <owl:Class rdf:about="&om;ThermalDiffusivity"> + <rdfs:label xml:lang="en">thermal diffusivity</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:hasDimension rdf:resource="&om;kinematicViscosityOrThermalDiffusivity-Dimension"/> + </owl:Class> + + <owl:Class rdf:about="&om;ThermalDiffusivity"> + <om:commonlyHasUnit rdf:resource="&om;squareMetrePerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;ThermalDiffusivityUnit"> + <rdfs:label xml:lang="en">thermal diffusivity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;squareMetrePerSecond-Time"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ThermalDiffusivity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ThermalDiffusivityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Thermal Insulance Upper Ontology --> + + <owl:Class rdf:about="&om;ThermalInsulance"> + <rdfs:label xml:lang="en">thermal insulance</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Thermal Resistance Upper Ontology --> + + <owl:Class rdf:about="&om;ThermalResistance"> + <rdfs:label xml:lang="en">thermal resistance</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Temperature Rate Upper Ontology --> + + <owl:Class rdf:about="&om;TemperatureRate"> + <rdfs:label xml:lang="en">temperature rate</rdfs:label> + <rdfs:label xml:lang="nl">temperatuur-rate</rdfs:label> + <om:unofficialLabel>heating rate</om:unofficialLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Heat Transfer Coefficient Upper Ontology --> + + <owl:Class rdf:about="&om;HeatTransferCoefficient"> + <rdfs:label xml:lang="en">heat transfer coefficient</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Volumetric Heat Capacity Upper Ontology --> + + <owl:Class rdf:about="&om;VolumetricHeatCapacity"> + <rdfs:label xml:lang="en">volumetric heat capacity</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Unit of Measure Ontologies --> + + <!-- Contents --> + + <!-- Kelvin Ontology --> + <!-- Kelvin Multiples and Submultiples Ontology --> + <!-- Degree Celsius Ontology --> + <!-- Degree Celsius Multiples and Submultiples Ontology --> + <!-- Temperature Unit Ontology --> + <!-- Joule Per Kelvin Ontology --> + <!-- Joule Per Kelvin Kilogram Ontology --> + <!-- Watt Per Metre Kelvin Ontology --> + <!-- Square Metre Kelvin Ontology --> + <!-- Square Metre Kelvin Per Watt Ontology --> + <!-- Watt Per Square Metre Kelvin Ontology --> + <!-- Temperature Rate Unit Ontology --> + <!-- Kelvin Gram Ontology --> + <!-- Metre Kelvin Ontology --> + <!-- Pascal Second Square Metre Ontology --> + <!-- Reciprocal Atmosphere Ontology --> + <!-- Degree Celsius Day Ontology --> + <!-- Reciprocal Kelvin Ontology --> + <!-- Reciprocal Degree Celsius Ontology --> + <!-- Reciprocal Degree Celsius Day Ontology --> + <!-- Cubic Metre Kelvin Ontology --> + <!-- Joule Per Cubic Metre Kelvin Ontology --> + + <!-- Kelvin Ontology --> + + <om:Unit rdf:about="&om;kelvin"> + <rdfs:label xml:lang="en">kelvin</rdfs:label> + <rdfs:label xml:lang="nl">kelvin</rdfs:label> + <!-- <rdfs:label xml:lang="zh">开尔文</rdfs:label> --> + <rdfs:label xml:lang="zh">开</rdfs:label> + <om:symbol>K</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:Unit> + + <owl:Thing rdf:about="&om;triplePointOfWater"> + <rdfs:label xml:lang="en">triple point of water</rdfs:label> + </owl:Thing> + + <ThermodynamicTemperature rdf:about="&om;_127316OfTheThermodynamicTemperatureOfTheTriplePointOfWater"> + <rdfs:label xml:lang="en">1/273.16 of the thermodynamic temperature of the triple point of water</rdfs:label> + </ThermodynamicTemperature> + + <om:Unit rdf:about="&om;kelvin"> + <rdfs:comment xml:lang="en">The kelvin is a unit of temperature defined as 1/273.16 of the thermodynamic temperature of the triple point of water.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:hasQuantity rdf:resource="&om;_127316OfTheThermodynamicTemperatureOfTheTriplePointOfWater"/> + </om:Unit> + + <owl:Class rdf:about="&om;Temperature"> + <om:commonlyHasUnit rdf:resource="&om;kelvin"/> + </owl:Class> + + <owl:Class rdf:about="&om;ThermodynamicTemperature"> + <om:commonlyHasUnit rdf:resource="&om;kelvin"/> + </owl:Class> + + <owl:Class rdf:about="&om;ThermodynamicTemperatureUnit"> + <rdfs:label xml:lang="en">thermodynamic temperature unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;TemperatureUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;kelvin"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedKelvin"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;TemperatureUnit"> + <rdfs:label xml:lang="en">temperature unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;degreeCelsius"/> + <om:Unit rdf:about="&om;degreeFahrenheit"/> + <om:Unit rdf:about="&om;degreeRankine"/> + <om:Unit rdf:about="&om;degreeReaumur"/> + <om:Unit rdf:about="&om;kelvin"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedDegreeCelsius"/> + <owl:Class rdf:about="&om;PrefixedKelvin"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <!-- Kelvin Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctokelvin"> + <rdfs:label xml:lang="en">yoctokelvin</rdfs:label> + <rdfs:label xml:lang="nl">yoctokelvin</rdfs:label> + <rdfs:comment xml:lang="en">The yoctokelvin is a unit of temperature defined as 1.0e-24 kelvin.</rdfs:comment> + <om:symbol>yK</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptokelvin"> + <rdfs:label xml:lang="en">zeptokelvin</rdfs:label> + <rdfs:label xml:lang="nl">zeptokelvin</rdfs:label> + <rdfs:comment xml:lang="en">The zeptkelvin is a unit of temperature defined as 1.0e-21 kelvin.</rdfs:comment> + <om:symbol>zK</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attokelvin"> + <rdfs:label xml:lang="en">attokelvin</rdfs:label> + <rdfs:label xml:lang="nl">attokelvin</rdfs:label> + <rdfs:comment xml:lang="en">The attokelvin is a unit of temperature defined as 1.0e-18 kelvin.</rdfs:comment> + <om:symbol>aK</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtokelvin"> + <rdfs:label xml:lang="en">femtokelvin</rdfs:label> + <rdfs:label xml:lang="nl">femtokelvin</rdfs:label> + <rdfs:comment xml:lang="en">The femtokelvin is a unit of temperature defined as 1.0e-15 kelvin.</rdfs:comment> + <om:symbol>fK</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picokelvin"> + <rdfs:label xml:lang="en">picokelvin</rdfs:label> + <rdfs:label xml:lang="nl">picokelvin</rdfs:label> + <rdfs:comment xml:lang="en">The picokelvin is a unit of temperature defined as 1.0e-12 kelvin.</rdfs:comment> + <om:symbol>pK</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanokelvin"> + <rdfs:label xml:lang="en">nanokelvin</rdfs:label> + <rdfs:label xml:lang="nl">nanokelvin</rdfs:label> + <rdfs:comment xml:lang="en">The nanokelvin is a unit of temperature defined as 1.0e-9 kelvin.</rdfs:comment> + <om:symbol>nK</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microkelvin"> + <rdfs:label xml:lang="en">microkelvin</rdfs:label> + <rdfs:label xml:lang="nl">microkelvin</rdfs:label> + <rdfs:comment xml:lang="en">The microkelvin is a unit of temperature defined as 1.0e-6 kelvin.</rdfs:comment> + <om:symbol>μK</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millikelvin"> + <rdfs:label xml:lang="en">millikelvin</rdfs:label> + <rdfs:label xml:lang="nl">millikelvin</rdfs:label> + <rdfs:comment xml:lang="en">The millikelvin is a unit of temperature defined as 1.0e-3 kelvin.</rdfs:comment> + <om:symbol>mK</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centikelvin"> + <rdfs:label xml:lang="en">centikelvin</rdfs:label> + <rdfs:label xml:lang="nl">centikelvin</rdfs:label> + <rdfs:comment xml:lang="en">The centikelvin is a unit of temperature defined as 1.0e-2 kelvin.</rdfs:comment> + <om:symbol>cK</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decikelvin"> + <rdfs:label xml:lang="en">decikelvin</rdfs:label> + <rdfs:label xml:lang="nl">decikelvin</rdfs:label> + <rdfs:comment xml:lang="en">The decikelvin is a unit of temperature defined as 1.0e-1 kelvin.</rdfs:comment> + <om:symbol>dK</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decakelvin"> + <rdfs:label xml:lang="en">decakelvin</rdfs:label> + <rdfs:label xml:lang="nl">decakelvin</rdfs:label> + <rdfs:comment xml:lang="en">The decakelvin is a unit of thermodynamic temperature defined as 1.0e1 kelvin.</rdfs:comment> + <om:symbol>daK</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectokelvin"> + <rdfs:label xml:lang="en">hectokelvin</rdfs:label> + <rdfs:label xml:lang="nl">hectokelvin</rdfs:label> + <rdfs:comment xml:lang="en">The hectokelvin is a unit of thermodynamic temperature defined as 1.0e2 kelvin.</rdfs:comment> + <om:symbol>hK</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilokelvin"> + <rdfs:label xml:lang="en">kilokelvin</rdfs:label> + <rdfs:label xml:lang="nl">kilokelvin</rdfs:label> + <rdfs:comment xml:lang="en">The kilokelvin is a unit of thermodynamic temperature defined as 1.0e3 kelvin.</rdfs:comment> + <om:symbol>kK</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megakelvin"> + <rdfs:label xml:lang="en">megakelvin</rdfs:label> + <rdfs:label xml:lang="nl">megakelvin</rdfs:label> + <rdfs:comment xml:lang="en">The megakelvin is a unit of thermodynamic temperature defined as 1.0e6 kelvin.</rdfs:comment> + <om:symbol>MK</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigakelvin"> + <rdfs:label xml:lang="en">gigakelvin</rdfs:label> + <rdfs:label xml:lang="nl">gigakelvin</rdfs:label> + <rdfs:comment xml:lang="en">The gigakelvin is a unit of thermodynamic temperature defined as 1.0e9 kelvin.</rdfs:comment> + <om:symbol>GK</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;terakelvin"> + <rdfs:label xml:lang="en">terakelvin</rdfs:label> + <rdfs:label xml:lang="nl">terakelvin</rdfs:label> + <rdfs:comment xml:lang="en">The terakelvin is a unit of thermodynamic temperature defined as 1.0e12 kelvin.</rdfs:comment> + <om:symbol>TK</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petakelvin"> + <rdfs:label xml:lang="en">petakelvin</rdfs:label> + <rdfs:label xml:lang="nl">petakelvin</rdfs:label> + <rdfs:comment xml:lang="en">The petakelvin is a unit of thermodynamic temperature defined as 1.0e15 kelvin.</rdfs:comment> + <om:symbol>PK</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exakelvin"> + <rdfs:label xml:lang="en">exakelvin</rdfs:label> + <rdfs:label xml:lang="nl">exakelvin</rdfs:label> + <rdfs:comment xml:lang="en">The exakelvin is a unit of thermodynamic temperature defined as 1.0e18 kelvin.</rdfs:comment> + <om:symbol>EK</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettakelvin"> + <rdfs:label xml:lang="en">zettakelvin</rdfs:label> + <rdfs:label xml:lang="nl">zettakelvin</rdfs:label> + <rdfs:comment xml:lang="en">The zettakelvin is a unit of thermodynamic temperature defined as 1.0e21 kelvin.</rdfs:comment> + <om:symbol>ZK</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottakelvin"> + <rdfs:label xml:lang="en">yottakelvin</rdfs:label> + <rdfs:label xml:lang="nl">yottakelvin</rdfs:label> + <rdfs:comment xml:lang="en">The yottakelvin is a unit of thermodynamic temperature defined as 1.0e24 kelvin.</rdfs:comment> + <om:symbol>YK</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedKelvin"> + <rdfs:label xml:lang="en">prefixed kelvin</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;kelvin"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Temperature"> + <om:commonlyHasUnit rdf:resource="&om;attokelvin"/> + <om:commonlyHasUnit rdf:resource="&om;centikelvin"/> + <om:commonlyHasUnit rdf:resource="&om;decakelvin"/> + <om:commonlyHasUnit rdf:resource="&om;decikelvin"/> + <om:commonlyHasUnit rdf:resource="&om;exakelvin"/> + <om:commonlyHasUnit rdf:resource="&om;femtokelvin"/> + <om:commonlyHasUnit rdf:resource="&om;gigakelvin"/> + <om:commonlyHasUnit rdf:resource="&om;hectokelvin"/> + <om:commonlyHasUnit rdf:resource="&om;kilokelvin"/> + <om:commonlyHasUnit rdf:resource="&om;megakelvin"/> + <om:commonlyHasUnit rdf:resource="&om;microkelvin"/> + <om:commonlyHasUnit rdf:resource="&om;millikelvin"/> + <om:commonlyHasUnit rdf:resource="&om;nanokelvin"/> + <om:commonlyHasUnit rdf:resource="&om;petakelvin"/> + <om:commonlyHasUnit rdf:resource="&om;picokelvin"/> + <om:commonlyHasUnit rdf:resource="&om;terakelvin"/> + </owl:Class> + + <owl:Class rdf:about="&om;ThermodynamicTemperature"> + <om:commonlyHasUnit rdf:resource="&om;attokelvin"/> + <om:commonlyHasUnit rdf:resource="&om;centikelvin"/> + <om:commonlyHasUnit rdf:resource="&om;decakelvin"/> + <om:commonlyHasUnit rdf:resource="&om;decikelvin"/> + <om:commonlyHasUnit rdf:resource="&om;exakelvin"/> + <om:commonlyHasUnit rdf:resource="&om;femtokelvin"/> + <om:commonlyHasUnit rdf:resource="&om;gigakelvin"/> + <om:commonlyHasUnit rdf:resource="&om;hectokelvin"/> + <om:commonlyHasUnit rdf:resource="&om;kilokelvin"/> + <om:commonlyHasUnit rdf:resource="&om;megakelvin"/> + <om:commonlyHasUnit rdf:resource="&om;microkelvin"/> + <om:commonlyHasUnit rdf:resource="&om;millikelvin"/> + <om:commonlyHasUnit rdf:resource="&om;nanokelvin"/> + <om:commonlyHasUnit rdf:resource="&om;petakelvin"/> + <om:commonlyHasUnit rdf:resource="&om;picokelvin"/> + <om:commonlyHasUnit rdf:resource="&om;terakelvin"/> + </owl:Class> + + <!-- Degree Celsius Ontology --> + + <om:Unit rdf:about="&om;degreeCelsius"> + <rdfs:label xml:lang="en">degree Celsius</rdfs:label> + <rdfs:label xml:lang="nl">graad Celsius</rdfs:label> + <!-- <rdfs:label xml:lang="zh">摄氏温标</rdfs:label> --> + <rdfs:label xml:lang="zh">摄氏度</rdfs:label> + <om:alternativeLabel xml:lang="en">centigrade</om:alternativeLabel> + <rdfs:comment xml:lang="en">The degree Celsius is a unit of temperature defined as 1 kelvin.</rdfs:comment> + <om:longcomment xml:lang="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.</om:longcomment> + <om:symbol>°C</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;Temperature"> + <om:commonlyHasUnit rdf:resource="&om;degreeCelsius"/> + </owl:Class> + + <owl:Class rdf:about="&om;CelsiusTemperature"> + <om:commonlyHasUnit rdf:resource="&om;degreeCelsius"/> + </owl:Class> + + <owl:Class rdf:about="&om;CelsiusTemperatureUnit"> + <rdfs:label xml:lang="en">Celsius temperature unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;TemperatureUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;degreeCelsius"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedDegreeCelsius"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <!-- Degree Celsius Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctodegreeCelsius"> + <rdfs:label xml:lang="en">yoctodegree Celsius</rdfs:label> + <rdfs:label xml:lang="nl">yoctograad Celsius</rdfs:label> + <rdfs:comment xml:lang="en">The yoctodegree Celsius is a unit of temperature defined as 1.0e-24 degree Celsius.</rdfs:comment> + <om:symbol>y°C</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;degreeCelsius"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptodegreeCelsius"> + <rdfs:label xml:lang="en">zeptodegree Celsius</rdfs:label> + <rdfs:label xml:lang="nl">zeptograad Celsius</rdfs:label> + <rdfs:comment xml:lang="en">The zeptdegree Celsius is a unit of temperature defined as 1.0e-21 degree Celsius.</rdfs:comment> + <om:symbol>z°C</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;degreeCelsius"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attodegreeCelsius"> + <rdfs:label xml:lang="en">attodegree Celsius</rdfs:label> + <rdfs:label xml:lang="nl">attograad Celsius</rdfs:label> + <rdfs:comment xml:lang="en">The attodegree Celsius is a unit of temperature defined as 1.0e-18 degree Celsius.</rdfs:comment> + <om:symbol>a°C</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;degreeCelsius"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtodegreeCelsius"> + <rdfs:label xml:lang="en">femtodegree Celsius</rdfs:label> + <rdfs:label xml:lang="nl">femtograad Celsius</rdfs:label> + <rdfs:comment xml:lang="en">The femtodegree Celsius is a unit of temperature defined as 1.0e-15 degree Celsius.</rdfs:comment> + <om:symbol>f°C</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;degreeCelsius"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picodegreeCelsius"> + <rdfs:label xml:lang="en">picodegree Celsius</rdfs:label> + <rdfs:label xml:lang="nl">picograad Celsius</rdfs:label> + <rdfs:comment xml:lang="en">The picodegree Celsius is a unit of temperature defined as 1.0e-12 degree Celsius.</rdfs:comment> + <om:symbol>p°C</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;degreeCelsius"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanodegreeCelsius"> + <rdfs:label xml:lang="en">nanodegree Celsius</rdfs:label> + <rdfs:label xml:lang="nl">nanograad Celsius</rdfs:label> + <rdfs:comment xml:lang="en">The nanodegree Celsius is a unit of temperature defined as 1.0e-9 degree Celsius.</rdfs:comment> + <om:symbol>n°C</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;degreeCelsius"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microdegreeCelsius"> + <rdfs:label xml:lang="en">microdegree Celsius</rdfs:label> + <rdfs:label xml:lang="nl">micrograad Celsius</rdfs:label> + <rdfs:comment xml:lang="en">The microdegree Celsius is a unit of temperature defined as 1.0e-6 degree Celsius.</rdfs:comment> + <om:symbol>μ°C</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;degreeCelsius"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millidegreeCelsius"> + <rdfs:label xml:lang="en">millidegree Celsius</rdfs:label> + <rdfs:label xml:lang="nl">milligraad Celsius</rdfs:label> + <rdfs:comment xml:lang="en">The millidegree Celsius is a unit of temperature defined as 1.0e-3 degree Celsius.</rdfs:comment> + <om:symbol>m°C</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;degreeCelsius"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centidegreeCelsius"> + <rdfs:label xml:lang="en">centidegree Celsius</rdfs:label> + <rdfs:label xml:lang="nl">centigraad Celsius</rdfs:label> + <rdfs:comment xml:lang="en">The centidegree Celsius is a unit of temperature defined as 1.0e-2 degree Celsius.</rdfs:comment> + <om:symbol>c°C</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;degreeCelsius"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decidegreeCelsius"> + <rdfs:label xml:lang="en">decidegree Celsius</rdfs:label> + <rdfs:label xml:lang="nl">decigraad Celsius</rdfs:label> + <rdfs:comment xml:lang="en">The decidegree Celsius is a unit of temperature defined as 1.0e-1 degree Celsius.</rdfs:comment> + <om:symbol>d°C</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;degreeCelsius"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedDegreeCelsius"> + <rdfs:label xml:lang="en">prefixed degree Celsius</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;degreeCelsius"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Temperature"> + <om:commonlyHasUnit rdf:resource="&om;attodegreeCelsius"/> + <om:commonlyHasUnit rdf:resource="&om;centidegreeCelsius"/> + <om:commonlyHasUnit rdf:resource="&om;decidegreeCelsius"/> + <om:commonlyHasUnit rdf:resource="&om;femtodegreeCelsius"/> + <om:commonlyHasUnit rdf:resource="&om;microdegreeCelsius"/> + <om:commonlyHasUnit rdf:resource="&om;millidegreeCelsius"/> + <om:commonlyHasUnit rdf:resource="&om;nanodegreeCelsius"/> + <om:commonlyHasUnit rdf:resource="&om;picodegreeCelsius"/> + </owl:Class> + + <owl:Class rdf:about="&om;CelsiusTemperature"> + <om:commonlyHasUnit rdf:resource="&om;attodegreeCelsius"/> + <om:commonlyHasUnit rdf:resource="&om;centidegreeCelsius"/> + <om:commonlyHasUnit rdf:resource="&om;decidegreeCelsius"/> + <om:commonlyHasUnit rdf:resource="&om;femtodegreeCelsius"/> + <om:commonlyHasUnit rdf:resource="&om;microdegreeCelsius"/> + <om:commonlyHasUnit rdf:resource="&om;millidegreeCelsius"/> + <om:commonlyHasUnit rdf:resource="&om;nanodegreeCelsius"/> + <om:commonlyHasUnit rdf:resource="&om;picodegreeCelsius"/> + </owl:Class> + + <!-- Temperature Unit Ontology --> + + <om:Unit rdf:about="&om;degreeFahrenheit"> + <rdfs:label xml:lang="en">degree Fahrenheit</rdfs:label> + <rdfs:label xml:lang="nl">graad Fahrenheit</rdfs:label> + <rdfs:comment xml:lang="en">The degree Fahrenheit is a unit of temperature defined as 5.555556e-1 kelvin.</rdfs:comment> + <om:symbol>°F</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.5555556</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;degreeRankine"> + <rdfs:label xml:lang="en">degree Rankine</rdfs:label> + <rdfs:label xml:lang="nl">graad Rankine</rdfs:label> + <rdfs:comment xml:lang="en">The degree Rankine is a unit of temperature defined as 5.555556e-1 kelvin.</rdfs:comment> + <om:symbol>°R</om:symbol> + <om:alternativeSymbol>°Ra</om:alternativeSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.5555556</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;degreeReaumur"> + <rdfs:label xml:lang="en">degree Réaumur</rdfs:label> + <rdfs:label xml:lang="nl">graad Réaumur</rdfs:label> + <rdfs:comment xml:lang="en">The degree Réaumur is a unit of temperature defined as 1.25 kelvin.</rdfs:comment> + <om:symbol>°Ré</om:symbol> + <om:alternativeSymbol>°Re</om:alternativeSymbol> + <om:alternativeSymbol>°R</om:alternativeSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">1.25</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.25Kelvin"> + <om:hasNumericalValue>1.25</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kelvin"/> + </om:Measure> + + <om:Measure rdf:about="&om;_5.555556e-1Kelvin"> + <om:hasNumericalValue>5.555556e-1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kelvin"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Temperature"> + <om:commonlyHasUnit rdf:resource="&om;degreeFahrenheit"/> + <om:commonlyHasUnit rdf:resource="&om;degreeRankine"/> + <om:commonlyHasUnit rdf:resource="&om;degreeReaumur"/> + </owl:Class> + + <owl:Class rdf:about="&om;FahrenheitTemperature"> + <om:commonlyHasUnit rdf:resource="&om;degreeFahrenheit"/> + </owl:Class> + + <owl:Class rdf:about="&om;RankineTemperature"> + <om:commonlyHasUnit rdf:resource="&om;degreeRankine"/> + </owl:Class> + + <owl:Class rdf:about="&om;ReaumurTemperature"> + <om:commonlyHasUnit rdf:resource="&om;degreeReaumur"/> + </owl:Class> + + <owl:Class rdf:about="&om;FahrenheitTemperatureUnit"> + <rdfs:label xml:lang="en">Fahrenheit temperature unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;TemperatureUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;degreeFahrenheit"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;RankineTemperatureUnit"> + <rdfs:label xml:lang="en">Rankine temperature unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;TemperatureUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;degreeRankine"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ReaumurTemperatureUnit"> + <rdfs:label xml:lang="en">Réaumur temperature unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;TemperatureUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;degreeReaumur"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <!-- Joule Per Kelvin Ontology --> + + <om:UnitDivision rdf:about="&om;joulePerKelvin"> + <rdfs:label xml:lang="en">joule per kelvin</rdfs:label> + <rdfs:label xml:lang="nl">joule per kelvin</rdfs:label> + <om:symbol>J/K</om:symbol> + <om:alternativeSymbol>J K-1</om:alternativeSymbol> + <om:alternativeSymbol>J·K-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;joule"/> + <om:hasDenominator rdf:resource="&om;kelvin"/> + <om:hasDimension rdf:resource="&om;entropyOrHeatCapacity-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Entropy"> + <om:commonlyHasUnit rdf:resource="&om;joulePerKelvin"/> + </owl:Class> + + <owl:Class rdf:about="&om;HeatCapacity"> + <om:commonlyHasUnit rdf:resource="&om;joulePerKelvin"/> + </owl:Class> + + <owl:Class rdf:about="&om;EntropyUnit"> + <rdfs:label xml:lang="en">entropy unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;joulePerKelvin"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;HeatCapacityUnit"> + <rdfs:label xml:lang="en">heat capacity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;joulePerKelvin"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Entropy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;EntropyUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;HeatCapacity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;HeatCapacityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Joule Per Kelvin Kilogram Ontology --> + + <om:UnitDivision rdf:about="&om;joulePerKelvinKilogram"> + <rdfs:label xml:lang="en">joule per kelvin kilogram</rdfs:label> + <rdfs:label xml:lang="nl">joule per kelvin kilogram</rdfs:label> + <om:symbol>J/(K kg)</om:symbol> + <om:alternativeSymbol>J/(K·kg)</om:alternativeSymbol> + <om:alternativeSymbol>J K-1 kg-1</om:alternativeSymbol> + <om:alternativeSymbol>J·K-1·kg-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;joule"/> + <om:hasDenominator rdf:resource="&om;kelvinKilogram"/> + <om:hasDimension rdf:resource="&om;specificEntropyOrSpecificHeatCapacity-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;SpecificEntropy"> + <om:commonlyHasUnit rdf:resource="&om;joulePerKelvinKilogram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificHeatCapacity"> + <om:commonlyHasUnit rdf:resource="&om;joulePerKelvinKilogram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificEntropyUnit"> + <rdfs:label xml:lang="en">specific entropy unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;joulePerKelvinKilogram"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificHeatCapacityUnit"> + <rdfs:label xml:lang="en">specific heat capacity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;joulePerKelvinKilogram"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificEntropy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;SpecificEntropyUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificHeatCapacity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;SpecificHeatCapacityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Watt Per Metre Kelvin Ontology --> + + <om:UnitDivision rdf:about="&om;wattPerMetreKelvin"> + <rdfs:label xml:lang="en">watt per metre kelvin</rdfs:label> + <rdfs:label xml:lang="nl">watt per meter kelvin</rdfs:label> + <om:symbol>W/(m K)</om:symbol> + <om:alternativeSymbol>W/(m·K)</om:alternativeSymbol> + <om:alternativeSymbol>W m-1 K-1</om:alternativeSymbol> + <om:alternativeSymbol>W·m-1·K-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;watt"/> + <om:hasDenominator rdf:resource="&om;metreKelvin"/> + <om:hasDimension rdf:resource="&om;thermalConductivity-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;ThermalConductivity"> + <om:commonlyHasUnit rdf:resource="&om;wattPerMetreKelvin"/> + </owl:Class> + + <owl:Class rdf:about="&om;ThermalConductivityUnit"> + <rdfs:label xml:lang="en">thermal conductivity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;wattPerMetreKelvin"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ThermalConductivity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ThermalConductivityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Square Metre Kelvin Ontology --> + + <om:UnitMultiplication rdf:about="&om;squareMetreKelvin"> + <rdfs:label xml:lang="en">square metre kelvin</rdfs:label> + <rdfs:label xml:lang="nl">vierkante meter kelvin</rdfs:label> + <om:symbol>m2 K</om:symbol> + <om:alternativeSymbol>m2·K</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;squareMetre"/> + <hasTerm2 rdf:resource="&om;kelvin"/> + </om:UnitMultiplication> + + <!-- Square Metre Kelvin Per Watt Ontology --> + + <om:UnitDivision rdf:about="&om;squareMetreKelvinPerWatt"> + <rdfs:label xml:lang="en">square metre kelvin per watt</rdfs:label> + <rdfs:label xml:lang="nl">vierkante meter kelvin per watt</rdfs:label> + <om:symbol>m2 K/W</om:symbol> + <om:alternativeSymbol>m2·K/W</om:alternativeSymbol> + <om:alternativeSymbol>m2 K W-1</om:alternativeSymbol> + <om:alternativeSymbol>m2·K·W-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;squareMetreKelvin"/> + <om:hasDenominator rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;thermalInsulance-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;ThermalInsulance"> + <om:commonlyHasUnit rdf:resource="&om;squareMetreKelvinPerWatt"/> + </owl:Class> + + <owl:Class rdf:about="&om;ThermalInsulanceUnit"> + <rdfs:label xml:lang="en">thermal insulance unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;squareMetreKelvinPerWatt"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ThermalInsulance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ThermalInsulanceUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Kelvin Per Watt Ontology --> + + <om:UnitDivision rdf:about="&om;kelvinPerWatt"> + <rdfs:label xml:lang="en">kelvin per watt</rdfs:label> + <rdfs:label xml:lang="nl">kelvin per watt</rdfs:label> + <om:symbol>K/W</om:symbol> + <om:alternativeSymbol>K W-1</om:alternativeSymbol> + <om:alternativeSymbol>K·W-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kelvin"/> + <om:hasDenominator rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;thermalResistance-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;ThermalResistance"> + <om:commonlyHasUnit rdf:resource="&om;kelvinPerWatt"/> + </owl:Class> + + <owl:Class rdf:about="&om;ThermalResistanceUnit"> + <rdfs:label xml:lang="en">thermal resistance unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;kelvinPerWatt"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ThermalResistance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ThermalResistanceUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Watt Per Square Metre Kelvin Ontology --> + + <om:UnitDivision rdf:about="&om;wattPerSquareMetreKelvin"> + <rdfs:label xml:lang="en">watt per square metre kelvin</rdfs:label> + <rdfs:label xml:lang="nl">watt per vierkante meter kelvin</rdfs:label> + <om:symbol>W/m2 K</om:symbol> + <om:alternativeSymbol>W/(m2·K)</om:alternativeSymbol> + <om:alternativeSymbol>W-1 m2 K</om:alternativeSymbol> + <om:alternativeSymbol>W-1·m2·K</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;watt"/> + <om:hasDenominator rdf:resource="&om;squareMetreKelvin"/> + <om:hasDimension rdf:resource="&om;heatTransferCoefficient-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;HeatTransferCoefficient"> + <om:commonlyHasUnit rdf:resource="&om;wattPerSquareMetreKelvin"/> + </owl:Class> + + <owl:Class rdf:about="&om;HeatTransferCoefficientUnit"> + <rdfs:label xml:lang="en">heat transfer coefficient unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;wattPerSquareMetreKelvin"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;HeatTransferCoefficient"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;HeatTransferCoefficientUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Temperature Rate Unit Ontology --> + + <om:UnitDivision rdf:about="&om;degreeCelsiusPerHour"> + <rdfs:label xml:lang="en">degree Celsius per hour</rdfs:label> + <rdfs:label xml:lang="nl">graad Celsius per uur</rdfs:label> + <om:symbol>°C/h</om:symbol> + <om:alternativeSymbol>°C h-1</om:alternativeSymbol> + <om:alternativeSymbol>°C·h-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;degreeCelsius"/> + <om:hasDenominator rdf:resource="&om;hour"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;degreeCelsiusPerMinute-Time"> + <rdfs:label xml:lang="en">degree Celsius per minute</rdfs:label> + <rdfs:label xml:lang="nl">graad Celsius per minuut</rdfs:label> + <om:symbol>°C/min</om:symbol> + <om:alternativeSymbol>°C min-1</om:alternativeSymbol> + <om:alternativeSymbol>°C·min-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;degreeCelsius"/> + <om:hasDenominator rdf:resource="&om;minute-Time"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;degreeCelsiusPerSecond-Time"> + <rdfs:label xml:lang="en">degree Celsius per second</rdfs:label> + <rdfs:label xml:lang="nl">graad Celsius per seconde</rdfs:label> + <om:symbol>°C/s</om:symbol> + <om:alternativeSymbol>°C s-1</om:alternativeSymbol> + <om:alternativeSymbol>°C·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;degreeCelsius"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;TemperatureRate"> + <om:commonlyHasUnit rdf:resource="&om;degreeCelsiusPerHour"/> + <om:commonlyHasUnit rdf:resource="&om;degreeCelsiusPerMinute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;degreeCelsiusPerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;TemperatureRateUnit"> + <rdfs:label xml:lang="en">temperature rate unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;degreeCelsiusPerHour"/> + <om:UnitDivision rdf:about="&om;degreeCelsiusPerMinute-Time"/> + <om:UnitDivision rdf:about="&om;degreeCelsiusPerSecond-Time"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;TemperatureRate"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;TemperatureRateUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Kelvin Gram Ontology --> + + <om:UnitMultiplication rdf:about="&om;kelvinKilogram"> + <rdfs:label xml:lang="en">kelvin kilogram</rdfs:label> + <rdfs:label xml:lang="nl">kelvin kilogram</rdfs:label> + <om:symbol>K kg</om:symbol> + <om:alternativeSymbol>K·kg</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;kelvin"/> + <hasTerm2 rdf:resource="&om;kilogram"/> + </om:UnitMultiplication> + + <!-- Metre Kelvin Ontology --> + + <om:UnitMultiplication rdf:about="&om;metreKelvin"> + <rdfs:label xml:lang="en">metre kelvin</rdfs:label> + <rdfs:label xml:lang="nl">meter kelvin</rdfs:label> + <om:symbol>m K</om:symbol> + <om:alternativeSymbol>m·K</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;metre"/> + <hasTerm2 rdf:resource="&om;kelvin"/> + </om:UnitMultiplication> + + <!-- Pascal Second Square Metre Ontology --> + + <om:UnitMultiplication rdf:about="&om;pascalSecond-TimeSquareMetre"> + <rdfs:label xml:lang="en">pascal second square metre</rdfs:label> + <rdfs:label xml:lang="nl">pascal seconde vierkante meter</rdfs:label> + <om:symbol>Pa s m2</om:symbol> + <om:alternativeSymbol>Pa·s·m2</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;pascalSecond-Time"/> + <hasTerm2 rdf:resource="&om;squareMetre"/> + </om:UnitMultiplication> + + <!-- Reciprocal Atmosphere Ontology --> + + <om:UnitExponentiation rdf:about="&om;reciprocalAtmosphere-Standard"> + <rdfs:label xml:lang="en">reciprocal atmosphere (standard)</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde atmosfeer (standaard)</rdfs:label> + <om:symbol>atm-1</om:symbol> + <om:hasBase rdf:resource="&om;atmosphere-Standard"/> + <om:hasExponent rdf:datatype="&xsd;integer">-1</om:hasExponent> + </om:UnitExponentiation> + + <!-- Degree Celsius Day Ontology --> + + <om:UnitMultiplication rdf:about="&om;degreeCelsiusDay"> + <rdfs:label xml:lang="en">degree Celsius day</rdfs:label> + <rdfs:label xml:lang="nl">graad Celsius dag</rdfs:label> + <om:symbol>°C d</om:symbol> + <om:alternativeSymbol>°C·d</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;degreeCelsius"/> + <hasTerm2 rdf:resource="&om;day"/> + </om:UnitMultiplication> + + <!-- Reciprocal Kelvin Ontology --> + + <om:UnitExponentiation rdf:about="&om;reciprocalKelvin"> + <rdfs:label xml:lang="en">reciprocal kelvin</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde kelvin</rdfs:label> + <om:symbol>K-1</om:symbol> + <om:hasBase rdf:resource="&om;kelvin"/> + <om:hasExponent rdf:datatype="&xsd;integer">-1</om:hasExponent> + </om:UnitExponentiation> + + <!-- Reciprocal Degree Celsius Ontology --> + + <om:UnitExponentiation rdf:about="&om;reciprocalDegreeCelsius"> + <rdfs:label xml:lang="en">reciprocal degree Celsius</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde graad Celsius</rdfs:label> + <om:symbol>°C-1</om:symbol> + <om:hasBase rdf:resource="&om;degreeCelsius"/> + <om:hasExponent rdf:datatype="&xsd;integer">-1</om:hasExponent> + </om:UnitExponentiation> + + <!-- Reciprocal Degree Celsius Day Ontology --> + + <om:UnitExponentiation rdf:about="&om;reciprocalDegreeCelsiusDay"> + <rdfs:label xml:lang="en">reciprocal degree Celsius day</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde graad Celsius dag</rdfs:label> + <om:symbol>(°C d)-1</om:symbol> + <om:hasBase rdf:resource="&om;degreeCelsiusDay"/> + <om:hasExponent rdf:datatype="&xsd;integer">-1</om:hasExponent> + </om:UnitExponentiation> + + <!-- Cubic Metre Kelvin Ontology --> + + <om:UnitMultiplication rdf:about="&om;cubicMetreKelvin"> + <rdfs:label xml:lang="en">cubic metre kelvin</rdfs:label> + <om:symbol>m3 K</om:symbol> + <om:alternativeSymbol>m3·K</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;cubicMetre"/> + <hasTerm2 rdf:resource="&om;kelvin"/> + </om:UnitMultiplication> + + <!-- Joule Per Cubic Metre Kelvin Ontology --> + + <om:UnitDivision rdf:about="&om;joulePerCubicMetreKelvin"> + <rdfs:label xml:lang="en">joule per cubic metre kelvin</rdfs:label> + <rdfs:label xml:lang="nl">joule per kubieke meter kelvin</rdfs:label> + <om:symbol>J/m3 K</om:symbol> + <om:alternativeSymbol>J/(m3·K)</om:alternativeSymbol> + <om:alternativeSymbol>J-1 m3 K</om:alternativeSymbol> + <om:alternativeSymbol>J-1·m3·K</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;joule"/> + <om:hasDenominator rdf:resource="&om;cubicMetreKelvin"/> + <om:hasDimension rdf:resource="&om;volumetricHeatCapacity-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;VolumetricHeatCapacity"> + <om:commonlyHasUnit rdf:resource="&om;joulePerCubicMetreKelvin"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricHeatCapacityUnit"> + <rdfs:label xml:lang="en">volumetric heat capacity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;joulePerCubicMetreKelvin"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricHeatCapacity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;VolumetricHeatCapacityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Measurement Scale Ontologies --> + + <!-- Contents --> + + <!-- Kelvin Scale Ontology --> + <!-- Celsius Scale Ontology --> + <!-- Temperature Scale Ontology --> + + <!-- Kelvin Scale Ontology --> + + <om:RatioScale rdf:about="&om;KelvinScale"> + <rdfs:label xml:lang="en">Kelvin scale</rdfs:label> + <rdfs:label xml:lang="nl">Kelvinschaal</rdfs:label> + <rdfs:label xml:lang="zh">开氏温标</rdfs:label> + <om:alternativeLabel xml:lang="en">International Kelvin Temperature scale of 1990</om:alternativeLabel> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:RatioScale> + + <ThermodynamicTemperature rdf:about="&om;thermodynamicTemperatureOfTheTriplePointOfWater"> + <rdfs:label xml:lang="en">triple point of water thermodynamic temperature</rdfs:label> + <om:hasPhenomenon rdf:resource="&om;triplePointOfWater"/> + </ThermodynamicTemperature> + + <om:FixedPoint rdf:about="&om;_3To5OnTheKelvinScale"> + <rdfs:label xml:lang="en">3 to 5 on the Kelvin scale</rdfs:label> + <om:hasNumericalValue>3 to 5</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <!-- hasDefinition --> <!-- <om:hasQuantity rdf:resource="&om;"/> --> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_13.8033OnTheKelvinScale"> + <rdfs:label xml:lang="en">13.8033 on the Kelvin scale</rdfs:label> + <om:hasNumericalValue>13.8033</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <!-- hasDefinition --> <!-- <om:hasQuantity rdf:resource="&om;"/> --> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;approximately17OnTheKelvinScale"> + <rdfs:label xml:lang="en">~17 on the Kelvin scale</rdfs:label> + <om:hasNumericalValue>~17</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <!-- hasDefinition --> <!-- <om:hasQuantity rdf:resource="&om;"/> --> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;approximately203OnTheKelvinScale"> + <rdfs:label xml:lang="en">~20.3 on the Kelvin scale</rdfs:label> + <om:hasNumericalValue>~20.3</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <!-- hasDefinition --> <!-- <om:hasQuantity rdf:resource="&om;"/> --> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_24.5561OnTheKelvinScale"> + <rdfs:label xml:lang="en">24.5561 on the Kelvin scale</rdfs:label> + <om:hasNumericalValue>24.5561</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <!-- hasDefinition --> <!-- <om:hasQuantity rdf:resource="&om;"/> --> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_54.3584OnTheKelvinScale"> + <rdfs:label xml:lang="en">54.3584 on the Kelvin scale</rdfs:label> + <om:hasNumericalValue>54.3584</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <!-- hasDefinition --> <!-- <om:hasQuantity rdf:resource="&om;"/> --> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_83.8058OnTheKelvinScale"> + <rdfs:label xml:lang="en">83.8058 on the Kelvin scale</rdfs:label> + <om:hasNumericalValue>83.8058</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <!-- hasDefinition --> <!-- <om:hasQuantity rdf:resource="&om;"/> --> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_234.3156OnTheKelvinScale"> + <rdfs:label xml:lang="en">234.3156 on the Kelvin scale</rdfs:label> + <om:hasNumericalValue>234.3156</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <!-- hasDefinition --> <!-- <om:hasQuantity rdf:resource="&om;"/> --> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_273.16OnTheKelvinScale"> + <rdfs:label xml:lang="en">273.16 on the Kelvin scale</rdfs:label> + <om:hasNumericalValue>273.16</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <!-- hasDefinition --> <om:hasQuantity rdf:resource="&om;thermodynamicTemperatureOfTheTriplePointOfWater"/> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_302.9146OnTheKelvinScale"> + <rdfs:label xml:lang="en">302.9146 on the Kelvin scale</rdfs:label> + <om:hasNumericalValue>302.9146</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <!-- hasDefinition --> <!-- <om:hasQuantity rdf:resource="&om;"/> --> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_429.7485OnTheKelvinScale"> + <rdfs:label xml:lang="en">429.7485 on the Kelvin scale</rdfs:label> + <om:hasNumericalValue>429.7485</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <!-- hasDefinition --> <!-- <om:hasQuantity rdf:resource="&om;"/> --> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_505.078OnTheKelvinScale"> + <rdfs:label xml:lang="en">505.078 on the Kelvin scale</rdfs:label> + <om:hasNumericalValue>505.078</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <!-- hasDefinition --> <!-- <om:hasQuantity rdf:resource="&om;"/> --> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_692.677OnTheKelvinScale"> + <rdfs:label xml:lang="en">692.677 on the Kelvin scale</rdfs:label> + <om:hasNumericalValue>692.677</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <!-- hasDefinition --> <!-- <om:hasQuantity rdf:resource="&om;"/> --> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_933.473OnTheKelvinScale"> + <rdfs:label xml:lang="en">933.473 on the Kelvin scale</rdfs:label> + <om:hasNumericalValue>933.473</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <!-- hasDefinition --> <!-- <om:hasQuantity rdf:resource="&om;"/> --> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_1234.93OnTheKelvinScale"> + <rdfs:label xml:lang="en">1234.93 on the Kelvin scale</rdfs:label> + <om:hasNumericalValue>1234.93</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <!-- hasDefinition --> <!-- <om:hasQuantity rdf:resource="&om;"/> --> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_1337.33OnTheKelvinScale"> + <rdfs:label xml:lang="en">1337.33 on the Kelvin scale</rdfs:label> + <om:hasNumericalValue>1337.33</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <!-- hasDefinition --> <!-- <om:hasQuantity rdf:resource="&om;"/> --> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_1357.77OnTheKelvinScale"> + <rdfs:label xml:lang="en">1357.77 on the Kelvin scale</rdfs:label> + <om:hasNumericalValue>1357.77</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <!-- hasDefinition --> <!-- <om:hasQuantity rdf:resource="&om;"/> --> + </om:FixedPoint> + + <om:RatioScale rdf:about="&om;KelvinScale"> + <om:hasPoint rdf:resource="&om;_3To5OnTheKelvinScale"/> + <om:hasPoint rdf:resource="&om;_13.8033OnTheKelvinScale"/> + <om:hasPoint rdf:resource="&om;approximately17OnTheKelvinScale"/> + <om:hasPoint rdf:resource="&om;approximately203OnTheKelvinScale"/> + <om:hasPoint rdf:resource="&om;_24.5561OnTheKelvinScale"/> + <om:hasPoint rdf:resource="&om;_54.3584OnTheKelvinScale"/> + <om:hasPoint rdf:resource="&om;_83.8058OnTheKelvinScale"/> + <om:hasPoint rdf:resource="&om;_234.3156OnTheKelvinScale"/> + <om:hasPoint rdf:resource="&om;_273.16OnTheKelvinScale"/> + <om:hasPoint rdf:resource="&om;_302.9146OnTheKelvinScale"/> + <om:hasPoint rdf:resource="&om;_429.7485OnTheKelvinScale"/> + <om:hasPoint rdf:resource="&om;_505.078OnTheKelvinScale"/> + <om:hasPoint rdf:resource="&om;_692.677OnTheKelvinScale"/> + <om:hasPoint rdf:resource="&om;_933.473OnTheKelvinScale"/> + <om:hasPoint rdf:resource="&om;_1234.93OnTheKelvinScale"/> + <om:hasPoint rdf:resource="&om;_1337.33OnTheKelvinScale"/> + <om:hasPoint rdf:resource="&om;_1357.77OnTheKelvinScale"/> + <om:hasUnit rdf:resource="&om;kelvin"/> + </om:RatioScale> + + <owl:Class rdf:about="&om;ThermodynamicTemperatureScale"> + <rdfs:label xml:lang="en">thermodynamic temperature scale</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Scale"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:RatioScale rdf:about="&om;KelvinScale"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ThermodynamicTemperature"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasScale"/> + <owl:hasValue rdf:resource="&om;KelvinScale"/> + </owl:Restriction> + </rdfs:subClassOf> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class rdf:about="&om;ThermodynamicTemperatureUnit"/> + <owl:Class rdf:about="&om;ThermodynamicTemperatureScale"/> + </owl:unionOf> + </owl:Class> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Celsius Scale Ontology --> + + <om:IntervalScale rdf:about="&om;CelsiusScale"> + <rdfs:label xml:lang="en">Celsius scale</rdfs:label> + <rdfs:label xml:lang="nl">Celsiusschaal</rdfs:label> + <rdfs:label xml:lang="zh">摄氏温标</rdfs:label> + <om:alternativeLabel xml:lang="en">International Celsius Temperature scale of 1990</om:alternativeLabel> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:IntervalScale> + + <om:FixedPoint rdf:about="&om;_-270.15To-268.15OnTheCelsiusScale"> + <rdfs:label xml:lang="en">-270.15 to -268.15 on the Celsius scale</rdfs:label> + <rdfs:label xml:lang="zh">-270.15至-268.15摄氏度</rdfs:label> + <rdfs:comment xml:lang="en">One of the fixed points defining the Celsius scale</rdfs:comment> + <om:hasNumericalValue>-270.15 to -268.15</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;CelsiusScale"/> + <!-- hasDefinition --> <om:hasPoint rdf:resource="&om;_3To5OnTheKelvinScale"/> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_-259.3467OnTheCelsiusScale"> + <rdfs:label xml:lang="en">-259.3467 on the Celsius scale</rdfs:label> + <rdfs:label xml:lang="zh">-259.3467摄氏度</rdfs:label> + <om:hasNumericalValue>-259.3467</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;CelsiusScale"/> + <!-- hasDefinition --> <om:hasPoint rdf:resource="&om;_13.8033OnTheKelvinScale"/> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;approximately-256.15OnTheCelsiusScale"> + <rdfs:label xml:lang="en">~-256.15 on the Celsius scale</rdfs:label> + <rdfs:label xml:lang="zh">〜-256.15摄氏度</rdfs:label> + <om:hasNumericalValue>~-256.15</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;CelsiusScale"/> + <!-- hasDefinition --> <om:hasPoint rdf:resource="&om;approximately17OnTheKelvinScale"/> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;approximately-252.85OnTheCelsiusScale"> + <rdfs:label xml:lang="en">~-252.85 on the Celsius scale</rdfs:label> + <rdfs:label xml:lang="zh">〜-252.85摄氏度</rdfs:label> + <om:hasNumericalValue>~-252.85</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;CelsiusScale"/> + <!-- hasDefinition --> <om:hasPoint rdf:resource="&om;approximately203OnTheKelvinScale"/> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_-248.5939OnTheCelsiusScale"> + <rdfs:label xml:lang="en">-248.5939 on the Celsius scale</rdfs:label> + <rdfs:label xml:lang="zh">-248.5939摄氏度</rdfs:label> + <om:hasNumericalValue>-248.5939</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;CelsiusScale"/> + <!-- hasDefinition --> <om:hasPoint rdf:resource="&om;_24.5561OnTheKelvinScale"/> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_-218.7916OnTheCelsiusScale"> + <rdfs:label xml:lang="en">-218.7916 on the Celsius scale</rdfs:label> + <rdfs:label xml:lang="zh">-218.7916摄氏度</rdfs:label> + <om:hasNumericalValue>-218.7916</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;CelsiusScale"/> + <!-- hasDefinition --> <om:hasPoint rdf:resource="&om;_54.3584OnTheKelvinScale"/> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_-189.3442OnTheCelsiusScale"> + <rdfs:label xml:lang="en">-189.3442 on the Celsius scale</rdfs:label> + <rdfs:label xml:lang="zh">-189.3442摄氏度</rdfs:label> + <om:hasNumericalValue>-189.3442</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;CelsiusScale"/> + <!-- hasDefinition --> <om:hasPoint rdf:resource="&om;_83.8058OnTheKelvinScale"/> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_-38.8344OnTheCelsiusScale"> + <rdfs:label xml:lang="en">-38.8344 on the Celsius scale</rdfs:label> + <rdfs:label xml:lang="zh">-38.8344摄氏度</rdfs:label> + <om:hasNumericalValue>-38.8344</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;CelsiusScale"/> + <!-- hasDefinition --> <om:hasPoint rdf:resource="&om;_234.3156OnTheKelvinScale"/> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_0.01OnTheCelsiusScale"> + <rdfs:label xml:lang="en">0.01 on the Celsius scale</rdfs:label> + <rdfs:label xml:lang="zh">0.01摄氏度</rdfs:label> + <om:hasNumericalValue>0.01</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;CelsiusScale"/> + <!-- hasDefinition --> <om:hasPoint rdf:resource="&om;_273.16OnTheKelvinScale"/> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_29.7646OnTheCelsiusScale"> + <rdfs:label xml:lang="en">29.7646 on the Celsius scale</rdfs:label> + <rdfs:label xml:lang="zh">29.7646摄氏度</rdfs:label> + <om:hasNumericalValue>29.7646</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;CelsiusScale"/> + <!-- hasDefinition --> <om:hasPoint rdf:resource="&om;_302.9146OnTheKelvinScale"/> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_156.5985OnTheCelsiusScale"> + <rdfs:label xml:lang="en">156.5985 on the Celsius scale</rdfs:label> + <rdfs:label xml:lang="zh">156.5985摄氏度</rdfs:label> + <om:hasNumericalValue>156.5985</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;CelsiusScale"/> + <!-- hasDefinition --> <om:hasPoint rdf:resource="&om;_429.7485OnTheKelvinScale"/> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_231.928OnTheCelsiusScale"> + <rdfs:label xml:lang="en">231.928 on the Celsius scale</rdfs:label> + <rdfs:label xml:lang="zh">231.928摄氏度</rdfs:label> + <om:hasNumericalValue>231.928</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;CelsiusScale"/> + <!-- hasDefinition --> <om:hasPoint rdf:resource="&om;_505.078OnTheKelvinScale"/> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_419.527OnTheCelsiusScale"> + <rdfs:label xml:lang="en">419.527 on the Celsius scale</rdfs:label> + <rdfs:label xml:lang="zh">419.527摄氏度</rdfs:label> + <om:hasNumericalValue>419.527</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;CelsiusScale"/> + <!-- hasDefinition --> <om:hasPoint rdf:resource="&om;_692.677OnTheKelvinScale"/> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_660.323OnTheCelsiusScale"> + <rdfs:label xml:lang="en">660.323 on the Celsius scale</rdfs:label> + <rdfs:label xml:lang="zh">660.323摄氏度</rdfs:label> + <om:hasNumericalValue>660.323</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;CelsiusScale"/> + <!-- hasDefinition --> <om:hasPoint rdf:resource="&om;_933.473OnTheKelvinScale"/> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_961.78OnTheCelsiusScale"> + <rdfs:label xml:lang="en">961.78 on the Celsius scale</rdfs:label> + <rdfs:label xml:lang="zh">961.78摄氏度</rdfs:label> + <om:hasNumericalValue>961.78</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;CelsiusScale"/> + <!-- hasDefinition --> <om:hasPoint rdf:resource="&om;_1234.93OnTheKelvinScale"/> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_1064.18OnTheCelsiusScale"> + <rdfs:label xml:lang="en">1064.18 on the Celsius scale</rdfs:label> + <rdfs:label xml:lang="zh">1064.18摄氏度</rdfs:label> + <om:hasNumericalValue>1064.18</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;CelsiusScale"/> + <!-- hasDefinition --> <om:hasPoint rdf:resource="&om;_1337.33OnTheKelvinScale"/> + </om:FixedPoint> + + <om:FixedPoint rdf:about="&om;_1084.62OnTheCelsiusScale"> + <rdfs:label xml:lang="en">1084.62 on the Celsius scale</rdfs:label> + <rdfs:label xml:lang="zh">1084.62摄氏度</rdfs:label> + <om:hasNumericalValue>1084.62</om:hasNumericalValue> + <om:hasScale rdf:resource="&om;CelsiusScale"/> + <!-- hasDefinition --> <om:hasPoint rdf:resource="&om;_1357.77OnTheKelvinScale"/> + </om:FixedPoint> + + <om:IntervalScale rdf:about="&om;CelsiusScale"> + <om:hasPoint rdf:resource="&om;_-270.15To-268.15OnTheCelsiusScale"/> + <om:hasPoint rdf:resource="&om;_-259.3467OnTheCelsiusScale"/> + <om:hasPoint rdf:resource="&om;approximately-256.15OnTheCelsiusScale"/> + <om:hasPoint rdf:resource="&om;approximately-252.85OnTheCelsiusScale"/> + <om:hasPoint rdf:resource="&om;_-248.5939OnTheCelsiusScale"/> + <om:hasPoint rdf:resource="&om;_-218.7916OnTheCelsiusScale"/> + <om:hasPoint rdf:resource="&om;_-189.3442OnTheCelsiusScale"/> + <om:hasPoint rdf:resource="&om;_-38.8344OnTheCelsiusScale"/> + <om:hasPoint rdf:resource="&om;_0.01OnTheCelsiusScale"/> + <om:hasPoint rdf:resource="&om;_29.7646OnTheCelsiusScale"/> + <om:hasPoint rdf:resource="&om;_156.5985OnTheCelsiusScale"/> + <om:hasPoint rdf:resource="&om;_231.928OnTheCelsiusScale"/> + <om:hasPoint rdf:resource="&om;_419.527OnTheCelsiusScale"/> + <om:hasPoint rdf:resource="&om;_660.323OnTheCelsiusScale"/> + <om:hasPoint rdf:resource="&om;_961.78OnTheCelsiusScale"/> + <om:hasPoint rdf:resource="&om;_1064.18OnTheCelsiusScale"/> + <om:hasPoint rdf:resource="&om;_1084.62OnTheCelsiusScale"/> + <!-- <om:definition_description>t90/°C = T90/K - 273.15</om:definition_description> --> + <om:hasFactor rdf:datatype="&xsd;decimal">1</om:hasFactor> + <om:hasOff-Set rdf:datatype="&xsd;decimal">-273.15</om:hasOff-Set> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <om:hasUnit rdf:resource="&om;degreeCelsius"/> + </om:IntervalScale> + + <owl:Class rdf:about="&om;CelsiusTemperatureScale"> + <rdfs:label xml:lang="en">Celsius temperature scale</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Scale"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:IntervalScale rdf:about="&om;CelsiusScale"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;CelsiusTemperature"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasScale"/> + <owl:hasValue rdf:resource="&om;CelsiusScale"/> + </owl:Restriction> + </rdfs:subClassOf> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class rdf:about="&om;CelsiusTemperatureUnit"/> + <owl:Class rdf:about="&om;CelsiusTemperatureScale"/> + </owl:unionOf> + </owl:Class> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Temperature Scale Ontology --> + + <om:IntervalScale rdf:about="&om;FahrenheitScale"> + <rdfs:label xml:lang="en">Fahrenheit scale</rdfs:label> + <rdfs:label xml:lang="nl">Fahrenheitschaal</rdfs:label> + <rdfs:label xml:lang="zh">华氏温标</rdfs:label> + <om:hasFactor rdf:datatype="&xsd;decimal">1.8</om:hasFactor> + <om:hasOff-Set rdf:datatype="&xsd;decimal">-459.67</om:hasOff-Set> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <om:hasUnit rdf:resource="&om;degreeFahrenheit"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:IntervalScale> + + <om:RatioScale rdf:about="&om;RankineScale"> + <rdfs:label xml:lang="en">Rankine scale</rdfs:label> + <rdfs:label xml:lang="nl">Rankineschaal</rdfs:label> + <rdfs:label xml:lang="zh">兰金规模</rdfs:label> + <om:hasFactor rdf:datatype="&xsd;decimal">1.8</om:hasFactor> + <om:hasOff-Set rdf:datatype="&xsd;decimal">0</om:hasOff-Set> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <om:hasUnit rdf:resource="&om;degreeRankine"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:RatioScale> + + <om:IntervalScale rdf:about="&om;ReaumurScale"> + <rdfs:label xml:lang="en">Réaumur scale</rdfs:label> + <rdfs:label xml:lang="nl">Réaumurschaal</rdfs:label> + <rdfs:label xml:lang="zh">列氏温标</rdfs:label> + <om:hasFactor rdf:datatype="&xsd;decimal">1</om:hasFactor> + <om:hasOff-Set rdf:datatype="&xsd;decimal">-218.52</om:hasOff-Set> + <om:hasScale rdf:resource="&om;KelvinScale"/> + <om:hasUnit rdf:resource="&om;degreeReaumur"/> + <om:hasDimension rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </om:IntervalScale> + + <owl:Class rdf:about="&om;Temperature_scale"> + <rdfs:subClassOf rdf:resource="&om;Scale"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:IntervalScale rdf:about="&om;CelsiusScale"/> + <om:IntervalScale rdf:about="&om;FahrenheitScale"/> + <om:IntervalScale rdf:about="&om;ReaumurScale"/> + <om:RatioScale rdf:about="&om;KelvinScale"/> + <om:RatioScale rdf:about="&om;RankineScale"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;FahrenheitTemperatureScale"> + <rdfs:label xml:lang="en">Fahrenheit temperature scale</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Scale"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:IntervalScale rdf:about="&om;FahrenheitScale"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;RankineTemperatureScale"> + <rdfs:label xml:lang="en">Rankine temperature scale</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Scale"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:RatioScale rdf:about="&om;RankineScale"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ReaumurTemperatureScale"> + <rdfs:label xml:lang="en">Réaumur temperature scale</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Scale"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:IntervalScale rdf:about="&om;ReaumurScale"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Temperature"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasScale"/> + <owl:allValuesFrom> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:IntervalScale rdf:about="&om;CelsiusScale"/> + <om:IntervalScale rdf:about="&om;FahrenheitScale"/> + <om:IntervalScale rdf:about="&om;ReaumurScale"/> + <om:RatioScale rdf:about="&om;KelvinScale"/> + <om:RatioScale rdf:about="&om;RankineScale"/> + </owl:oneOf> + </owl:Class> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class rdf:about="&om;TemperatureUnit"/> + <owl:Class rdf:about="&om;Temperature_scale"/> + </owl:unionOf> + </owl:Class> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;FahrenheitTemperature"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasScale"/> + <owl:hasValue rdf:resource="&om;FahrenheitScale"/> + </owl:Restriction> + </rdfs:subClassOf> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class rdf:about="&om;FahrenheitTemperatureUnit"/> + <owl:Class rdf:about="&om;FahrenheitTemperatureScale"/> + </owl:unionOf> + </owl:Class> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;RankineTemperature"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasScale"/> + <owl:hasValue rdf:resource="&om;RankineScale"/> + </owl:Restriction> + </rdfs:subClassOf> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class rdf:about="&om;RankineTemperatureUnit"/> + <owl:Class rdf:about="&om;RankineTemperatureScale"/> + </owl:unionOf> + </owl:Class> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;ReaumurTemperature"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasScale"/> + <owl:hasValue rdf:resource="&om;ReaumurScale"/> + </owl:Restriction> + </rdfs:subClassOf> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class rdf:about="&om;ReaumurTemperatureUnit"/> + <owl:Class rdf:about="&om;ReaumurTemperatureScale"/> + </owl:unionOf> + </owl:Class> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Dimension Ontologies --> + + <!-- Contents --> + + <!-- Thermodynamic Temperature Dimension Ontology --> + <!-- Entropy or Heat Capacity Dimension Ontology --> + <!-- Specific Entropy or Specific Heat Capacity Dimension Ontology --> + <!-- Thermal Conductivity Dimension Ontology --> + <!-- Thermal Diffusivity Dimension Ontology --> + <!-- Thermal Insulance Dimension Ontology --> + <!-- Thermal Resistance Dimension Ontology --> + <!-- Heat Transfer Coefficient Dimension Ontology --> + <!-- Volumetric Heat Capacity Dimension Ontology --> + + <!-- Thermodynamic Temperature Dimension Ontology --> + + <om:Dimension rdf:about="&om;thermodynamicTemperature-Dimension"> + <rdfs:label xml:lang="en">thermodynamic temperature dimension</rdfs:label> + <rdfs:label xml:lang="nl">absolute-temperatuurdimensie</rdfs:label> + <om:symbol>Θ</om:symbol> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Temperature"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;thermodynamicTemperature-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Entropy or Heat Capacity Dimension Ontology --> + + <om:Dimension rdf:about="&om;entropyOrHeatCapacity-Dimension"> + <rdfs:label xml:lang="en">entropy or heat capacity dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Entropy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;entropyOrHeatCapacity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;HeatCapacity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;entropyOrHeatCapacity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Specific Entropy or Specific Heat Capacity Dimension Ontology --> + + <om:Dimension rdf:about="&om;specificEntropyOrSpecificHeatCapacity-Dimension"> + <rdfs:label xml:lang="en">specific entropy or specific heat capacity dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;SpecificEntropy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;specificEntropyOrSpecificHeatCapacity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificHeatCapacity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;specificEntropyOrSpecificHeatCapacity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Thermal Conductivity Dimension Ontology --> + + <om:Dimension rdf:about="&om;thermalConductivity-Dimension"> + <rdfs:label xml:lang="en">thermal conductivity dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-3</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;ThermalConductivity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;thermalConductivity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Thermal Insulance Dimension Ontology --> + + <om:Dimension rdf:about="&om;thermalInsulance-Dimension"> + <rdfs:label xml:lang="en">thermal insulance dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">3</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;ThermalInsulance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;thermalInsulance-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Thermal Resistance Dimension Ontology --> + + <om:Dimension rdf:about="&om;thermalResistance-Dimension"> + <rdfs:label xml:lang="en">thermal resistance dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">3</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;ThermalResistance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;thermalResistance-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Heat Transfer Coefficient Dimension Ontology --> + + <om:Dimension rdf:about="&om;heatTransferCoefficient-Dimension"> + <rdfs:label xml:lang="en">heat transfer coefficient dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-3</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;HeatTransferCoefficient"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;heatTransferCoefficient-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Volumetric Heat Capacity Dimension Ontology --> + + <om:Dimension rdf:about="&om;volumetricHeatCapacity-Dimension"> + <rdfs:label xml:lang="en">volumetric heat capacity dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;VolumetricHeatCapacity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;volumetricHeatCapacity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Electromagnetism Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Unit of Measure Ontologies --> + <!-- Dimension Ontologies --> + + <om:ApplicationArea rdf:about="&om;electromagnetism"> + <rdfs:label xml:lang="en">electromagnetism</rdfs:label> + <rdfs:label xml:lang="nl">elektromagnetisme</rdfs:label> + <!-- <om:uses_application_area rdf:resource="&om;space_and_time"/> --> + <om:usesQuantity rdf:resource="&om;ElectricCurrent"/> + <om:usesQuantity rdf:resource="&om;CurrentDensity"/> + <om:usesQuantity rdf:resource="&om;ElectricCharge"/> + <om:usesQuantity rdf:resource="&om;ElectricPotential"/> + <om:usesQuantity rdf:resource="&om;ElectromotiveForce"/> + <om:usesQuantity rdf:resource="&om;PotentialDifference"/> + <om:usesQuantity rdf:resource="&om;Capacitance"/> + <om:usesQuantity rdf:resource="&om;ElectricalResistance"/> + <om:usesQuantity rdf:resource="&om;ElectricalConductance"/> + <om:usesQuantity rdf:resource="&om;ElectricField"/> + <om:usesQuantity rdf:resource="&om;ElectricChargeDensity"/> + <om:usesQuantity rdf:resource="&om;ElectricFluxDensity"/> + <om:usesQuantity rdf:resource="&om;MagneticField"/> + <om:usesQuantity rdf:resource="&om;MagneticFlux"/> + <om:usesQuantity rdf:resource="&om;MagneticFluxDensity"/> + <om:usesQuantity rdf:resource="&om;Permeance-Electromagnetic"/> + <om:usesQuantity rdf:resource="&om;Inductance"/> + <om:usesQuantity rdf:resource="&om;PermeabilityOfFreeSpace"/> + <om:usesQuantity rdf:resource="&om;Permittivity"/> + <om:usesQuantity rdf:resource="&om;ElectricDipoleMoment"/> + <om:usesQuantity rdf:resource="&om;Reluctance"/> + <om:usesQuantity rdf:resource="&om;Admittance"/> + <om:usesQuantity rdf:resource="&om;ElectricalResistivity"/> + <om:usesQuantity rdf:resource="&om;ElectricalConductivity"/> + <om:usesQuantity rdf:resource="&om;MagnetomotiveForce"/> + <om:usesUnit rdf:resource="&om;ampere"/> + <om:usesUnit rdf:resource="&om;attoampere"/> + <om:usesUnit rdf:resource="&om;centiampere"/> + <om:usesUnit rdf:resource="&om;decaampere"/> + <om:usesUnit rdf:resource="&om;deciampere"/> + <om:usesUnit rdf:resource="&om;exaampere"/> + <om:usesUnit rdf:resource="&om;femtoampere"/> + <om:usesUnit rdf:resource="&om;gigaampere"/> + <om:usesUnit rdf:resource="&om;hectoampere"/> + <om:usesUnit rdf:resource="&om;kiloampere"/> + <om:usesUnit rdf:resource="&om;megaampere"/> + <om:usesUnit rdf:resource="&om;microampere"/> + <om:usesUnit rdf:resource="&om;milliampere"/> + <om:usesUnit rdf:resource="&om;nanoampere"/> + <om:usesUnit rdf:resource="&om;petaampere"/> + <om:usesUnit rdf:resource="&om;picoampere"/> + <om:usesUnit rdf:resource="&om;teraampere"/> + <om:usesUnit rdf:resource="&om;abampere"/> + <om:usesUnit rdf:resource="&om;biot"/> + <om:usesUnit rdf:resource="&om;gilbert"/> + <om:usesUnit rdf:resource="&om;statampere"/> + <om:usesUnit rdf:resource="&om;amperePerSquareMetre"/> + <om:usesUnit rdf:resource="&om;second-TimeAmpere"/> + <om:usesUnit rdf:resource="&om;coulomb"/> + <om:usesUnit rdf:resource="&om;attocoulomb"/> + <om:usesUnit rdf:resource="&om;centicoulomb"/> + <om:usesUnit rdf:resource="&om;decacoulomb"/> + <om:usesUnit rdf:resource="&om;decicoulomb"/> + <om:usesUnit rdf:resource="&om;exacoulomb"/> + <om:usesUnit rdf:resource="&om;femtocoulomb"/> + <om:usesUnit rdf:resource="&om;gigacoulomb"/> + <om:usesUnit rdf:resource="&om;hectocoulomb"/> + <om:usesUnit rdf:resource="&om;kilocoulomb"/> + <om:usesUnit rdf:resource="&om;megacoulomb"/> + <om:usesUnit rdf:resource="&om;microcoulomb"/> + <om:usesUnit rdf:resource="&om;millicoulomb"/> + <om:usesUnit rdf:resource="&om;nanocoulomb"/> + <om:usesUnit rdf:resource="&om;petacoulomb"/> + <om:usesUnit rdf:resource="&om;picocoulomb"/> + <om:usesUnit rdf:resource="&om;teracoulomb"/> + <om:usesUnit rdf:resource="&om;abcoulomb"/> + <om:usesUnit rdf:resource="&om;faraday"/> + <om:usesUnit rdf:resource="&om;franklin"/> + <om:usesUnit rdf:resource="&om;statcoulomb"/> + <om:usesUnit rdf:resource="&om;wattPerAmpere"/> + <om:usesUnit rdf:resource="&om;volt"/> + <om:usesUnit rdf:resource="&om;attovolt"/> + <om:usesUnit rdf:resource="&om;centivolt"/> + <om:usesUnit rdf:resource="&om;decavolt"/> + <om:usesUnit rdf:resource="&om;decivolt"/> + <om:usesUnit rdf:resource="&om;exavolt"/> + <om:usesUnit rdf:resource="&om;femtovolt"/> + <om:usesUnit rdf:resource="&om;gigavolt"/> + <om:usesUnit rdf:resource="&om;hectovolt"/> + <om:usesUnit rdf:resource="&om;kilovolt"/> + <om:usesUnit rdf:resource="&om;megavolt"/> + <om:usesUnit rdf:resource="&om;microvolt"/> + <om:usesUnit rdf:resource="&om;millivolt"/> + <om:usesUnit rdf:resource="&om;nanovolt"/> + <om:usesUnit rdf:resource="&om;petavolt"/> + <om:usesUnit rdf:resource="&om;picovolt"/> + <om:usesUnit rdf:resource="&om;teravolt"/> + <om:usesUnit rdf:resource="&om;abvolt"/> + <om:usesUnit rdf:resource="&om;statvolt"/> + <om:usesUnit rdf:resource="&om;coulombPerVolt"/> + <om:usesUnit rdf:resource="&om;farad"/> + <om:usesUnit rdf:resource="&om;attofarad"/> + <om:usesUnit rdf:resource="&om;centifarad"/> + <om:usesUnit rdf:resource="&om;decafarad"/> + <om:usesUnit rdf:resource="&om;decifarad"/> + <om:usesUnit rdf:resource="&om;exafarad"/> + <om:usesUnit rdf:resource="&om;femtofarad"/> + <om:usesUnit rdf:resource="&om;gigafarad"/> + <om:usesUnit rdf:resource="&om;hectofarad"/> + <om:usesUnit rdf:resource="&om;kilofarad"/> + <om:usesUnit rdf:resource="&om;megafarad"/> + <om:usesUnit rdf:resource="&om;microfarad"/> + <om:usesUnit rdf:resource="&om;millifarad"/> + <om:usesUnit rdf:resource="&om;nanofarad"/> + <om:usesUnit rdf:resource="&om;petafarad"/> + <om:usesUnit rdf:resource="&om;picofarad"/> + <om:usesUnit rdf:resource="&om;terafarad"/> + <om:usesUnit rdf:resource="&om;abfarad"/> + <om:usesUnit rdf:resource="&om;statfarad"/> + <om:usesUnit rdf:resource="&om;voltPerAmpere"/> + <om:usesUnit rdf:resource="&om;ohm"/> + <om:usesUnit rdf:resource="&om;attoohm"/> + <om:usesUnit rdf:resource="&om;centiohm"/> + <om:usesUnit rdf:resource="&om;decaohm"/> + <om:usesUnit rdf:resource="&om;deciohm"/> + <om:usesUnit rdf:resource="&om;exaohm"/> + <om:usesUnit rdf:resource="&om;femtoohm"/> + <om:usesUnit rdf:resource="&om;gigaohm"/> + <om:usesUnit rdf:resource="&om;hectoohm"/> + <om:usesUnit rdf:resource="&om;kilohm"/> + <om:usesUnit rdf:resource="&om;megohm"/> + <om:usesUnit rdf:resource="&om;microohm"/> + <om:usesUnit rdf:resource="&om;milliohm"/> + <om:usesUnit rdf:resource="&om;nanoohm"/> + <om:usesUnit rdf:resource="&om;petaohm"/> + <om:usesUnit rdf:resource="&om;picoohm"/> + <om:usesUnit rdf:resource="&om;teraohm"/> + <om:usesUnit rdf:resource="&om;abohm"/> + <om:usesUnit rdf:resource="&om;statohm"/> + <om:usesUnit rdf:resource="&om;amperePerVolt"/> + <om:usesUnit rdf:resource="&om;siemens"/> + <om:usesUnit rdf:resource="&om;attosiemens"/> + <om:usesUnit rdf:resource="&om;centisiemens"/> + <om:usesUnit rdf:resource="&om;decasiemens"/> + <om:usesUnit rdf:resource="&om;decisiemens"/> + <om:usesUnit rdf:resource="&om;exasiemens"/> + <om:usesUnit rdf:resource="&om;femtosiemens"/> + <om:usesUnit rdf:resource="&om;gigasiemens"/> + <om:usesUnit rdf:resource="&om;hectosiemens"/> + <om:usesUnit rdf:resource="&om;kilosiemens"/> + <om:usesUnit rdf:resource="&om;megasiemens"/> + <om:usesUnit rdf:resource="&om;microsiemens"/> + <om:usesUnit rdf:resource="&om;millisiemens"/> + <om:usesUnit rdf:resource="&om;nanosiemens"/> + <om:usesUnit rdf:resource="&om;petasiemens"/> + <om:usesUnit rdf:resource="&om;picosiemens"/> + <om:usesUnit rdf:resource="&om;terasiemens"/> + <om:usesUnit rdf:resource="&om;abmho"/> + <om:usesUnit rdf:resource="&om;mho"/> + <om:usesUnit rdf:resource="&om;statmho"/> + <om:usesUnit rdf:resource="&om;newtonPerCoulomb"/> + <om:usesUnit rdf:resource="&om;voltPerMetre"/> + <om:usesUnit rdf:resource="&om;coulombPerCubicmetre"/> + <om:usesUnit rdf:resource="&om;coulombPerSquareMetre"/> + <om:usesUnit rdf:resource="&om;amperePerMetre"/> + <om:usesUnit rdf:resource="&om;oersted"/> + <om:usesUnit rdf:resource="&om;voltSecond-Time"/> + <om:usesUnit rdf:resource="&om;weber"/> + <om:usesUnit rdf:resource="&om;attoweber"/> + <om:usesUnit rdf:resource="&om;centiweber"/> + <om:usesUnit rdf:resource="&om;decaweber"/> + <om:usesUnit rdf:resource="&om;deciweber"/> + <om:usesUnit rdf:resource="&om;exaweber"/> + <om:usesUnit rdf:resource="&om;femtoweber"/> + <om:usesUnit rdf:resource="&om;gigaweber"/> + <om:usesUnit rdf:resource="&om;hectoweber"/> + <om:usesUnit rdf:resource="&om;kiloweber"/> + <om:usesUnit rdf:resource="&om;megaweber"/> + <om:usesUnit rdf:resource="&om;microweber"/> + <om:usesUnit rdf:resource="&om;milliweber"/> + <om:usesUnit rdf:resource="&om;nanoweber"/> + <om:usesUnit rdf:resource="&om;petaweber"/> + <om:usesUnit rdf:resource="&om;picoweber"/> + <om:usesUnit rdf:resource="&om;teraweber"/> + <om:usesUnit rdf:resource="&om;maxwell"/> + <om:usesUnit rdf:resource="&om;statweber"/> + <om:usesUnit rdf:resource="&om;unitPole"/> + <om:usesUnit rdf:resource="&om;weberPerSquareMetre"/> + <om:usesUnit rdf:resource="&om;tesla"/> + <om:usesUnit rdf:resource="&om;attotesla"/> + <om:usesUnit rdf:resource="&om;centitesla"/> + <om:usesUnit rdf:resource="&om;decatesla"/> + <om:usesUnit rdf:resource="&om;decitesla"/> + <om:usesUnit rdf:resource="&om;exatesla"/> + <om:usesUnit rdf:resource="&om;femtotesla"/> + <om:usesUnit rdf:resource="&om;gigatesla"/> + <om:usesUnit rdf:resource="&om;hectotesla"/> + <om:usesUnit rdf:resource="&om;kilotesla"/> + <om:usesUnit rdf:resource="&om;megatesla"/> + <om:usesUnit rdf:resource="&om;microtesla"/> + <om:usesUnit rdf:resource="&om;millitesla"/> + <om:usesUnit rdf:resource="&om;nanotesla"/> + <om:usesUnit rdf:resource="&om;petatesla"/> + <om:usesUnit rdf:resource="&om;picotesla"/> + <om:usesUnit rdf:resource="&om;teratesla"/> + <om:usesUnit rdf:resource="&om;gamma"/> + <om:usesUnit rdf:resource="&om;gauss"/> + <om:usesUnit rdf:resource="&om;stattesla"/> + <om:usesUnit rdf:resource="&om;milligauss"/> + <om:usesUnit rdf:resource="&om;weberPerAmpere"/> + <om:usesUnit rdf:resource="&om;henry"/> + <om:usesUnit rdf:resource="&om;attohenry"/> + <om:usesUnit rdf:resource="&om;centihenry"/> + <om:usesUnit rdf:resource="&om;decahenry"/> + <om:usesUnit rdf:resource="&om;decihenry"/> + <om:usesUnit rdf:resource="&om;exahenry"/> + <om:usesUnit rdf:resource="&om;femtohenry"/> + <om:usesUnit rdf:resource="&om;gigahenry"/> + <om:usesUnit rdf:resource="&om;hectohenry"/> + <om:usesUnit rdf:resource="&om;kilohenry"/> + <om:usesUnit rdf:resource="&om;megahenry"/> + <om:usesUnit rdf:resource="&om;microhenry"/> + <om:usesUnit rdf:resource="&om;millihenry"/> + <om:usesUnit rdf:resource="&om;nanohenry"/> + <om:usesUnit rdf:resource="&om;petahenry"/> + <om:usesUnit rdf:resource="&om;picohenry"/> + <om:usesUnit rdf:resource="&om;terahenry"/> + <om:usesUnit rdf:resource="&om;abhenry"/> + <om:usesUnit rdf:resource="&om;stathenry"/> + <om:usesUnit rdf:resource="&om;henryPerMetre"/> + <om:usesUnit rdf:resource="&om;faradPerMetre"/> + <om:usesUnit rdf:resource="&om;coulombMetre"/> + <om:usesUnit rdf:resource="&om;debye"/> + <om:usesUnit rdf:resource="&om;reciprocalHenry"/> + <om:usesUnit rdf:resource="&om;ohmMetre"/> + <om:usesUnit rdf:resource="&om;siemensPerMetre"/> + </om:ApplicationArea> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Electric Current Upper Ontology --> + <!-- Current Density Upper Ontology --> + <!-- Electric Charge Upper Ontology --> + <!-- Electric Potential Upper Ontology --> + <!-- Electric Potential Subclass Upper Ontology --> + <!-- Capacitance Upper Ontology --> + <!-- Electrical Resistance Upper Ontology --> + <!-- Electrical Conductance Upper Ontology --> + <!-- Electric Field Upper Ontology --> + <!-- Electric Charge Density Upper Ontology --> + <!-- Electric Flux Density Upper Ontology --> + <!-- Magnetic Flux Upper Ontology --> + <!-- Magnetic Field Upper Ontology --> + <!-- Magnetic Flux Density Upper Ontology --> + <!-- Permeance (Electromagnetic) Upper Ontology --> + <!-- Inductance Upper Ontology --> + <!-- Permeability of Free Space Upper Ontology --> + <!-- Permittivity Upper Ontology --> + <!-- Electric Dipole Moment Upper Ontology --> + <!-- Reluctance Upper Ontology --> + <!-- Admittance Upper Ontology --> + <!-- Electrical Resistivity Upper Ontology --> + <!-- Electrical Conductivity Upper Ontology --> + <!-- Magnetomotive Force Upper Ontology --> + + <!-- Electric Current Upper Ontology --> + + <owl:Class rdf:about="&om;ElectricCurrent"> + <rdfs:label xml:lang="en">electric current</rdfs:label> + <om:alternativeLabel xml:lang="en">current</om:alternativeLabel> + <rdfs:comment xml:lang="en">Electric current is the flow of electric charge. It is a base quantity in the International System of Units. Electric current is electric charge divided by time.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>I</om:symbol> + <om:alternativeSymbol>i</om:alternativeSymbol> + </owl:Class> + + <!-- Current Density Upper Ontology --> + + <owl:Class rdf:about="&om;CurrentDensity"> + <rdfs:label xml:lang="en">current density</rdfs:label> + <rdfs:comment xml:lang="en">Current density is the density of flow of a conserved charge. It is a derived quantity in the International System of Units. Current density is electric current divided by area.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>J</om:symbol> + <om:alternativeSymbol>j</om:alternativeSymbol> + </owl:Class> + + <!-- Electric Charge Upper Ontology --> + + <owl:Class rdf:about="&om;ElectricCharge"> + <rdfs:label xml:lang="en">electric charge</rdfs:label> + <rdfs:label xml:lang="nl">electrische lading</rdfs:label> + <om:alternativeLabel xml:lang="en">quantity of electricity</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">lading</om:alternativeLabel> + <rdfs:comment xml:lang="en">Electric charge is a conserved property of some subatomic particles, which determines their electromagnetic interaction. It is a derived quantity in the International System of Units. Electric charge is electric current times time.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Q</om:symbol> + <om:alternativeSymbol>q</om:alternativeSymbol> + </owl:Class> + + <!-- Electric Potential Upper Ontology --> + + <owl:Class rdf:about="&om;ElectricPotential"> + <rdfs:label xml:lang="en">electric potential</rdfs:label> + <rdfs:label xml:lang="nl">electrische potentiaal</rdfs:label> + <om:alternativeLabel xml:lang="en">voltage</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">voltage</om:alternativeLabel> + <rdfs:comment xml:lang="en">Electric potential is the potential energy per unit charge associated with static (time-invariant) electric field.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>V</om:symbol> + <om:alternativeSymbol>φ</om:alternativeSymbol> + </owl:Class> + + <!-- Electric Potential Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;ElectromotiveForce"> + <rdfs:label xml:lang="en">electromotive force</rdfs:label> + <rdfs:comment xml:lang="en">Electromotive force is that which causes a flow of current.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;ElectricPotential"/> + <om:symbol>E</om:symbol> + <om:alternativeSymbol>emf</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;PotentialDifference"> + <rdfs:label xml:lang="en">potential difference</rdfs:label> + <rdfs:label xml:lang="nl">potentiaalverschil</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;ElectricPotential"/> + <om:symbol>U</om:symbol> + <om:alternativeSymbol>V</om:alternativeSymbol> + </owl:Class> + + <!-- Capacitance Upper Ontology --> + + <owl:Class rdf:about="&om;Capacitance"> + <rdfs:label xml:lang="en">capacitance</rdfs:label> + <rdfs:label xml:lang="nl">capaciteit</rdfs:label> + <om:alternativeLabel xml:lang="en">electric capacitance</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">electrische capaciteit</om:alternativeLabel> + <rdfs:comment xml:lang="en">Capacitance is the ability to hold electrical charge. It is a derived quantity in the International System of Units. Capacitance is electric charge divided by electric potential.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>C</om:symbol> + </owl:Class> + + <!-- Electrical Resistance Upper Ontology --> + + <owl:Class rdf:about="&om;ElectricalResistance"> + <rdfs:label xml:lang="en">electrical resistance</rdfs:label> + <om:alternativeLabel xml:lang="en">electric resistance</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">resistance</om:alternativeLabel> + <rdfs:comment xml:lang="en">Electrical resistance is the degree to which an object opposes an electric current through it. It is a derived quantity in the International System of Units. Electrical resistance is electric potential divided by electric current.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>R</om:symbol> + </owl:Class> + + <!-- Electrical Conductance Upper Ontology --> + + <owl:Class rdf:about="&om;ElectricalConductance"> + <rdfs:label xml:lang="en">electrical conductance</rdfs:label> + <om:alternativeLabel xml:lang="en">electric conductance</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">conductance</om:alternativeLabel> + <rdfs:comment xml:lang="en">Electrical conductance is a measure of how easily electricity flows along a certain path through an electrical element.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>G</om:symbol> + </owl:Class> + + <!-- Electric Field Upper Ontology --> + + <owl:Class rdf:about="&om;ElectricField"> + <rdfs:label xml:lang="en">electric field</rdfs:label> + <rdfs:label xml:lang="nl">electrisch veld</rdfs:label> + <om:alternativeLabel xml:lang="en">electric field strength</om:alternativeLabel> + <rdfs:comment xml:lang="en">Electric field is a property of the space surrounding an electric charge or in the presence of a time-varying magnetic field which exerts a forceon other electrically charged objects.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>E</om:symbol> + </owl:Class> + + <!-- Electric Charge Density Upper Ontology --> + + <owl:Class rdf:about="&om;ElectricChargeDensity"> + <rdfs:label xml:lang="en">electric charge density</rdfs:label> + <om:alternativeLabel xml:lang="en">charge density</om:alternativeLabel> + <rdfs:comment xml:lang="en">Electric charge density is the amount of electric charge in a volume. It is a derived quantity in the International System of Units. Electric charge density is electric charge divided by volume.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Electric Flux Density Upper Ontology --> + + <owl:Class rdf:about="&om;ElectricFluxDensity"> + <rdfs:label xml:lang="en">electric flux density</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Magnetic Flux Upper Ontology --> + + <owl:Class rdf:about="&om;MagneticFlux"> + <rdfs:label xml:lang="en">magnetic flux</rdfs:label> + <rdfs:comment xml:lang="en">Magnetic flux through any area perpendicular to a magnetic field is the product of the area by the field strength.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Φ</om:symbol> + </owl:Class> + + <!-- Magnetic Field Upper Ontology --> + + <owl:Class rdf:about="&om;MagneticField"> + <rdfs:label xml:lang="en">magnetic field</rdfs:label> + <om:alternativeLabel xml:lang="en">magnetic field strength</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">magnetic field intensity</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">magnetizing field</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>H</om:symbol> + </owl:Class> + + <!-- Magnetic Flux Density Upper Ontology --> + + <owl:Class rdf:about="&om;MagneticFluxDensity"> + <rdfs:label xml:lang="en">magnetic flux density</rdfs:label> + <om:alternativeLabel xml:lang="en">magnetic field</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">magnetic induction</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>B</om:symbol> + </owl:Class> + + <!-- Permeance (Electromagnetic) Upper Ontology --> + + <owl:Class rdf:about="&om;Permeance-Electromagnetic"> + <rdfs:label xml:lang="en">permeance (electromagnetic)</rdfs:label> + <om:alternativeLabel xml:lang="en">electromagnetic permeance</om:alternativeLabel> + <rdfs:comment xml:lang="en">Electromagnetic permeance is a measure of flux for a number of current-turns in magnetic circuit.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Λ</om:symbol> + </owl:Class> + + <!-- Inductance Upper Ontology --> + + <owl:Class rdf:about="&om;Inductance"> + <rdfs:label xml:lang="en">inductance</rdfs:label> + <rdfs:comment xml:lang="en">Inductance is that property in an electrical circuit where a change in the current flowing through that circuit induces an electromotive force that opposes the change in current.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Permeability of Free Space Upper Ontology --> + + <owl:Class rdf:about="&om;PermeabilityOfFreeSpace"> + <rdfs:label xml:lang="en">permeability of free space</rdfs:label> + <om:alternativeLabel xml:lang="en">vacuum permeability</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>μ</om:symbol> + </owl:Class> + + <!-- Permittivity Upper Ontology --> + + <owl:Class rdf:about="&om;Permittivity"> + <rdfs:label xml:lang="en">permittivity</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>ε</om:symbol> + </owl:Class> + + <!-- Electric Dipole Moment Upper Ontology --> + + <owl:Class rdf:about="&om;ElectricDipoleMoment"> + <rdfs:label xml:lang="en">electric dipole moment</rdfs:label> + <rdfs:comment xml:lang="en">Electric dipole moment is a measure of the polarity of a system of electric charges.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>p</om:symbol> + </owl:Class> + + <!-- Reluctance Upper Ontology --> + + <owl:Class rdf:about="&om;Reluctance"> + <rdfs:label xml:lang="en">reluctance</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>τ</om:symbol> + </owl:Class> + + <!-- Admittance Upper Ontology --> + + <owl:Class rdf:about="&om;Admittance"> + <rdfs:label xml:lang="en">admittance</rdfs:label> + <rdfs:comment xml:lang="en">Admittance is a measure of how easily a circuit or device will allow a current to flow. It is electric current divided by electric potential.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Y</om:symbol> + </owl:Class> + + <!-- Electrical Resistivity Upper Ontology --> + + <owl:Class rdf:about="&om;ElectricalResistivity"> + <rdfs:label xml:lang="en">electrical resistivity</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Electrical Conductivity Upper Ontology --> + + <owl:Class rdf:about="&om;ElectricalConductivity"> + <rdfs:label xml:lang="en">electrical conductivity</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Magnetomotive Force Upper Ontology --> + + <owl:Class rdf:about="&om;MagnetomotiveForce"> + <rdfs:label xml:lang="en">magnetomotive force</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>F</om:symbol> + </owl:Class> + + <!-- Unit of Measure Ontologies --> + + <!-- Contents --> + + <!-- Ampere Ontology --> + <!-- Ampere Multiples and Submultiples Ontology --> + <!-- Electric Current Unit Ontology --> + <!-- Magnetomotive Force Unit Ontology --> + <!-- Ampere Per Square Metre Ontology --> + <!-- Second Ampere Ontology --> + <!-- Coulomb Ontology --> + <!-- Coulomb Multiples and Submultiples Ontology --> + <!-- Electric Charge Unit Ontology --> + <!-- Watt Per Ampere Ontology --> + <!-- Volt Ontology --> + <!-- Volt Multiples and Submultiples Ontology --> + <!-- Electric Potential Unit Ontology --> + <!-- Coulomb Per Volt Ontology --> + <!-- Farad Ontology --> + <!-- Farad Multiples and Submultiples Ontology --> + <!-- Capacitance Unit Ontology --> + <!-- Volt Per Ampere Ontology --> + <!-- Ohm Ontology --> + <!-- Ohm Multiples and Submultiples Ontology --> + <!-- Electrical Resistance Unit Ontology --> + <!-- Ampere Per Volt Ontology --> + <!-- Siemens Ontology --> + <!-- Siemens Multiples and Submultiples Ontology --> + <!-- Electrical Conductance Unit Ontology --> + <!-- Newton Per Coulomb Ontology --> + <!-- Volt Per Metre Ontology --> + <!-- Coulomb Per Cubic Metre Ontology --> + <!-- Coulomb Per Square Metre Ontology --> + <!-- Volt Second Ontology --> + <!-- Weber Ontology --> + <!-- Weber Multiples and Submultiples Ontology --> + <!-- Magnetic Flux Unit Ontology --> + <!-- Ampere Per Metre Ontology --> + <!-- Magnetic Field Unit Ontology --> + <!-- Weber Per Square Metre Ontology --> + <!-- Tesla Ontology --> + <!-- Tesla Multiples and Submultiples Ontology --> + <!-- Magnetic Flux Density Unit Ontology --> + <!-- Weber Per Ampere Ontology --> + <!-- Henry Ontology --> + <!-- Henry Multiples and Submultiples Ontology --> + <!-- Inductance Unit Ontology --> + <!-- Henry Per Metre Ontology --> + <!-- Farad Per Metre Ontology --> + <!-- Coulomb Metre Ontology --> + <!-- Electric Dipole Moment Unit Ontology --> + <!-- Reciprocal Henry Ontology --> + <!-- Ohm Metre Ontology --> + <!-- Siemens Per Metre Ontology --> + + <!-- Ampere Ontology --> + + <om:Unit rdf:about="&om;ampere"> + <rdfs:label xml:lang="en">ampere</rdfs:label> + <rdfs:label xml:lang="nl">ampère</rdfs:label> + <om:symbol>A</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:Unit> + + <ElectricCurrent rdf:about="&om;constantCurrentThatProducesAnAttractiveForceOf2e-7NewtonPerMetreOfLengthBetweenTwoStraightParallelConductorsOfInfiniteLengthAndNegligibleCircularCrossSectionPlacedOneMetreApartInAVacuum"> + <rdfs:label xml:lang="en">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</rdfs:label> + </ElectricCurrent> + + <om:Unit rdf:about="&om;ampere"> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:hasQuantity rdf:resource="&om;constantCurrentThatProducesAnAttractiveForceOf2e-7NewtonPerMetreOfLengthBetweenTwoStraightParallelConductorsOfInfiniteLengthAndNegligibleCircularCrossSectionPlacedOneMetreApartInAVacuum"/> + </om:Unit> + + <owl:Class rdf:about="&om;ElectricCurrent"> + <om:commonlyHasUnit rdf:resource="&om;ampere"/> + </owl:Class> + + <owl:Class rdf:about="&om;MagnetomotiveForce"> + <om:commonlyHasUnit rdf:resource="&om;ampere"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricCurrentUnit"> + <rdfs:label xml:lang="en">electric current unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;abampere"/> + <om:Unit rdf:about="&om;ampere"/> + <om:Unit rdf:about="&om;biot"/> + <om:Unit rdf:about="&om;statampere"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedAmpere"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MagnetomotiveForceUnit"> + <rdfs:label xml:lang="en">magnetomotive force unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;gilbert"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedAmpere"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricCurrent"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ElectricCurrentUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;MagnetomotiveForce"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MagnetomotiveForceUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Ampere Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctoampere"> + <rdfs:label xml:lang="en">yoctoampere</rdfs:label> + <rdfs:label xml:lang="nl">yoctoampère</rdfs:label> + <rdfs:comment xml:lang="en">The yoctoampere is a unit of electric current defined as 1.0e-24 ampere.</rdfs:comment> + <om:symbol>yA</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptoampere"> + <rdfs:label xml:lang="en">zeptoampere</rdfs:label> + <rdfs:label xml:lang="nl">zeptoampère</rdfs:label> + <rdfs:comment xml:lang="en">The zeptampere is a unit of electric current defined as 1.0e-21 ampere.</rdfs:comment> + <om:symbol>zA</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attoampere"> + <rdfs:label xml:lang="en">attoampere</rdfs:label> + <rdfs:label xml:lang="nl">attoampère</rdfs:label> + <rdfs:comment xml:lang="en">The attoampere is a unit of electric current defined as 1.0e-18 ampere.</rdfs:comment> + <om:symbol>aA</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtoampere"> + <rdfs:label xml:lang="en">femtoampere</rdfs:label> + <rdfs:label xml:lang="nl">femtoampère</rdfs:label> + <rdfs:comment xml:lang="en">The femtoampere is a unit of electric current defined as 1.0e-15 ampere.</rdfs:comment> + <om:symbol>fA</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picoampere"> + <rdfs:label xml:lang="en">picoampere</rdfs:label> + <rdfs:label xml:lang="nl">picoampère</rdfs:label> + <rdfs:comment xml:lang="en">The picoampere is a unit of electric current defined as 1.0e-12 ampere.</rdfs:comment> + <om:symbol>pA</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanoampere"> + <rdfs:label xml:lang="en">nanoampere</rdfs:label> + <rdfs:label xml:lang="nl">nanoampère</rdfs:label> + <rdfs:comment xml:lang="en">The nanoampere is a unit of electric current defined as 1.0e-9 ampere.</rdfs:comment> + <om:symbol>nA</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microampere"> + <rdfs:label xml:lang="en">microampere</rdfs:label> + <rdfs:label xml:lang="nl">microampère</rdfs:label> + <rdfs:comment xml:lang="en">The microampere is a unit of electric current defined as 1.0e-6 ampere.</rdfs:comment> + <om:symbol>μA</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;milliampere"> + <rdfs:label xml:lang="en">milliampere</rdfs:label> + <rdfs:label xml:lang="nl">milliampère</rdfs:label> + <rdfs:comment xml:lang="en">The milliampere is a unit of electric current defined as 1.0e-3 ampere.</rdfs:comment> + <om:symbol>mA</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centiampere"> + <rdfs:label xml:lang="en">centiampere</rdfs:label> + <rdfs:label xml:lang="nl">centiampère</rdfs:label> + <rdfs:comment xml:lang="en">The centiampere is a unit of electric current defined as 1.0e-2 ampere.</rdfs:comment> + <om:symbol>cA</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;deciampere"> + <rdfs:label xml:lang="en">deciampere</rdfs:label> + <rdfs:label xml:lang="nl">deciampère</rdfs:label> + <rdfs:comment xml:lang="en">The deciampere is a unit of electric current defined as 1.0e-1 ampere.</rdfs:comment> + <om:symbol>dA</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decaampere"> + <rdfs:label xml:lang="en">decaampere</rdfs:label> + <rdfs:label xml:lang="nl">decaampère</rdfs:label> + <rdfs:comment xml:lang="en">The decaampere is a unit of electric current defined as 1.0e1 ampere.</rdfs:comment> + <om:symbol>daA</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectoampere"> + <rdfs:label xml:lang="en">hectoampere</rdfs:label> + <rdfs:label xml:lang="nl">hectoampère</rdfs:label> + <rdfs:comment xml:lang="en">The hectoampere is a unit of electric current defined as 1.0e2 ampere.</rdfs:comment> + <om:symbol>hA</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kiloampere"> + <rdfs:label xml:lang="en">kiloampere</rdfs:label> + <rdfs:label xml:lang="nl">kiloampère</rdfs:label> + <rdfs:comment xml:lang="en">The kiloampere is a unit of electric current defined as 1.0e3 ampere.</rdfs:comment> + <om:symbol>kA</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megaampere"> + <rdfs:label xml:lang="en">megaampere</rdfs:label> + <rdfs:label xml:lang="nl">megaampère</rdfs:label> + <rdfs:comment xml:lang="en">The megaampere is a unit of electric current defined as 1.0e6 ampere.</rdfs:comment> + <om:symbol>MA</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigaampere"> + <rdfs:label xml:lang="en">gigaampere</rdfs:label> + <rdfs:label xml:lang="nl">gigaampère</rdfs:label> + <rdfs:comment xml:lang="en">The gigaampere is a unit of electric current defined as 1.0e9 ampere.</rdfs:comment> + <om:symbol>GA</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;teraampere"> + <rdfs:label xml:lang="en">teraampere</rdfs:label> + <rdfs:label xml:lang="nl">teraampère</rdfs:label> + <rdfs:comment xml:lang="en">The teraampere is a unit of electric current defined as 1.0e12 ampere.</rdfs:comment> + <om:symbol>TA</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petaampere"> + <rdfs:label xml:lang="en">petaampere</rdfs:label> + <rdfs:label xml:lang="nl">petaampère</rdfs:label> + <rdfs:comment xml:lang="en">The petaampere is a unit of electric current defined as 1.0e15 ampere.</rdfs:comment> + <om:symbol>PA</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exaampere"> + <rdfs:label xml:lang="en">exaampere</rdfs:label> + <rdfs:label xml:lang="nl">exaampère</rdfs:label> + <rdfs:comment xml:lang="en">The exaampere is a unit of electric current defined as 1.0e18 ampere.</rdfs:comment> + <om:symbol>EA</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettaampere"> + <rdfs:label xml:lang="en">zettaampere</rdfs:label> + <rdfs:label xml:lang="nl">zettaampère</rdfs:label> + <rdfs:comment xml:lang="en">The zettaampere is a unit of electric current defined as 1.0e21 ampere.</rdfs:comment> + <om:symbol>ZA</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottaampere"> + <rdfs:label xml:lang="en">yottaampere</rdfs:label> + <rdfs:label xml:lang="nl">yottaampère</rdfs:label> + <rdfs:comment xml:lang="en">The yottaampere is a unit of electric current defined as 1.0e24 ampere.</rdfs:comment> + <om:symbol>YA</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedAmpere"> + <rdfs:label xml:lang="en">prefixed ampere</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;ampere"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricCurrent"> + <om:commonlyHasUnit rdf:resource="&om;attoampere"/> + <om:commonlyHasUnit rdf:resource="&om;centiampere"/> + <om:commonlyHasUnit rdf:resource="&om;decaampere"/> + <om:commonlyHasUnit rdf:resource="&om;deciampere"/> + <om:commonlyHasUnit rdf:resource="&om;exaampere"/> + <om:commonlyHasUnit rdf:resource="&om;femtoampere"/> + <om:commonlyHasUnit rdf:resource="&om;gigaampere"/> + <om:commonlyHasUnit rdf:resource="&om;hectoampere"/> + <om:commonlyHasUnit rdf:resource="&om;kiloampere"/> + <om:commonlyHasUnit rdf:resource="&om;megaampere"/> + <om:commonlyHasUnit rdf:resource="&om;microampere"/> + <om:commonlyHasUnit rdf:resource="&om;milliampere"/> + <om:commonlyHasUnit rdf:resource="&om;nanoampere"/> + <om:commonlyHasUnit rdf:resource="&om;petaampere"/> + <om:commonlyHasUnit rdf:resource="&om;picoampere"/> + <om:commonlyHasUnit rdf:resource="&om;teraampere"/> + </owl:Class> + + <owl:Class rdf:about="&om;MagnetomotiveForce"> + <om:commonlyHasUnit rdf:resource="&om;attoampere"/> + <om:commonlyHasUnit rdf:resource="&om;centiampere"/> + <om:commonlyHasUnit rdf:resource="&om;decaampere"/> + <om:commonlyHasUnit rdf:resource="&om;deciampere"/> + <om:commonlyHasUnit rdf:resource="&om;exaampere"/> + <om:commonlyHasUnit rdf:resource="&om;femtoampere"/> + <om:commonlyHasUnit rdf:resource="&om;gigaampere"/> + <om:commonlyHasUnit rdf:resource="&om;hectoampere"/> + <om:commonlyHasUnit rdf:resource="&om;kiloampere"/> + <om:commonlyHasUnit rdf:resource="&om;megaampere"/> + <om:commonlyHasUnit rdf:resource="&om;microampere"/> + <om:commonlyHasUnit rdf:resource="&om;milliampere"/> + <om:commonlyHasUnit rdf:resource="&om;nanoampere"/> + <om:commonlyHasUnit rdf:resource="&om;petaampere"/> + <om:commonlyHasUnit rdf:resource="&om;picoampere"/> + <om:commonlyHasUnit rdf:resource="&om;teraampere"/> + </owl:Class> + + <!-- Electric Current Unit Ontology --> + + <om:Unit rdf:about="&om;abampere"> + <rdfs:label xml:lang="en">abampere</rdfs:label> + <rdfs:label xml:lang="nl">abampère</rdfs:label> + <rdfs:comment xml:lang="en">The abampere is a unit of electric current defined as 10 ampere.</rdfs:comment> + <om:symbol>abA</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">10</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;biot"> + <rdfs:label xml:lang="en">biot</rdfs:label> + <rdfs:label xml:lang="nl">biot</rdfs:label> + <rdfs:comment xml:lang="en">The biot is a unit of electric current defined as 10 ampere.</rdfs:comment> + <om:symbol>Bi</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">10</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;statampere"> + <rdfs:label xml:lang="en">statampere</rdfs:label> + <rdfs:label xml:lang="nl">statampère</rdfs:label> + <rdfs:comment xml:lang="en">The statampere is a unit of electric current defined as 3.335641e-10 ampere.</rdfs:comment> + <om:symbol>statA</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0000000003335641</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e1Ampere"> + <om:hasNumericalValue>1.0e1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;ampere"/> + </om:Measure> + + <om:Measure rdf:about="&om;_3.335641e-10Ampere"> + <om:hasNumericalValue>3.335641e-10</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;ampere"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;ElectricCurrent"> + <om:commonlyHasUnit rdf:resource="&om;abampere"/> + <om:commonlyHasUnit rdf:resource="&om;biot"/> + <om:commonlyHasUnit rdf:resource="&om;statampere"/> + </owl:Class> + + <!-- Magnetomotive Force Unit Ontology --> + + <om:Unit rdf:about="&om;gilbert"> + <rdfs:label xml:lang="en">gilbert</rdfs:label> + <rdfs:label xml:lang="nl">gilbert</rdfs:label> + <rdfs:comment xml:lang="en">The gilbert is a unit of electric current defined as 7.957747e-1 ampere.</rdfs:comment> + <om:symbol>Gb</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.7957747</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCurrent-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_7.957747e-1Ampere"> + <om:hasNumericalValue>7.957747e-1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;ampere"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;MagnetomotiveForce"> + <om:commonlyHasUnit rdf:resource="&om;gilbert"/> + </owl:Class> + + <!-- Ampere Per Square Metre Ontology --> + + <om:UnitDivision rdf:about="&om;amperePerSquareMetre"> + <rdfs:label xml:lang="en">ampere per square metre</rdfs:label> + <rdfs:label xml:lang="nl">ampère per vierkante meter</rdfs:label> + <rdfs:comment xml:lang="en">Ampere per square metre is a unit of current density defined as ampere divided by square metre.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>A/m2</om:symbol> + <om:alternativeSymbol>A m-2</om:alternativeSymbol> + <om:alternativeSymbol>A·m-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;ampere"/> + <om:hasDenominator rdf:resource="&om;squareMetre"/> + <om:hasDimension rdf:resource="&om;currentDensity-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;CurrentDensity"> + <om:commonlyHasUnit rdf:resource="&om;amperePerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;CurrentDensityUnit"> + <rdfs:label xml:lang="en">current density unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;amperePerSquareMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;CurrentDensity"> + <om:commonlyHasUnit rdf:resource="&om;amperePerSquareMetre"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;CurrentDensityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Second Ampere Ontology --> + + <om:UnitMultiplication rdf:about="&om;second-TimeAmpere"> + <rdfs:label xml:lang="en">second ampere</rdfs:label> + <rdfs:label xml:lang="nl">seconde ampère</rdfs:label> + <om:symbol>s A</om:symbol> + <om:alternativeSymbol>s·A</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;second-Time"/> + <hasTerm2 rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:UnitMultiplication> + + <owl:Class rdf:about="&om;ElectricCharge"> + <om:commonlyHasUnit rdf:resource="&om;second-TimeAmpere"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricChargeUnit"> + <rdfs:label xml:lang="en">electric charge unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;abcoulomb"/> + <om:Unit rdf:about="&om;coulomb"/> + <om:Unit rdf:about="&om;faraday"/> + <om:Unit rdf:about="&om;franklin"/> + <om:Unit rdf:about="&om;statcoulomb"/> + <om:UnitMultiplication rdf:about="&om;second-TimeAmpere"/> + <om:UnitMultiplication rdf:about="&om;ampereHour"/> + <om:UnitMultiplication rdf:about="&om;milliampereHour"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedCoulomb"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricCharge"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ElectricChargeUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Coulomb Ontology --> + + <om:Unit rdf:about="&om;coulomb"> + <rdfs:label xml:lang="en">coulomb</rdfs:label> + <rdfs:label xml:lang="nl">coulomb</rdfs:label> + <rdfs:comment xml:lang="en">The coulomb is a unit of electric charge defined as ampere times second = farad times volt.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>C</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;second-TimeAmpere"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;ElectricCharge"> + <om:commonlyHasUnit rdf:resource="&om;coulomb"/> + </owl:Class> + + <!-- Coulomb Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctocoulomb"> + <rdfs:label xml:lang="en">yoctocoulomb</rdfs:label> + <rdfs:label xml:lang="nl">yoctocoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The yoctocoulomb is a unit of electric charge defined as 1.0e-24 coulomb.</rdfs:comment> + <om:symbol>yC</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptocoulomb"> + <rdfs:label xml:lang="en">zeptocoulomb</rdfs:label> + <rdfs:label xml:lang="nl">zeptocoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The zeptcoulomb is a unit of electric charge defined as 1.0e-21 coulomb.</rdfs:comment> + <om:symbol>zC</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attocoulomb"> + <rdfs:label xml:lang="en">attocoulomb</rdfs:label> + <rdfs:label xml:lang="nl">attocoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The attocoulomb is a unit of electric charge defined as 1.0e-18 coulomb.</rdfs:comment> + <om:symbol>aC</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtocoulomb"> + <rdfs:label xml:lang="en">femtocoulomb</rdfs:label> + <rdfs:label xml:lang="nl">femtocoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The femtocoulomb is a unit of electric charge defined as 1.0e-15 coulomb.</rdfs:comment> + <om:symbol>fC</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picocoulomb"> + <rdfs:label xml:lang="en">picocoulomb</rdfs:label> + <rdfs:label xml:lang="nl">picocoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The picocoulomb is a unit of electric charge defined as 1.0e-12 coulomb.</rdfs:comment> + <om:symbol>pC</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanocoulomb"> + <rdfs:label xml:lang="en">nanocoulomb</rdfs:label> + <rdfs:label xml:lang="nl">nanocoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The nanocoulomb is a unit of electric charge defined as 1.0e-9 coulomb.</rdfs:comment> + <om:symbol>nC</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microcoulomb"> + <rdfs:label xml:lang="en">microcoulomb</rdfs:label> + <rdfs:label xml:lang="nl">microcoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The microcoulomb is a unit of electric charge defined as 1.0e-6 coulomb.</rdfs:comment> + <om:symbol>μC</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millicoulomb"> + <rdfs:label xml:lang="en">millicoulomb</rdfs:label> + <rdfs:label xml:lang="nl">millicoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The millicoulomb is a unit of electric charge defined as 1.0e-3 coulomb.</rdfs:comment> + <om:symbol>mC</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centicoulomb"> + <rdfs:label xml:lang="en">centicoulomb</rdfs:label> + <rdfs:label xml:lang="nl">centicoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The centicoulomb is a unit of electric charge defined as 1.0e-2 coulomb.</rdfs:comment> + <om:symbol>cC</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decicoulomb"> + <rdfs:label xml:lang="en">decicoulomb</rdfs:label> + <rdfs:label xml:lang="nl">decicoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The decicoulomb is a unit of electric charge defined as 1.0e-1 coulomb.</rdfs:comment> + <om:symbol>dC</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decacoulomb"> + <rdfs:label xml:lang="en">decacoulomb</rdfs:label> + <rdfs:label xml:lang="nl">decacoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The decacoulomb is a unit of electric charge defined as 1.0e1 coulomb.</rdfs:comment> + <om:symbol>daC</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectocoulomb"> + <rdfs:label xml:lang="en">hectocoulomb</rdfs:label> + <rdfs:label xml:lang="nl">hectocoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The hectocoulomb is a unit of electric charge defined as 1.0e2 coulomb.</rdfs:comment> + <om:symbol>hC</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilocoulomb"> + <rdfs:label xml:lang="en">kilocoulomb</rdfs:label> + <rdfs:label xml:lang="nl">kilocoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The kilocoulomb is a unit of electric charge defined as 1.0e3 coulomb.</rdfs:comment> + <om:symbol>kC</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megacoulomb"> + <rdfs:label xml:lang="en">megacoulomb</rdfs:label> + <rdfs:label xml:lang="nl">megacoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The megacoulomb is a unit of electric charge defined as 1.0e6 coulomb.</rdfs:comment> + <om:symbol>MC</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigacoulomb"> + <rdfs:label xml:lang="en">gigacoulomb</rdfs:label> + <rdfs:label xml:lang="nl">gigacoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The gigacoulomb is a unit of electric charge defined as 1.0e9 coulomb.</rdfs:comment> + <om:symbol>GC</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;teracoulomb"> + <rdfs:label xml:lang="en">teracoulomb</rdfs:label> + <rdfs:label xml:lang="nl">teracoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The teracoulomb is a unit of electric charge defined as 1.0e12 coulomb.</rdfs:comment> + <om:symbol>TC</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petacoulomb"> + <rdfs:label xml:lang="en">petacoulomb</rdfs:label> + <rdfs:label xml:lang="nl">petacoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The petacoulomb is a unit of electric charge defined as 1.0e15 coulomb.</rdfs:comment> + <om:symbol>PC</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exacoulomb"> + <rdfs:label xml:lang="en">exacoulomb</rdfs:label> + <rdfs:label xml:lang="nl">exacoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The exacoulomb is a unit of electric charge defined as 1.0e18 coulomb.</rdfs:comment> + <om:symbol>EC</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettacoulomb"> + <rdfs:label xml:lang="en">zettacoulomb</rdfs:label> + <rdfs:label xml:lang="nl">zettacoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The zettacoulomb is a unit of electric charge defined as 1.0e21 coulomb.</rdfs:comment> + <om:symbol>ZC</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottacoulomb"> + <rdfs:label xml:lang="en">yottacoulomb</rdfs:label> + <rdfs:label xml:lang="nl">yottacoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The yottacoulomb is a unit of electric charge defined as 1.0e24 coulomb.</rdfs:comment> + <om:symbol>YC</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedCoulomb"> + <rdfs:label xml:lang="en">prefixed coulomb</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;coulomb"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricCharge"> + <om:commonlyHasUnit rdf:resource="&om;attocoulomb"/> + <om:commonlyHasUnit rdf:resource="&om;centicoulomb"/> + <om:commonlyHasUnit rdf:resource="&om;decacoulomb"/> + <om:commonlyHasUnit rdf:resource="&om;decicoulomb"/> + <om:commonlyHasUnit rdf:resource="&om;exacoulomb"/> + <om:commonlyHasUnit rdf:resource="&om;femtocoulomb"/> + <om:commonlyHasUnit rdf:resource="&om;gigacoulomb"/> + <om:commonlyHasUnit rdf:resource="&om;hectocoulomb"/> + <om:commonlyHasUnit rdf:resource="&om;kilocoulomb"/> + <om:commonlyHasUnit rdf:resource="&om;megacoulomb"/> + <om:commonlyHasUnit rdf:resource="&om;microcoulomb"/> + <om:commonlyHasUnit rdf:resource="&om;millicoulomb"/> + <om:commonlyHasUnit rdf:resource="&om;nanocoulomb"/> + <om:commonlyHasUnit rdf:resource="&om;petacoulomb"/> + <om:commonlyHasUnit rdf:resource="&om;picocoulomb"/> + <om:commonlyHasUnit rdf:resource="&om;teracoulomb"/> + </owl:Class> + + <!-- Electric Charge Unit Ontology --> + + <om:Unit rdf:about="&om;abcoulomb"> + <rdfs:label xml:lang="en">abcoulomb</rdfs:label> + <rdfs:label xml:lang="nl">abcoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The abcoulomb is a unit of electric charge defined as 10 coulomb.</rdfs:comment> + <om:symbol>abC</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">10</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;faraday"> + <rdfs:label xml:lang="en">faraday</rdfs:label> + <rdfs:label xml:lang="nl">faraday</rdfs:label> + <rdfs:comment xml:lang="en">The faraday is a unit of electric charge defined as 9.648531e4 coulomb.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <!-- <om:hasFactor rdf:datatype="&xsd;decimal">96485.31</om:hasFactor> --> + <!-- hasDefinition --> <!-- <om:hasUnit rdf:resource="&om;coulomb"/> --> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;franklin"> + <rdfs:label xml:lang="en">franklin</rdfs:label> + <rdfs:label xml:lang="nl">franklin</rdfs:label> + <rdfs:comment xml:lang="en">The franklin is a unit of electric charge defined as 3.335641e-10 coulomb.</rdfs:comment> + <om:symbol>Fr</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0000000003335641</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;statcoulomb"> + <rdfs:label xml:lang="en">statcoulomb</rdfs:label> + <rdfs:label xml:lang="nl">statcoulomb</rdfs:label> + <rdfs:comment xml:lang="en">The statcoulomb is a unit of electric charge defined as 3.335641e-10 coulomb.</rdfs:comment> + <om:symbol>statC</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0000000003335641</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:Unit> + + <om:UnitMultiplication rdf:about="&om;ampereHour"> + <rdfs:label xml:lang="en">ampere hour</rdfs:label> + <rdfs:label xml:lang="nl">ampère-uur</rdfs:label> + <om:symbol>A h</om:symbol> + <om:alternativeSymbol>A·h</om:alternativeSymbol> + <om:alternativeSymbol>Ah</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;ampere"/> + <hasTerm2 rdf:resource="&om;hour"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:UnitMultiplication> + + <om:UnitMultiplication rdf:about="&om;milliampereHour"> + <rdfs:label xml:lang="en">milliampere hour</rdfs:label> + <rdfs:label xml:lang="nl">milliampère-uur</rdfs:label> + <om:symbol>mA h</om:symbol> + <om:alternativeSymbol>mA·h</om:alternativeSymbol> + <om:alternativeSymbol>mAh</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;milliampere"/> + <hasTerm2 rdf:resource="&om;hour"/> + <om:hasDimension rdf:resource="&om;electricCharge-Dimension"/> + </om:UnitMultiplication> + + <owl:Class rdf:about="&om;ElectricCharge"> + <om:commonlyHasUnit rdf:resource="&om;second-TimeAmpere"/> + </owl:Class> + + <!-- <om:Measure rdf:about="&om;_1.0e1Coulomb"> + <om:hasNumericalValue>1.0e1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;coulomb"/> + </om:Measure> + + <om:Measure rdf:about="&om;_3.335641e-10Coulomb"> + <om:hasNumericalValue>3.335641e-10</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;coulomb"/> + </om:Measure> + + <om:Measure rdf:about="&om;_9.648531e4Coulomb"> + <om:hasNumericalValue>9.648531e4</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;coulomb"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;ElectricCharge"> + <om:commonlyHasUnit rdf:resource="&om;abcoulomb"/> + <om:commonlyHasUnit rdf:resource="&om;faraday"/> + <om:commonlyHasUnit rdf:resource="&om;franklin"/> + <om:commonlyHasUnit rdf:resource="&om;statcoulomb"/> + <om:commonlyHasUnit rdf:resource="&om;amperehour"/> + <om:commonlyHasUnit rdf:resource="&om;milliamperehour"/> + </owl:Class> + + <!-- Watt Per Ampere Ontology --> + + <om:UnitDivision rdf:about="&om;wattPerAmpere"> + <rdfs:label xml:lang="en">watt per ampere</rdfs:label> + <rdfs:label xml:lang="nl">watt per ampère</rdfs:label> + <om:symbol>W/A</om:symbol> + <om:alternativeSymbol>W A-1</om:alternativeSymbol> + <om:alternativeSymbol>W·A-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;watt"/> + <om:hasDenominator rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;ElectricPotential"> + <om:commonlyHasUnit rdf:resource="&om;wattPerAmpere"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElectromotiveForce"> + <om:commonlyHasUnit rdf:resource="&om;wattPerAmpere"/> + </owl:Class> + + <owl:Class rdf:about="&om;PotentialDifference"> + <om:commonlyHasUnit rdf:resource="&om;wattPerAmpere"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricPotentialUnit"> + <rdfs:label xml:lang="en">electric potential unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:SingularUnit rdf:about="&om;abvolt"/> + <om:SingularUnit rdf:about="&om;statvolt"/> + <om:SingularUnit rdf:about="&om;volt"/> + <om:UnitDivision rdf:about="&om;wattPerAmpere"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedVolt"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricPotential"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ElectricPotentialUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Volt Ontology --> + + <om:Unit rdf:about="&om;volt"> + <rdfs:label xml:lang="en">volt</rdfs:label> + <rdfs:label xml:lang="nl">volt</rdfs:label> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>V</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;wattPerAmpere"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;ElectricPotential"> + <om:commonlyHasUnit rdf:resource="&om;volt"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElectromotiveForce"> + <om:commonlyHasUnit rdf:resource="&om;volt"/> + </owl:Class> + + <owl:Class rdf:about="&om;PotentialDifference"> + <om:commonlyHasUnit rdf:resource="&om;volt"/> + </owl:Class> + + <!-- Volt Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctovolt"> + <rdfs:label xml:lang="en">yoctovolt</rdfs:label> + <rdfs:label xml:lang="nl">yoctovolt</rdfs:label> + <om:symbol>yV</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptovolt"> + <rdfs:label xml:lang="en">zeptovolt</rdfs:label> + <rdfs:label xml:lang="nl">zeptovolt</rdfs:label> + <om:symbol>zV</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attovolt"> + <rdfs:label xml:lang="nl">attovolt</rdfs:label> + <rdfs:label xml:lang="en">attovolt</rdfs:label> + <om:symbol>aV</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtovolt"> + <rdfs:label xml:lang="nl">femtovolt</rdfs:label> + <rdfs:label xml:lang="en">femtovolt</rdfs:label> + <om:symbol>fV</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picovolt"> + <rdfs:label xml:lang="nl">picovolt</rdfs:label> + <rdfs:label xml:lang="en">picovolt</rdfs:label> + <om:symbol>pV</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanovolt"> + <rdfs:label xml:lang="nl">nanovolt</rdfs:label> + <rdfs:label xml:lang="en">nanovolt</rdfs:label> + <om:symbol>nV</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microvolt"> + <rdfs:label xml:lang="nl">microvolt</rdfs:label> + <rdfs:label xml:lang="en">microvolt</rdfs:label> + <om:symbol>μV</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millivolt"> + <rdfs:label xml:lang="en">millivolt</rdfs:label> + <rdfs:label xml:lang="nl">millivolt</rdfs:label> + <om:symbol>mV</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centivolt"> + <rdfs:label xml:lang="en">centivolt</rdfs:label> + <rdfs:label xml:lang="nl">centivolt</rdfs:label> + <om:symbol>cV</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decivolt"> + <rdfs:label xml:lang="en">decivolt</rdfs:label> + <rdfs:label xml:lang="nl">decivolt</rdfs:label> + <om:symbol>dV</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decavolt"> + <rdfs:label xml:lang="en">decavolt</rdfs:label> + <rdfs:label xml:lang="nl">decavolt</rdfs:label> + <om:symbol>daV</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectovolt"> + <rdfs:label xml:lang="en">hectovolt</rdfs:label> + <rdfs:label xml:lang="nl">hectovolt</rdfs:label> + <om:symbol>hV</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilovolt"> + <rdfs:label xml:lang="en">kilovolt</rdfs:label> + <rdfs:label xml:lang="nl">kilovolt</rdfs:label> + <om:symbol>kV</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megavolt"> + <rdfs:label xml:lang="en">megavolt</rdfs:label> + <rdfs:label xml:lang="nl">megavolt</rdfs:label> + <om:symbol>MV</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigavolt"> + <rdfs:label xml:lang="en">gigavolt</rdfs:label> + <rdfs:label xml:lang="nl">gigavolt</rdfs:label> + <om:symbol>GV</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;teravolt"> + <rdfs:label xml:lang="en">teravolt</rdfs:label> + <rdfs:label xml:lang="nl">teravolt</rdfs:label> + <om:symbol>TV</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petavolt"> + <rdfs:label xml:lang="en">petavolt</rdfs:label> + <rdfs:label xml:lang="nl">petavolt</rdfs:label> + <om:symbol>PV</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exavolt"> + <rdfs:label xml:lang="en">exavolt</rdfs:label> + <rdfs:label xml:lang="nl">exavolt</rdfs:label> + <om:symbol>EV</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettavolt"> + <rdfs:label xml:lang="en">zettavolt</rdfs:label> + <rdfs:label xml:lang="nl">zettavolt</rdfs:label> + <om:symbol>ZV</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottavolt"> + <rdfs:label xml:lang="en">yottavolt</rdfs:label> + <rdfs:label xml:lang="nl">yottavolt</rdfs:label> + <om:symbol>YV</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedVolt"> + <rdfs:label xml:lang="en">prefixed volt</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;volt"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricPotential"> + <om:commonlyHasUnit rdf:resource="&om;attovolt"/> + <om:commonlyHasUnit rdf:resource="&om;centivolt"/> + <om:commonlyHasUnit rdf:resource="&om;decavolt"/> + <om:commonlyHasUnit rdf:resource="&om;decivolt"/> + <om:commonlyHasUnit rdf:resource="&om;exavolt"/> + <om:commonlyHasUnit rdf:resource="&om;femtovolt"/> + <om:commonlyHasUnit rdf:resource="&om;gigavolt"/> + <om:commonlyHasUnit rdf:resource="&om;hectovolt"/> + <om:commonlyHasUnit rdf:resource="&om;kilovolt"/> + <om:commonlyHasUnit rdf:resource="&om;megavolt"/> + <om:commonlyHasUnit rdf:resource="&om;microvolt"/> + <om:commonlyHasUnit rdf:resource="&om;millivolt"/> + <om:commonlyHasUnit rdf:resource="&om;nanovolt"/> + <om:commonlyHasUnit rdf:resource="&om;petavolt"/> + <om:commonlyHasUnit rdf:resource="&om;picovolt"/> + <om:commonlyHasUnit rdf:resource="&om;teravolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElectromotiveForce"> + <om:commonlyHasUnit rdf:resource="&om;attovolt"/> + <om:commonlyHasUnit rdf:resource="&om;centivolt"/> + <om:commonlyHasUnit rdf:resource="&om;decavolt"/> + <om:commonlyHasUnit rdf:resource="&om;decivolt"/> + <om:commonlyHasUnit rdf:resource="&om;exavolt"/> + <om:commonlyHasUnit rdf:resource="&om;femtovolt"/> + <om:commonlyHasUnit rdf:resource="&om;gigavolt"/> + <om:commonlyHasUnit rdf:resource="&om;hectovolt"/> + <om:commonlyHasUnit rdf:resource="&om;kilovolt"/> + <om:commonlyHasUnit rdf:resource="&om;megavolt"/> + <om:commonlyHasUnit rdf:resource="&om;microvolt"/> + <om:commonlyHasUnit rdf:resource="&om;millivolt"/> + <om:commonlyHasUnit rdf:resource="&om;nanovolt"/> + <om:commonlyHasUnit rdf:resource="&om;petavolt"/> + <om:commonlyHasUnit rdf:resource="&om;picovolt"/> + <om:commonlyHasUnit rdf:resource="&om;teravolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;PotentialDifference"> + <om:commonlyHasUnit rdf:resource="&om;attovolt"/> + <om:commonlyHasUnit rdf:resource="&om;centivolt"/> + <om:commonlyHasUnit rdf:resource="&om;decavolt"/> + <om:commonlyHasUnit rdf:resource="&om;decivolt"/> + <om:commonlyHasUnit rdf:resource="&om;exavolt"/> + <om:commonlyHasUnit rdf:resource="&om;femtovolt"/> + <om:commonlyHasUnit rdf:resource="&om;gigavolt"/> + <om:commonlyHasUnit rdf:resource="&om;hectovolt"/> + <om:commonlyHasUnit rdf:resource="&om;kilovolt"/> + <om:commonlyHasUnit rdf:resource="&om;megavolt"/> + <om:commonlyHasUnit rdf:resource="&om;microvolt"/> + <om:commonlyHasUnit rdf:resource="&om;millivolt"/> + <om:commonlyHasUnit rdf:resource="&om;nanovolt"/> + <om:commonlyHasUnit rdf:resource="&om;petavolt"/> + <om:commonlyHasUnit rdf:resource="&om;picovolt"/> + <om:commonlyHasUnit rdf:resource="&om;teravolt"/> + </owl:Class> + + <!-- Electric Potential Unit Ontology --> + + <om:Unit rdf:about="&om;abvolt"> + <rdfs:label xml:lang="en">abvolt</rdfs:label> + <rdfs:label xml:lang="nl">abvolt</rdfs:label> + <rdfs:comment xml:lang="en">The abvolt is a unit of electric potential defined as 1.0e-8 volt.</rdfs:comment> + <om:symbol>abV</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.000000010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;statvolt"> + <rdfs:label xml:lang="en">statvolt</rdfs:label> + <rdfs:label xml:lang="nl">statvolt</rdfs:label> + <rdfs:comment xml:lang="en">The statvolt is a unit of electric potential defined as 2.997925e2 volt.</rdfs:comment> + <om:symbol>statV</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">299.7925</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricPotential-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e-8Volt"> + <om:hasNumericalValue>1.0e-8</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;volt"/> + </om:Measure> + + <om:Measure rdf:about="&om;_2.997925e2Volt"> + <om:hasNumericalValue>2.997925e2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;volt"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;ElectricPotential"> + <om:commonlyHasUnit rdf:resource="&om;abvolt"/> + <om:commonlyHasUnit rdf:resource="&om;statvolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElectromotiveForce"> + <om:commonlyHasUnit rdf:resource="&om;abvolt"/> + <om:commonlyHasUnit rdf:resource="&om;statvolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;PotentialDifference"> + <om:commonlyHasUnit rdf:resource="&om;abvolt"/> + <om:commonlyHasUnit rdf:resource="&om;statvolt"/> + </owl:Class> + + <!-- Coulomb Per Volt Ontology --> + + <om:UnitDivision rdf:about="&om;coulombPerVolt"> + <rdfs:label xml:lang="en">coulomb per volt</rdfs:label> + <rdfs:label xml:lang="nl">coulomb per volt</rdfs:label> + <om:symbol>C/V</om:symbol> + <om:alternativeSymbol>C V-1</om:alternativeSymbol> + <om:alternativeSymbol>C·V-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;coulomb"/> + <om:hasDenominator rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Capacitance"> + <om:commonlyHasUnit rdf:resource="&om;coulombPerVolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;CapacitanceUnit"> + <rdfs:label xml:lang="en">capacitance unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;abfarad"/> + <om:Unit rdf:about="&om;farad"/> + <om:Unit rdf:about="&om;statfarad"/> + <om:UnitDivision rdf:about="&om;coulombPerVolt"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedFarad"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Capacitance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;CapacitanceUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Farad Ontology --> + + <om:Unit rdf:about="&om;farad"> + <rdfs:label xml:lang="en">farad</rdfs:label> + <rdfs:label xml:lang="nl">farad</rdfs:label> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>F</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;coulombPerVolt"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;Capacitance"> + <om:commonlyHasUnit rdf:resource="&om;farad"/> + </owl:Class> + + <!-- Farad Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctofarad"> + <rdfs:label xml:lang="en">yoctofarad</rdfs:label> + <rdfs:label xml:lang="nl">yoctofarad</rdfs:label> + <rdfs:comment xml:lang="en">The yoctofarad is a unit of capacitance defined as 1.0e-24 farad.</rdfs:comment> + <om:symbol>yF</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptofarad"> + <rdfs:label xml:lang="en">zeptofarad</rdfs:label> + <rdfs:label xml:lang="nl">zeptofarad</rdfs:label> + <rdfs:comment xml:lang="en">The zeptfarad is a unit of capacitance defined as 1.0e-21 farad.</rdfs:comment> + <om:symbol>zF</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attofarad"> + <rdfs:label xml:lang="en">attofarad</rdfs:label> + <rdfs:label xml:lang="nl">attofarad</rdfs:label> + <rdfs:comment xml:lang="en">The attofarad is a unit of capacitance defined as 1.0e-18 farad.</rdfs:comment> + <om:symbol>aF</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtofarad"> + <rdfs:label xml:lang="en">femtofarad</rdfs:label> + <rdfs:label xml:lang="nl">femtofarad</rdfs:label> + <rdfs:comment xml:lang="en">The femtofarad is a unit of capacitance defined as 1.0e-15 farad.</rdfs:comment> + <om:symbol>fF</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picofarad"> + <rdfs:label xml:lang="en">picofarad</rdfs:label> + <rdfs:label xml:lang="nl">picofarad</rdfs:label> + <rdfs:comment xml:lang="en">The picofarad is a unit of capacitance defined as 1.0e-12 farad.</rdfs:comment> + <om:symbol>pF</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanofarad"> + <rdfs:label xml:lang="en">nanofarad</rdfs:label> + <rdfs:label xml:lang="nl">nanofarad</rdfs:label> + <rdfs:comment xml:lang="en">The nanofarad is a unit of capacitance defined as 1.0e-9 farad.</rdfs:comment> + <om:symbol>nF</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microfarad"> + <rdfs:label xml:lang="en">microfarad</rdfs:label> + <rdfs:label xml:lang="nl">microfarad</rdfs:label> + <rdfs:comment xml:lang="en">The microfarad is a unit of capacitance defined as 1.0e-6 farad.</rdfs:comment> + <om:symbol>μF</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millifarad"> + <rdfs:label xml:lang="en">millifarad</rdfs:label> + <rdfs:label xml:lang="nl">millifarad</rdfs:label> + <rdfs:comment xml:lang="en">The millifarad is a unit of capacitance defined as 1.0e-3 farad.</rdfs:comment> + <om:symbol>mF</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centifarad"> + <rdfs:label xml:lang="en">centifarad</rdfs:label> + <rdfs:label xml:lang="nl">centifarad</rdfs:label> + <rdfs:comment xml:lang="en">The centifarad is a unit of capacitance defined as 1.0e-2 farad.</rdfs:comment> + <om:symbol>cF</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decifarad"> + <rdfs:label xml:lang="en">decifarad</rdfs:label> + <rdfs:label xml:lang="nl">decifarad</rdfs:label> + <rdfs:comment xml:lang="en">The decifarad is a unit of capacitance defined as 1.0e-1 farad.</rdfs:comment> + <om:symbol>dF</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decafarad"> + <rdfs:label xml:lang="en">decafarad</rdfs:label> + <rdfs:label xml:lang="nl">decafarad</rdfs:label> + <rdfs:comment xml:lang="en">The decafarad is a unit of capacitance defined as 1.0e1 farad.</rdfs:comment> + <om:symbol>daF</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectofarad"> + <rdfs:label xml:lang="en">hectofarad</rdfs:label> + <rdfs:label xml:lang="nl">hectofarad</rdfs:label> + <rdfs:comment xml:lang="en">The hectofarad is a unit of capacitance defined as 1.0e2 farad.</rdfs:comment> + <om:symbol>hF</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilofarad"> + <rdfs:label xml:lang="en">kilofarad</rdfs:label> + <rdfs:label xml:lang="nl">kilofarad</rdfs:label> + <rdfs:comment xml:lang="en">The kilofarad is a unit of capacitance defined as 1.0e3 farad.</rdfs:comment> + <om:symbol>kF</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megafarad"> + <rdfs:label xml:lang="en">megafarad</rdfs:label> + <rdfs:label xml:lang="nl">megafarad</rdfs:label> + <rdfs:comment xml:lang="en">The megafarad is a unit of capacitance defined as 1.0e6 farad.</rdfs:comment> + <om:symbol>MF</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigafarad"> + <rdfs:label xml:lang="en">gigafarad</rdfs:label> + <rdfs:label xml:lang="nl">gigafarad</rdfs:label> + <rdfs:comment xml:lang="en">The gigafarad is a unit of capacitance defined as 1.0e9 farad.</rdfs:comment> + <om:symbol>GF</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;terafarad"> + <rdfs:label xml:lang="en">terafarad</rdfs:label> + <rdfs:label xml:lang="nl">terafarad</rdfs:label> + <rdfs:comment xml:lang="en">The terafarad is a unit of capacitance defined as 1.0e12 farad.</rdfs:comment> + <om:symbol>TF</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petafarad"> + <rdfs:label xml:lang="en">petafarad</rdfs:label> + <rdfs:label xml:lang="nl">petafarad</rdfs:label> + <rdfs:comment xml:lang="en">The petafarad is a unit of capacitance defined as 1.0e15 farad.</rdfs:comment> + <om:symbol>PF</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exafarad"> + <rdfs:label xml:lang="en">exafarad</rdfs:label> + <rdfs:label xml:lang="nl">exafarad</rdfs:label> + <rdfs:comment xml:lang="en">The exafarad is a unit of capacitance defined as 1.0e18 farad.</rdfs:comment> + <om:symbol>EF</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettafarad"> + <rdfs:label xml:lang="en">zettafarad</rdfs:label> + <rdfs:label xml:lang="nl">zettafarad</rdfs:label> + <rdfs:comment xml:lang="en">The zettafarad is a unit of capacitance defined as 1.0e21 farad.</rdfs:comment> + <om:symbol>ZF</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottafarad"> + <rdfs:label xml:lang="en">yottafarad</rdfs:label> + <rdfs:label xml:lang="nl">yottafarad</rdfs:label> + <rdfs:comment xml:lang="en">The yottafarad is a unit of capacitance defined as 1.0e24 farad.</rdfs:comment> + <om:symbol>YF</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedFarad"> + <rdfs:label xml:lang="en">prefixed farad</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;farad"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Capacitance"> + <om:commonlyHasUnit rdf:resource="&om;attofarad"/> + <om:commonlyHasUnit rdf:resource="&om;centifarad"/> + <om:commonlyHasUnit rdf:resource="&om;decafarad"/> + <om:commonlyHasUnit rdf:resource="&om;decifarad"/> + <om:commonlyHasUnit rdf:resource="&om;exafarad"/> + <om:commonlyHasUnit rdf:resource="&om;femtofarad"/> + <om:commonlyHasUnit rdf:resource="&om;gigafarad"/> + <om:commonlyHasUnit rdf:resource="&om;hectofarad"/> + <om:commonlyHasUnit rdf:resource="&om;kilofarad"/> + <om:commonlyHasUnit rdf:resource="&om;megafarad"/> + <om:commonlyHasUnit rdf:resource="&om;microfarad"/> + <om:commonlyHasUnit rdf:resource="&om;millifarad"/> + <om:commonlyHasUnit rdf:resource="&om;nanofarad"/> + <om:commonlyHasUnit rdf:resource="&om;petafarad"/> + <om:commonlyHasUnit rdf:resource="&om;picofarad"/> + <om:commonlyHasUnit rdf:resource="&om;terafarad"/> + </owl:Class> + + <!-- Capacitance Unit Ontology --> + + <om:Unit rdf:about="&om;abfarad"> + <rdfs:label xml:lang="en">abfarad</rdfs:label> + <rdfs:label xml:lang="nl">abfarad</rdfs:label> + <rdfs:comment xml:lang="en">The abfarad is a unit of capacitance defined as 1.0e9 farad.</rdfs:comment> + <om:symbol>abF</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">1000000000</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;statfarad"> + <rdfs:label xml:lang="en">statfarad</rdfs:label> + <rdfs:label xml:lang="nl">statfarad</rdfs:label> + <rdfs:comment xml:lang="en">The statfarad is a unit of capacitance defined as 1.112650e-12 farad.</rdfs:comment> + <om:symbol>statF</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.000000000001112650</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;farad"/> + <om:hasDimension rdf:resource="&om;capacitance-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e9Farad"> + <om:hasNumericalValue>1.0e9</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;farad"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.112650e-12Farad"> + <om:hasNumericalValue>1.112650e-12</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;farad"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Capacitance"> + <om:commonlyHasUnit rdf:resource="&om;abfarad"/> + <om:commonlyHasUnit rdf:resource="&om;statfarad"/> + </owl:Class> + + <!-- Volt Per Ampere Ontology --> + + <om:UnitDivision rdf:about="&om;voltPerAmpere"> + <rdfs:label xml:lang="en">volt per ampere</rdfs:label> + <rdfs:label xml:lang="nl">volt per ampère</rdfs:label> + <om:symbol>V/A</om:symbol> + <om:alternativeSymbol>V A-1</om:alternativeSymbol> + <om:alternativeSymbol>V·A-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;volt"/> + <om:hasDenominator rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;ElectricalResistance"> + <om:commonlyHasUnit rdf:resource="&om;voltPerAmpere"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricalResistanceUnit"> + <rdfs:label xml:lang="en">electrical resistance unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;abohm"/> + <om:Unit rdf:about="&om;ohm"/> + <om:Unit rdf:about="&om;statohm"/> + <om:UnitDivision rdf:about="&om;voltPerAmpere"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedOhm"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricalResistance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ElectricalResistanceUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Ohm Ontology --> + + <om:Unit rdf:about="&om;ohm"> + <rdfs:label xml:lang="en">ohm</rdfs:label> + <rdfs:label xml:lang="nl">ohm</rdfs:label> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>Ω</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;voltPerAmpere"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;ElectricalResistance"> + <om:commonlyHasUnit rdf:resource="&om;ohm"/> + </owl:Class> + + <!-- Ohm Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctoohm"> + <rdfs:label xml:lang="en">yoctoohm</rdfs:label> + <rdfs:label xml:lang="nl">yoctoohm</rdfs:label> + <om:symbol>yΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptoohm"> + <rdfs:label xml:lang="en">zeptoohm</rdfs:label> + <rdfs:label xml:lang="nl">zeptoohm</rdfs:label> + <om:symbol>zΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attoohm"> + <rdfs:label xml:lang="en">attoohm</rdfs:label> + <rdfs:label xml:lang="nl">attoohm</rdfs:label> + <om:symbol>aΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtoohm"> + <rdfs:label xml:lang="en">femtoohm</rdfs:label> + <rdfs:label xml:lang="nl">femtoohm</rdfs:label> + <om:symbol>fΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picoohm"> + <rdfs:label xml:lang="en">picoohm</rdfs:label> + <rdfs:label xml:lang="nl">picoohm</rdfs:label> + <om:symbol>pΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanoohm"> + <rdfs:label xml:lang="en">nanoohm</rdfs:label> + <rdfs:label xml:lang="nl">nanoohm</rdfs:label> + <om:symbol>nΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microohm"> + <rdfs:label xml:lang="en">microohm</rdfs:label> + <rdfs:label xml:lang="nl">microohm</rdfs:label> + <om:symbol>μΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;milliohm"> + <rdfs:label xml:lang="en">milliohm</rdfs:label> + <rdfs:label xml:lang="nl">milliohm</rdfs:label> + <om:symbol>mΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centiohm"> + <rdfs:label xml:lang="en">centiohm</rdfs:label> + <rdfs:label xml:lang="nl">centiohm</rdfs:label> + <om:symbol>cΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;deciohm"> + <rdfs:label xml:lang="en">deciohm</rdfs:label> + <rdfs:label xml:lang="nl">deciohm</rdfs:label> + <om:symbol>dΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decaohm"> + <rdfs:label xml:lang="en">decaohm</rdfs:label> + <rdfs:label xml:lang="nl">decaohm</rdfs:label> + <om:symbol>daΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectoohm"> + <rdfs:label xml:lang="en">hectoohm</rdfs:label> + <rdfs:label xml:lang="nl">hectoohm</rdfs:label> + <om:symbol>hΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilohm"> + <rdfs:label xml:lang="en">kilohm</rdfs:label> + <rdfs:label xml:lang="nl">kilohm</rdfs:label> + <om:alternativeLabel xml:lang="en">kiloohm</om:alternativeLabel> + <om:symbol>kΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megohm"> + <rdfs:label xml:lang="en">megohm</rdfs:label> + <rdfs:label xml:lang="nl">megohm</rdfs:label> + <om:alternativeLabel xml:lang="en">megaohm</om:alternativeLabel> + <om:symbol>MΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigaohm"> + <rdfs:label xml:lang="en">gigaohm</rdfs:label> + <rdfs:label xml:lang="nl">gigaohm</rdfs:label> + <om:symbol>GΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;teraohm"> + <rdfs:label xml:lang="en">teraohm</rdfs:label> + <rdfs:label xml:lang="nl">teraohm</rdfs:label> + <om:symbol>TΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petaohm"> + <rdfs:label xml:lang="en">petaohm</rdfs:label> + <rdfs:label xml:lang="nl">petaohm</rdfs:label> + <om:symbol>PΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exaohm"> + <rdfs:label xml:lang="en">exaohm</rdfs:label> + <rdfs:label xml:lang="nl">exaohm</rdfs:label> + <om:symbol>EΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettaohm"> + <rdfs:label xml:lang="en">zettaohm</rdfs:label> + <rdfs:label xml:lang="nl">zettaohm</rdfs:label> + <om:symbol>ZΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottaohm"> + <rdfs:label xml:lang="en">yottaohm</rdfs:label> + <rdfs:label xml:lang="nl">yottaohm</rdfs:label> + <om:symbol>YΩ</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedOhm"> + <rdfs:label xml:lang="en">prefixed ohm</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;ohm"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricalResistance"> + <om:commonlyHasUnit rdf:resource="&om;attoohm"/> + <om:commonlyHasUnit rdf:resource="&om;centiohm"/> + <om:commonlyHasUnit rdf:resource="&om;decaohm"/> + <om:commonlyHasUnit rdf:resource="&om;deciohm"/> + <om:commonlyHasUnit rdf:resource="&om;exaohm"/> + <om:commonlyHasUnit rdf:resource="&om;femtoohm"/> + <om:commonlyHasUnit rdf:resource="&om;gigaohm"/> + <om:commonlyHasUnit rdf:resource="&om;hectoohm"/> + <om:commonlyHasUnit rdf:resource="&om;kilohm"/> + <om:commonlyHasUnit rdf:resource="&om;megohm"/> + <om:commonlyHasUnit rdf:resource="&om;microohm"/> + <om:commonlyHasUnit rdf:resource="&om;milliohm"/> + <om:commonlyHasUnit rdf:resource="&om;nanoohm"/> + <om:commonlyHasUnit rdf:resource="&om;petaohm"/> + <om:commonlyHasUnit rdf:resource="&om;picoohm"/> + <om:commonlyHasUnit rdf:resource="&om;teraohm"/> + </owl:Class> + + <!-- Electrical Resistance Unit Ontology --> + + <om:Unit rdf:about="&om;abohm"> + <rdfs:label xml:lang="en">abohm</rdfs:label> + <rdfs:label xml:lang="nl">abohm</rdfs:label> + <rdfs:comment xml:lang="en">The abohm is a unit of electrical resistance defined as 1.0e-9 ohm.</rdfs:comment> + <om:symbol>abΩ</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0000000010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;statohm"> + <rdfs:label xml:lang="en">statohm</rdfs:label> + <rdfs:label xml:lang="nl">statohm</rdfs:label> + <rdfs:comment xml:lang="en">The statohm is a unit of electrical resistance defined as 8.987552e11 ohm.</rdfs:comment> + <om:symbol>statΩ</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">898755200000</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;ohm"/> + <om:hasDimension rdf:resource="&om;electricalResistance-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e-9Ohm"> + <om:hasNumericalValue>1.0e-9</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;ohm"/> + </om:Measure> + + <om:Measure rdf:about="&om;_8.987552e11Ohm"> + <om:hasNumericalValue>8.987552e11</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;ohm"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;ElectricalResistance"> + <om:commonlyHasUnit rdf:resource="&om;abohm"/> + <om:commonlyHasUnit rdf:resource="&om;statohm"/> + </owl:Class> + + <!-- Ampere Per Volt Ontology --> + + <om:UnitDivision rdf:about="&om;amperePerVolt"> + <rdfs:label xml:lang="en">ampere per volt</rdfs:label> + <rdfs:label xml:lang="nl">ampère per volt</rdfs:label> + <om:symbol>A/V</om:symbol> + <om:alternativeSymbol>A V-1</om:alternativeSymbol> + <om:alternativeSymbol>A·V-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;ampere"/> + <om:hasDenominator rdf:resource="&om;volt"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;ElectricalConductance"> + <om:commonlyHasUnit rdf:resource="&om;amperePerVolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricalConductanceUnit"> + <rdfs:label xml:lang="en">electrical conductance unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;abmho"/> + <om:Unit rdf:about="&om;mho"/> + <om:Unit rdf:about="&om;siemens"/> + <om:Unit rdf:about="&om;statmho"/> + <om:UnitDivision rdf:about="&om;amperePerVolt"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedSiemens"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricalConductance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ElectricalConductanceUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Siemens Ontology --> + + <om:Unit rdf:about="&om;siemens"> + <rdfs:label xml:lang="en">siemens</rdfs:label> + <rdfs:label xml:lang="nl">siemens</rdfs:label> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>S</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;amperePerVolt"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;ElectricalConductance"> + <om:commonlyHasUnit rdf:resource="&om;siemens"/> + </owl:Class> + + <!-- Siemens Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctosiemens"> + <rdfs:label xml:lang="en">yoctosiemens</rdfs:label> + <rdfs:label xml:lang="nl">yoctosiemens</rdfs:label> + <om:symbol>yS</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptosiemens"> + <rdfs:label xml:lang="en">zeptosiemens</rdfs:label> + <rdfs:label xml:lang="nl">zeptosiemens</rdfs:label> + <om:symbol>zS</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attosiemens"> + <rdfs:label xml:lang="en">attosiemens</rdfs:label> + <rdfs:label xml:lang="nl">attosiemens</rdfs:label> + <om:symbol>aS</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtosiemens"> + <rdfs:label xml:lang="en">femtosiemens</rdfs:label> + <rdfs:label xml:lang="nl">femtosiemens</rdfs:label> + <om:symbol>fS</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picosiemens"> + <rdfs:label xml:lang="en">picosiemens</rdfs:label> + <rdfs:label xml:lang="nl">picosiemens</rdfs:label> + <om:symbol>pS</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanosiemens"> + <rdfs:label xml:lang="en">nanosiemens</rdfs:label> + <rdfs:label xml:lang="nl">nanosiemens</rdfs:label> + <om:symbol>nS</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microsiemens"> + <rdfs:label xml:lang="en">microsiemens</rdfs:label> + <rdfs:label xml:lang="nl">microsiemens</rdfs:label> + <om:symbol>μS</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millisiemens"> + <rdfs:label xml:lang="en">millisiemens</rdfs:label> + <rdfs:label xml:lang="nl">millisiemens</rdfs:label> + <om:symbol>mS</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centisiemens"> + <rdfs:label xml:lang="en">centisiemens</rdfs:label> + <rdfs:label xml:lang="nl">centisiemens</rdfs:label> + <om:symbol>cS</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decisiemens"> + <rdfs:label xml:lang="en">decisiemens</rdfs:label> + <rdfs:label xml:lang="nl">decisiemens</rdfs:label> + <om:symbol>dS</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decasiemens"> + <rdfs:label xml:lang="en">decasiemens</rdfs:label> + <rdfs:label xml:lang="nl">decasiemens</rdfs:label> + <om:symbol>daS</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectosiemens"> + <rdfs:label xml:lang="en">hectosiemens</rdfs:label> + <rdfs:label xml:lang="nl">hectosiemens</rdfs:label> + <om:symbol>hS</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilosiemens"> + <rdfs:label xml:lang="en">kilosiemens</rdfs:label> + <rdfs:label xml:lang="nl">kilosiemens</rdfs:label> + <om:symbol>kS</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megasiemens"> + <rdfs:label xml:lang="en">megasiemens</rdfs:label> + <rdfs:label xml:lang="nl">megasiemens</rdfs:label> + <om:symbol>MS</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigasiemens"> + <rdfs:label xml:lang="en">gigasiemens</rdfs:label> + <rdfs:label xml:lang="nl">gigasiemens</rdfs:label> + <om:symbol>GS</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;terasiemens"> + <rdfs:label xml:lang="en">terasiemens</rdfs:label> + <rdfs:label xml:lang="nl">terasiemens</rdfs:label> + <om:symbol>TS</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petasiemens"> + <rdfs:label xml:lang="en">petasiemens</rdfs:label> + <rdfs:label xml:lang="nl">petasiemens</rdfs:label> + <om:symbol>PS</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exasiemens"> + <rdfs:label xml:lang="en">exasiemens</rdfs:label> + <rdfs:label xml:lang="nl">exasiemens</rdfs:label> + <om:symbol>ES</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettasiemens"> + <rdfs:label xml:lang="en">zettasiemens</rdfs:label> + <rdfs:label xml:lang="nl">zettasiemens</rdfs:label> + <om:symbol>ZS</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottasiemens"> + <rdfs:label xml:lang="en">yottasiemens</rdfs:label> + <rdfs:label xml:lang="nl">yottasiemens</rdfs:label> + <om:symbol>YS</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedSiemens"> + <rdfs:label xml:lang="en">prefixed siemens</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;siemens"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricalConductance"> + <om:commonlyHasUnit rdf:resource="&om;attosiemens"/> + <om:commonlyHasUnit rdf:resource="&om;centisiemens"/> + <om:commonlyHasUnit rdf:resource="&om;decasiemens"/> + <om:commonlyHasUnit rdf:resource="&om;decisiemens"/> + <om:commonlyHasUnit rdf:resource="&om;exasiemens"/> + <om:commonlyHasUnit rdf:resource="&om;femtosiemens"/> + <om:commonlyHasUnit rdf:resource="&om;gigasiemens"/> + <om:commonlyHasUnit rdf:resource="&om;hectosiemens"/> + <om:commonlyHasUnit rdf:resource="&om;kilosiemens"/> + <om:commonlyHasUnit rdf:resource="&om;megasiemens"/> + <om:commonlyHasUnit rdf:resource="&om;microsiemens"/> + <om:commonlyHasUnit rdf:resource="&om;millisiemens"/> + <om:commonlyHasUnit rdf:resource="&om;nanosiemens"/> + <om:commonlyHasUnit rdf:resource="&om;petasiemens"/> + <om:commonlyHasUnit rdf:resource="&om;picosiemens"/> + <om:commonlyHasUnit rdf:resource="&om;terasiemens"/> + </owl:Class> + + <!-- Electrical Conductance Unit Ontology --> + + <om:Unit rdf:about="&om;abmho"> + <rdfs:label xml:lang="en">abmho</rdfs:label> + <rdfs:label xml:lang="nl">abmho</rdfs:label> + <om:alternativeLabel xml:lang="en">absiemens</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">absiemens</om:alternativeLabel> + <rdfs:comment xml:lang="en">The abmho is a unit of electrical conductance defined as 1.0e9 siemens.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">1000000000</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;mho"> + <rdfs:label xml:lang="en">mho</rdfs:label> + <rdfs:label xml:lang="nl">mho</rdfs:label> + <rdfs:comment xml:lang="en">The mho is a unit of electrical conductance defined as 1 siemens.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + <om:LaTeXCommand>\mhoUnit</om:LaTeXCommand> + </om:Unit> + + <om:Unit rdf:about="&om;statmho"> + <rdfs:label xml:lang="en">statmho</rdfs:label> + <rdfs:label xml:lang="nl">statmho</rdfs:label> + <om:alternativeLabel xml:lang="en">statsiemens</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">statsiemens</om:alternativeLabel> + <rdfs:comment xml:lang="en">The statmho is a unit of electrical conductance defined as 1.112650e-12 siemens.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.000000000001112650</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;siemens"/> + <om:hasDimension rdf:resource="&om;electricalConductance-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e9Siemens"> + <om:hasNumericalValue>1.0e9</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;siemens"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.112650e-12Siemens"> + <om:hasNumericalValue>1.112650e-12</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;siemens"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;ElectricalConductance"> + <om:commonlyHasUnit rdf:resource="&om;abmho"/> + <om:commonlyHasUnit rdf:resource="&om;mho"/> + <om:commonlyHasUnit rdf:resource="&om;statmho"/> + </owl:Class> + + <!-- Newton Per Coulomb Ontology --> + + <om:UnitDivision rdf:about="&om;newtonPerCoulomb"> + <rdfs:label xml:lang="en">newton per coulomb</rdfs:label> + <rdfs:label xml:lang="nl">newton per coulomb</rdfs:label> + <om:symbol>N/C</om:symbol> + <om:alternativeSymbol>N C-1</om:alternativeSymbol> + <om:alternativeSymbol>N·C-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;newton"/> + <om:hasDenominator rdf:resource="&om;coulomb"/> + <om:hasDimension rdf:resource="&om;electricField-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;ElectricField"> + <om:commonlyHasUnit rdf:resource="&om;newtonPerCoulomb"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricFieldUnit"> + <rdfs:label xml:lang="en">electric field unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;newtonPerCoulomb"/> + <om:UnitDivision rdf:about="&om;voltPerMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricField"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ElectricFieldUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Volt Per Metre Ontology --> + + <om:UnitDivision rdf:about="&om;voltPerMetre"> + <rdfs:label xml:lang="en">volt per metre</rdfs:label> + <rdfs:label xml:lang="nl">volt per meter</rdfs:label> + <om:symbol>V/m</om:symbol> + <om:alternativeSymbol>V m-1</om:alternativeSymbol> + <om:alternativeSymbol>V·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;volt"/> + <om:hasDenominator rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;electricField-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;ElectricField"> + <om:commonlyHasUnit rdf:resource="&om;voltPerMetre"/> + </owl:Class> + + <!-- Coulomb Per Cubic Metre Ontology --> + + <om:UnitDivision rdf:about="&om;coulombPerCubicmetre"> + <rdfs:label xml:lang="en">coulomb per cubic metre</rdfs:label> + <rdfs:label xml:lang="nl">coulomb per kubieke meter</rdfs:label> + <om:symbol>C/m3</om:symbol> + <om:alternativeSymbol>C m-3</om:alternativeSymbol> + <om:alternativeSymbol>C·m-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;coulomb"/> + <om:hasDenominator rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;electricChargeDensity-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;ElectricChargeDensity"> + <om:commonlyHasUnit rdf:resource="&om;coulombPerCubicmetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricChargeDensityUnit"> + <rdfs:label xml:lang="en">electric charge density unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;coulombPerCubicmetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricChargeDensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ElectricChargeDensityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Coulomb Per Square Metre Ontology --> + + <om:UnitDivision rdf:about="&om;coulombPerSquareMetre"> + <rdfs:label xml:lang="en">coulomb per square metre</rdfs:label> + <rdfs:label xml:lang="nl">coulomb per vierkante meter</rdfs:label> + <om:symbol>C/m2</om:symbol> + <om:alternativeSymbol>C m-2</om:alternativeSymbol> + <om:alternativeSymbol>C·m-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;coulomb"/> + <om:hasDenominator rdf:resource="&om;squareMetre"/> + <om:hasDimension rdf:resource="&om;electricFluxDensity-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;ElectricFluxDensity"> + <om:commonlyHasUnit rdf:resource="&om;coulombPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricFluxDensityUnit"> + <rdfs:label xml:lang="en">electric flux density unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;coulombPerSquareMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricFluxDensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ElectricFluxDensityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Volt Second Ontology --> + + <om:UnitMultiplication rdf:about="&om;voltSecond-Time"> + <rdfs:label xml:lang="en">volt second</rdfs:label> + <rdfs:label xml:lang="nl">volt seconde</rdfs:label> + <om:symbol>V s</om:symbol> + <om:alternativeSymbol>V·s</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;volt"/> + <hasTerm2 rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:UnitMultiplication> + + <owl:Class rdf:about="&om;MagneticFlux"> + <om:commonlyHasUnit rdf:resource="&om;voltSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;MagneticFluxUnit"> + <rdfs:label xml:lang="en">magnetic flux unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;maxwell"/> + <om:Unit rdf:about="&om;statweber"/> + <om:Unit rdf:about="&om;unitPole"/> + <om:Unit rdf:about="&om;weber"/> + <om:UnitMultiplication rdf:about="&om;voltSecond-Time"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedWeber"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MagneticFlux"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MagneticFluxUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Weber Ontology --> + + <om:Unit rdf:about="&om;weber"> + <rdfs:label xml:lang="en">weber</rdfs:label> + <rdfs:label xml:lang="nl">weber</rdfs:label> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>Wb</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;voltSecond-Time"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;MagneticFlux"> + <om:commonlyHasUnit rdf:resource="&om;weber"/> + </owl:Class> + + <!-- Weber Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctoweber"> + <rdfs:label xml:lang="en">yoctoweber</rdfs:label> + <rdfs:label xml:lang="nl">yoctoweber</rdfs:label> + <om:symbol>yWb</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptoweber"> + <rdfs:label xml:lang="en">zeptoweber</rdfs:label> + <rdfs:label xml:lang="nl">zeptoweber</rdfs:label> + <om:symbol>zWb</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attoweber"> + <rdfs:label xml:lang="en">attoweber</rdfs:label> + <rdfs:label xml:lang="nl">attoweber</rdfs:label> + <om:symbol>aWb</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtoweber"> + <rdfs:label xml:lang="en">femtoweber</rdfs:label> + <rdfs:label xml:lang="nl">femtoweber</rdfs:label> + <om:symbol>fWb</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picoweber"> + <rdfs:label xml:lang="en">picoweber</rdfs:label> + <rdfs:label xml:lang="nl">picoweber</rdfs:label> + <om:symbol>pWb</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanoweber"> + <rdfs:label xml:lang="en">nanoweber</rdfs:label> + <rdfs:label xml:lang="nl">nanoweber</rdfs:label> + <om:symbol>nWb</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microweber"> + <rdfs:label xml:lang="en">microweber</rdfs:label> + <rdfs:label xml:lang="nl">microweber</rdfs:label> + <om:symbol>μWb</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;milliweber"> + <rdfs:label xml:lang="en">milliweber</rdfs:label> + <rdfs:label xml:lang="nl">milliweber</rdfs:label> + <om:symbol>mWb</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centiweber"> + <rdfs:label xml:lang="en">centiweber</rdfs:label> + <rdfs:label xml:lang="nl">centiweber</rdfs:label> + <om:symbol>cWb</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;deciweber"> + <rdfs:label xml:lang="en">deciweber</rdfs:label> + <rdfs:label xml:lang="nl">deciweber</rdfs:label> + <om:symbol>dWb</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decaweber"> + <rdfs:label xml:lang="en">decaweber</rdfs:label> + <rdfs:label xml:lang="nl">decaweber</rdfs:label> + <om:symbol>daWb</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectoweber"> + <rdfs:label xml:lang="en">hectoweber</rdfs:label> + <rdfs:label xml:lang="nl">hectoweber</rdfs:label> + <om:symbol>hWb</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kiloweber"> + <rdfs:label xml:lang="en">kiloweber</rdfs:label> + <rdfs:label xml:lang="nl">kiloweber</rdfs:label> + <om:symbol>kWb</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megaweber"> + <rdfs:label xml:lang="en">megaweber</rdfs:label> + <rdfs:label xml:lang="nl">megaweber</rdfs:label> + <om:symbol>MWb</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigaweber"> + <rdfs:label xml:lang="en">gigaweber</rdfs:label> + <rdfs:label xml:lang="nl">gigaweber</rdfs:label> + <om:symbol>GWb</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;teraweber"> + <rdfs:label xml:lang="en">teraweber</rdfs:label> + <rdfs:label xml:lang="nl">teraweber</rdfs:label> + <om:symbol>TWb</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petaweber"> + <rdfs:label xml:lang="en">petaweber</rdfs:label> + <rdfs:label xml:lang="nl">petaweber</rdfs:label> + <om:symbol>PWb</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exaweber"> + <rdfs:label xml:lang="en">exaweber</rdfs:label> + <rdfs:label xml:lang="nl">exaweber</rdfs:label> + <om:symbol>EWb</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettaweber"> + <rdfs:label xml:lang="en">zettaweber</rdfs:label> + <rdfs:label xml:lang="nl">zettaweber</rdfs:label> + <om:symbol>ZWb</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottaweber"> + <rdfs:label xml:lang="en">yottaweber</rdfs:label> + <rdfs:label xml:lang="nl">yottaweber</rdfs:label> + <om:symbol>YWb</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedWeber"> + <rdfs:label xml:lang="en">prefixed weber</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;weber"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MagneticFlux"> + <om:commonlyHasUnit rdf:resource="&om;attoweber"/> + <om:commonlyHasUnit rdf:resource="&om;centiweber"/> + <om:commonlyHasUnit rdf:resource="&om;decaweber"/> + <om:commonlyHasUnit rdf:resource="&om;deciweber"/> + <om:commonlyHasUnit rdf:resource="&om;exaweber"/> + <om:commonlyHasUnit rdf:resource="&om;femtoweber"/> + <om:commonlyHasUnit rdf:resource="&om;gigaweber"/> + <om:commonlyHasUnit rdf:resource="&om;hectoweber"/> + <om:commonlyHasUnit rdf:resource="&om;kiloweber"/> + <om:commonlyHasUnit rdf:resource="&om;megaweber"/> + <om:commonlyHasUnit rdf:resource="&om;microweber"/> + <om:commonlyHasUnit rdf:resource="&om;milliweber"/> + <om:commonlyHasUnit rdf:resource="&om;nanoweber"/> + <om:commonlyHasUnit rdf:resource="&om;petaweber"/> + <om:commonlyHasUnit rdf:resource="&om;picoweber"/> + <om:commonlyHasUnit rdf:resource="&om;teraweber"/> + </owl:Class> + + <!-- Magnetic Flux Unit Ontology --> + + <om:Unit rdf:about="&om;maxwell"> + <rdfs:label xml:lang="en">maxwell</rdfs:label> + <rdfs:label xml:lang="nl">maxwell</rdfs:label> + <rdfs:comment xml:lang="en">The maxwell is a unit of magnetic flux defined as 1.0e-8 weber.</rdfs:comment> + <om:symbol>Mx</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.000000010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;statweber"> + <rdfs:label xml:lang="en">statweber</rdfs:label> + <rdfs:label xml:lang="nl">statweber</rdfs:label> + <rdfs:comment xml:lang="en">The statweber is a unit of magnetic flux defined as 2.9979e2 weber.</rdfs:comment> + <om:symbol>statWb</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">299.79</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;unitPole"> + <rdfs:label xml:lang="en">unit pole</rdfs:label> + <rdfs:comment xml:lang="en">The unit pole is a unit of magnetic flux defined as 1.256637e-7 weber.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0000001256637</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;weber"/> + <om:hasDimension rdf:resource="&om;magneticFlux-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e-8Weber"> + <om:hasNumericalValue>1.0e-8</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;weber"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.256637e-7Weber"> + <om:hasNumericalValue>1.256637e-7</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;weber"/> + </om:Measure> + + <om:Measure rdf:about="&om;_2.9979e2Weber"> + <om:hasNumericalValue>2.9979e2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;weber"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;MagneticFlux"> + <om:commonlyHasUnit rdf:resource="&om;maxwell"/> + <om:commonlyHasUnit rdf:resource="&om;statweber"/> + <om:commonlyHasUnit rdf:resource="&om;unitPole"/> + </owl:Class> + + <!-- Ampere Per Metre Ontology --> + + <om:UnitDivision rdf:about="&om;amperePerMetre"> + <rdfs:label xml:lang="en">ampere per metre</rdfs:label> + <rdfs:label xml:lang="nl">ampère per meter</rdfs:label> + <rdfs:comment xml:lang="en">Ampere per metre is a unit of magnetic field defined as ampere divided by metre.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>A/m</om:symbol> + <om:alternativeSymbol>A m-1</om:alternativeSymbol> + <om:alternativeSymbol>A·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;ampere"/> + <om:hasDenominator rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;MagneticField-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;MagneticField"> + <om:commonlyHasUnit rdf:resource="&om;amperePerMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;MagneticFieldUnit"> + <rdfs:label xml:lang="en">magnetic field unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;oersted"/> + <om:UnitDivision rdf:about="&om;amperePerMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MagneticField"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MagneticFieldUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Magnetic Field Unit Ontology --> + + <om:Unit rdf:about="&om;oersted"> + <rdfs:label xml:lang="en">oersted</rdfs:label> + <rdfs:comment xml:lang="en">The oersted is a unit of magnetic field defined as 7.957747e1 ampere per metre.</rdfs:comment> + <om:symbol>Oe</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">79.57747</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;amperePerMetre"/> + <om:hasDimension rdf:resource="&om;MagneticField-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_7.957747e1AmperePerMetre"> + <om:hasNumericalValue>7.957747e1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;amperePerMetre"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;MagneticField"> + <om:commonlyHasUnit rdf:resource="&om;oersted"/> + </owl:Class> + + <!-- Weber Per Square Metre Ontology --> + + <om:UnitDivision rdf:about="&om;weberPerSquareMetre"> + <rdfs:label xml:lang="en">weber per square metre</rdfs:label> + <rdfs:label xml:lang="nl">weber per vierkante meter</rdfs:label> + <om:symbol>Wb/m2</om:symbol> + <om:alternativeSymbol>Wb m-2</om:alternativeSymbol> + <om:alternativeSymbol>Wb·m-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;weber"/> + <om:hasDenominator rdf:resource="&om;squareMetre"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;MagneticFluxDensity"> + <om:commonlyHasUnit rdf:resource="&om;weberPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;MagneticFluxDensityUnit"> + <rdfs:label xml:lang="en">magnetic flux density unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;gamma"/> + <om:Unit rdf:about="&om;gauss"/> + <om:Unit rdf:about="&om;stattesla"/> + <om:Unit rdf:about="&om;tesla"/> + <om:UnitDivision rdf:about="&om;weberPerSquareMetre"/> + <om:PrefixedUnit rdf:about="&om;milligauss"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedTesla"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MagneticFluxDensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MagneticFluxDensityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Tesla Ontology --> + + <om:Unit rdf:about="&om;tesla"> + <rdfs:label xml:lang="en">tesla</rdfs:label> + <rdfs:label xml:lang="nl">tesla</rdfs:label> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>T</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;weberPerSquareMetre"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;MagneticFluxDensity"> + <om:commonlyHasUnit rdf:resource="&om;tesla"/> + </owl:Class> + + <!-- Tesla Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctotesla"> + <rdfs:label xml:lang="en">yoctotesla</rdfs:label> + <rdfs:label xml:lang="nl">yoctotesla</rdfs:label> + <om:symbol>yT</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptotesla"> + <rdfs:label xml:lang="en">zeptotesla</rdfs:label> + <rdfs:label xml:lang="nl">zeptotesla</rdfs:label> + <om:symbol>zT</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attotesla"> + <rdfs:label xml:lang="en">attotesla</rdfs:label> + <rdfs:label xml:lang="nl">attotesla</rdfs:label> + <om:symbol>aT</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtotesla"> + <rdfs:label xml:lang="en">femtotesla</rdfs:label> + <rdfs:label xml:lang="nl">femtotesla</rdfs:label> + <om:symbol>fT</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picotesla"> + <rdfs:label xml:lang="en">picotesla</rdfs:label> + <rdfs:label xml:lang="nl">picotesla</rdfs:label> + <om:symbol>pT</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanotesla"> + <rdfs:label xml:lang="en">nanotesla</rdfs:label> + <rdfs:label xml:lang="nl">nanotesla</rdfs:label> + <om:symbol>nT</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microtesla"> + <rdfs:label xml:lang="en">microtesla</rdfs:label> + <rdfs:label xml:lang="nl">microtesla</rdfs:label> + <om:symbol>μT</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millitesla"> + <rdfs:label xml:lang="en">millitesla</rdfs:label> + <rdfs:label xml:lang="nl">millitesla</rdfs:label> + <om:symbol>mT</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centitesla"> + <rdfs:label xml:lang="en">centitesla</rdfs:label> + <rdfs:label xml:lang="nl">centitesla</rdfs:label> + <om:symbol>cT</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decitesla"> + <rdfs:label xml:lang="en">decitesla</rdfs:label> + <rdfs:label xml:lang="nl">decitesla</rdfs:label> + <om:symbol>dT</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decatesla"> + <rdfs:label xml:lang="en">decatesla</rdfs:label> + <rdfs:label xml:lang="nl">decatesla</rdfs:label> + <om:symbol>daT</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectotesla"> + <rdfs:label xml:lang="en">hectotesla</rdfs:label> + <rdfs:label xml:lang="nl">hectotesla</rdfs:label> + <om:symbol>hT</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilotesla"> + <rdfs:label xml:lang="en">kilotesla</rdfs:label> + <rdfs:label xml:lang="nl">kilotesla</rdfs:label> + <om:symbol>kT</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megatesla"> + <rdfs:label xml:lang="en">megatesla</rdfs:label> + <rdfs:label xml:lang="nl">megatesla</rdfs:label> + <om:symbol>MT</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigatesla"> + <rdfs:label xml:lang="en">gigatesla</rdfs:label> + <rdfs:label xml:lang="nl">gigatesla</rdfs:label> + <om:symbol>GT</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;teratesla"> + <rdfs:label xml:lang="en">teratesla</rdfs:label> + <rdfs:label xml:lang="nl">teratesla</rdfs:label> + <om:symbol>TT</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petatesla"> + <rdfs:label xml:lang="en">petatesla</rdfs:label> + <rdfs:label xml:lang="nl">petatesla</rdfs:label> + <om:symbol>PT</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exatesla"> + <rdfs:label xml:lang="en">exatesla</rdfs:label> + <rdfs:label xml:lang="nl">exatesla</rdfs:label> + <om:symbol>ET</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettatesla"> + <rdfs:label xml:lang="en">zettatesla</rdfs:label> + <rdfs:label xml:lang="nl">zettatesla</rdfs:label> + <om:symbol>ZT</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottatesla"> + <rdfs:label xml:lang="en">yottatesla</rdfs:label> + <rdfs:label xml:lang="nl">yottatesla</rdfs:label> + <om:symbol>YT</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedTesla"> + <rdfs:label xml:lang="en">prefixed tesla</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;tesla"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MagneticFluxDensity"> + <om:commonlyHasUnit rdf:resource="&om;attotesla"/> + <om:commonlyHasUnit rdf:resource="&om;centitesla"/> + <om:commonlyHasUnit rdf:resource="&om;decatesla"/> + <om:commonlyHasUnit rdf:resource="&om;decitesla"/> + <om:commonlyHasUnit rdf:resource="&om;exatesla"/> + <om:commonlyHasUnit rdf:resource="&om;femtotesla"/> + <om:commonlyHasUnit rdf:resource="&om;gigatesla"/> + <om:commonlyHasUnit rdf:resource="&om;hectotesla"/> + <om:commonlyHasUnit rdf:resource="&om;kilotesla"/> + <om:commonlyHasUnit rdf:resource="&om;megatesla"/> + <om:commonlyHasUnit rdf:resource="&om;microtesla"/> + <om:commonlyHasUnit rdf:resource="&om;millitesla"/> + <om:commonlyHasUnit rdf:resource="&om;nanotesla"/> + <om:commonlyHasUnit rdf:resource="&om;petatesla"/> + <om:commonlyHasUnit rdf:resource="&om;picotesla"/> + <om:commonlyHasUnit rdf:resource="&om;teratesla"/> + </owl:Class> + + <!-- Magnetic Flux Density Unit Ontology --> + + <om:Unit rdf:about="&om;gamma"> + <rdfs:label xml:lang="en">gamma</rdfs:label> + <rdfs:label xml:lang="nl">gamma</rdfs:label> + <rdfs:comment xml:lang="en">The gamma is a unit of magnetic flux density defined as 1.0e-9 tesla.</rdfs:comment> + <om:LaTeXCommand>\gammaUnit</om:LaTeXCommand> + <om:symbol>γ</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0000000010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;gauss"> + <rdfs:label xml:lang="en">gauss</rdfs:label> + <rdfs:label xml:lang="nl">gauss</rdfs:label> + <om:alternativeLabel xml:lang="en">abtesla</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">abtesla</om:alternativeLabel> + <rdfs:comment xml:lang="en">The gauss is a unit of magnetic flux density defined as 1.0e-4 tesla.</rdfs:comment> + <om:symbol>G</om:symbol> + <om:alternativeSymbol>Gs</om:alternativeSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.00010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:Unit> + + <om:PrefixedUnit rdf:about="&om;milligauss"> + <rdfs:label xml:lang="en">milligauss</rdfs:label> + <rdfs:label xml:lang="nl">milligauss</rdfs:label> + <rdfs:comment xml:lang="en">The milligauss is a unit of magnetic flux density defined as 1.0e-3 gauss.</rdfs:comment> + <om:symbol>mG</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gauss"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:PrefixedUnit> + + <om:Unit rdf:about="&om;stattesla"> + <rdfs:label xml:lang="en">stattesla</rdfs:label> + <rdfs:label xml:lang="nl">stattesla</rdfs:label> + <rdfs:comment xml:lang="en">The stattesla is a unit of magnetic flux density defined as 2.9979e6 tesla.</rdfs:comment> + <om:symbol>statT</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">2997900</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;tesla"/> + <om:hasDimension rdf:resource="&om;magneticFluxDensity-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e-9Tesla"> + <om:hasNumericalValue>1.0e-9</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;tesla"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.0e-4Tesla"> + <om:hasNumericalValue>1.0e-4</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;tesla"/> + </om:Measure> + + <om:Measure rdf:about="&om;_2.9979e6Tesla"> + <om:hasNumericalValue>2.9979e6</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;tesla"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;MagneticFluxDensity"> + <om:commonlyHasUnit rdf:resource="&om;gamma"/> + <om:commonlyHasUnit rdf:resource="&om;gauss"/> + <om:commonlyHasUnit rdf:resource="&om;stattesla"/> + <om:commonlyHasUnit rdf:resource="&om;milligauss"/> + </owl:Class> + + <!-- Weber Per Ampere Ontology --> + + <om:UnitDivision rdf:about="&om;weberPerAmpere"> + <rdfs:label xml:lang="en">weber per ampere</rdfs:label> + <rdfs:label xml:lang="nl">weber per ampère</rdfs:label> + <om:symbol>Wb/A</om:symbol> + <om:alternativeSymbol>Wb A-1</om:alternativeSymbol> + <om:alternativeSymbol>Wb·A-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;weber"/> + <om:hasDenominator rdf:resource="&om;ampere"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Inductance"> + <om:commonlyHasUnit rdf:resource="&om;weberPerAmpere"/> + </owl:Class> + + <owl:Class rdf:about="&om;Permeance-Electromagnetic"> + <om:commonlyHasUnit rdf:resource="&om;weberPerAmpere"/> + </owl:Class> + + <owl:Class rdf:about="&om;InductanceUnit"> + <rdfs:label xml:lang="en">inductance unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;abhenry"/> + <om:Unit rdf:about="&om;henry"/> + <om:Unit rdf:about="&om;stathenry"/> + <om:UnitDivision rdf:about="&om;weberPerAmpere"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedHenry"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Permeance-ElectromagneticUnit"> + <rdfs:label xml:lang="en">permeance (electromagnetic) unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;weberPerAmpere"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Inductance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;InductanceUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;Permeance-Electromagnetic"> + <om:commonlyHasUnit rdf:resource="&om;weberPerAmpere"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;Permeance-ElectromagneticUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Henry Ontology --> + + <om:Unit rdf:about="&om;henry"> + <rdfs:label xml:lang="en">henry</rdfs:label> + <rdfs:label xml:lang="nl">henry</rdfs:label> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>H</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;weberPerAmpere"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;Inductance"> + <om:commonlyHasUnit rdf:resource="&om;henry"/> + </owl:Class> + + <!-- Henry Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctohenry"> + <rdfs:label xml:lang="en">yoctohenry</rdfs:label> + <rdfs:label xml:lang="nl">yoctohenry</rdfs:label> + <rdfs:comment xml:lang="en">The yoctohenry is a unit of inductance defined as 1.0e-24 henry.</rdfs:comment> + <om:symbol>yH</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptohenry"> + <rdfs:label xml:lang="en">zeptohenry</rdfs:label> + <rdfs:label xml:lang="nl">zeptohenry</rdfs:label> + <rdfs:comment xml:lang="en">The zepthenry is a unit of inductance defined as 1.0e-21 henry.</rdfs:comment> + <om:symbol>zH</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attohenry"> + <rdfs:label xml:lang="en">attohenry</rdfs:label> + <rdfs:label xml:lang="nl">attohenry</rdfs:label> + <rdfs:comment xml:lang="en">The attohenry is a unit of inductance defined as 1.0e-18 henry.</rdfs:comment> + <om:symbol>aH</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtohenry"> + <rdfs:label xml:lang="en">femtohenry</rdfs:label> + <rdfs:label xml:lang="nl">femtohenry</rdfs:label> + <rdfs:comment xml:lang="en">The femtohenry is a unit of inductance defined as 1.0e-15 henry.</rdfs:comment> + <om:symbol>fH</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picohenry"> + <rdfs:label xml:lang="en">picohenry</rdfs:label> + <rdfs:label xml:lang="nl">picohenry</rdfs:label> + <rdfs:comment xml:lang="en">The picohenry is a unit of inductance defined as 1.0e-12 henry.</rdfs:comment> + <om:symbol>pH</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanohenry"> + <rdfs:label xml:lang="en">nanohenry</rdfs:label> + <rdfs:label xml:lang="nl">nanohenry</rdfs:label> + <rdfs:comment xml:lang="en">The nanohenry is a unit of inductance defined as 1.0e-9 henry.</rdfs:comment> + <om:symbol>nH</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microhenry"> + <rdfs:label xml:lang="en">microhenry</rdfs:label> + <rdfs:label xml:lang="nl">microhenry</rdfs:label> + <rdfs:comment xml:lang="en">The microhenry is a unit of inductance defined as 1.0e-6 henry.</rdfs:comment> + <om:symbol>μH</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millihenry"> + <rdfs:label xml:lang="en">millihenry</rdfs:label> + <rdfs:label xml:lang="nl">millihenry</rdfs:label> + <rdfs:comment xml:lang="en">The millihenry is a unit of inductance defined as 1.0e-3 henry.</rdfs:comment> + <om:symbol>mH</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centihenry"> + <rdfs:label xml:lang="en">centihenry</rdfs:label> + <rdfs:label xml:lang="nl">centihenry</rdfs:label> + <rdfs:comment xml:lang="en">The centihenry is a unit of inductance defined as 1.0e-2 henry.</rdfs:comment> + <om:symbol>cH</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decihenry"> + <rdfs:label xml:lang="en">decihenry</rdfs:label> + <rdfs:label xml:lang="nl">decihenry</rdfs:label> + <rdfs:comment xml:lang="en">The decihenry is a unit of inductance defined as 1.0e-1 henry.</rdfs:comment> + <om:symbol>dH</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decahenry"> + <rdfs:label xml:lang="en">decahenry</rdfs:label> + <rdfs:label xml:lang="nl">decahenry</rdfs:label> + <rdfs:comment xml:lang="en">The decahenry is a unit of inductance defined as 1.0e1 henry.</rdfs:comment> + <om:symbol>daH</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectohenry"> + <rdfs:label xml:lang="en">hectohenry</rdfs:label> + <rdfs:label xml:lang="nl">hectohenry</rdfs:label> + <rdfs:comment xml:lang="en">The hectohenry is a unit of inductance defined as 1.0e2 henry.</rdfs:comment> + <om:symbol>hH</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilohenry"> + <rdfs:label xml:lang="en">kilohenry</rdfs:label> + <rdfs:label xml:lang="nl">kilohenry</rdfs:label> + <rdfs:comment xml:lang="en">The kilohenry is a unit of inductance defined as 1.0e3 henry.</rdfs:comment> + <om:symbol>kH</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megahenry"> + <rdfs:label xml:lang="en">megahenry</rdfs:label> + <rdfs:label xml:lang="nl">megahenry</rdfs:label> + <rdfs:comment xml:lang="en">The megahenry is a unit of inductance defined as 1.0e6 henry.</rdfs:comment> + <om:symbol>MH</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigahenry"> + <rdfs:label xml:lang="en">gigahenry</rdfs:label> + <rdfs:label xml:lang="nl">gigahenry</rdfs:label> + <rdfs:comment xml:lang="en">The gigahenry is a unit of inductance defined as 1.0e9 henry.</rdfs:comment> + <om:symbol>GH</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;terahenry"> + <rdfs:label xml:lang="en">terahenry</rdfs:label> + <rdfs:label xml:lang="nl">terahenry</rdfs:label> + <rdfs:comment xml:lang="en">The terahenry is a unit of inductance defined as 1.0e12 henry.</rdfs:comment> + <om:symbol>TH</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petahenry"> + <rdfs:label xml:lang="en">petahenry</rdfs:label> + <rdfs:label xml:lang="nl">petahenry</rdfs:label> + <rdfs:comment xml:lang="en">The petahenry is a unit of inductance defined as 1.0e15 henry.</rdfs:comment> + <om:symbol>PH</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exahenry"> + <rdfs:label xml:lang="en">exahenry</rdfs:label> + <rdfs:label xml:lang="nl">exahenry</rdfs:label> + <rdfs:comment xml:lang="en">The exahenry is a unit of inductance defined as 1.0e18 henry.</rdfs:comment> + <om:symbol>EH</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettahenry"> + <rdfs:label xml:lang="en">zettahenry</rdfs:label> + <rdfs:label xml:lang="nl">zettahenry</rdfs:label> + <rdfs:comment xml:lang="en">The zettahenry is a unit of inductance defined as 1.0e21 henry.</rdfs:comment> + <om:symbol>ZH</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottahenry"> + <rdfs:label xml:lang="en">yottahenry</rdfs:label> + <rdfs:label xml:lang="nl">yottahenry</rdfs:label> + <rdfs:comment xml:lang="en">The yottahenry is a unit of inductance defined as 1.0e24 henry.</rdfs:comment> + <om:symbol>YH</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedHenry"> + <rdfs:label xml:lang="en">prefixed henry</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;henry"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Inductance"> + <om:commonlyHasUnit rdf:resource="&om;attohenry"/> + <om:commonlyHasUnit rdf:resource="&om;centihenry"/> + <om:commonlyHasUnit rdf:resource="&om;decahenry"/> + <om:commonlyHasUnit rdf:resource="&om;decihenry"/> + <om:commonlyHasUnit rdf:resource="&om;exahenry"/> + <om:commonlyHasUnit rdf:resource="&om;femtohenry"/> + <om:commonlyHasUnit rdf:resource="&om;gigahenry"/> + <om:commonlyHasUnit rdf:resource="&om;hectohenry"/> + <om:commonlyHasUnit rdf:resource="&om;kilohenry"/> + <om:commonlyHasUnit rdf:resource="&om;megahenry"/> + <om:commonlyHasUnit rdf:resource="&om;microhenry"/> + <om:commonlyHasUnit rdf:resource="&om;millihenry"/> + <om:commonlyHasUnit rdf:resource="&om;nanohenry"/> + <om:commonlyHasUnit rdf:resource="&om;petahenry"/> + <om:commonlyHasUnit rdf:resource="&om;picohenry"/> + <om:commonlyHasUnit rdf:resource="&om;terahenry"/> + </owl:Class> + + <owl:Class rdf:about="&om;Permeance-Electromagnetic"> + <om:commonlyHasUnit rdf:resource="&om;attohenry"/> + <om:commonlyHasUnit rdf:resource="&om;centihenry"/> + <om:commonlyHasUnit rdf:resource="&om;decahenry"/> + <om:commonlyHasUnit rdf:resource="&om;decihenry"/> + <om:commonlyHasUnit rdf:resource="&om;exahenry"/> + <om:commonlyHasUnit rdf:resource="&om;femtohenry"/> + <om:commonlyHasUnit rdf:resource="&om;gigahenry"/> + <om:commonlyHasUnit rdf:resource="&om;hectohenry"/> + <om:commonlyHasUnit rdf:resource="&om;kilohenry"/> + <om:commonlyHasUnit rdf:resource="&om;megahenry"/> + <om:commonlyHasUnit rdf:resource="&om;microhenry"/> + <om:commonlyHasUnit rdf:resource="&om;millihenry"/> + <om:commonlyHasUnit rdf:resource="&om;nanohenry"/> + <om:commonlyHasUnit rdf:resource="&om;petahenry"/> + <om:commonlyHasUnit rdf:resource="&om;picohenry"/> + <om:commonlyHasUnit rdf:resource="&om;terahenry"/> + </owl:Class> + + <!-- Inductance Unit Ontology --> + + <om:Unit rdf:about="&om;abhenry"> + <rdfs:label xml:lang="en">abhenry</rdfs:label> + <rdfs:label xml:lang="nl">abhenry</rdfs:label> + <rdfs:comment xml:lang="en">The abhenry is a unit of inductance defined as 1.0e-9 henry.</rdfs:comment> + <om:symbol>abH</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0000000010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;stathenry"> + <rdfs:label xml:lang="en">stathenry</rdfs:label> + <rdfs:label xml:lang="nl">stathenry</rdfs:label> + <rdfs:comment xml:lang="en">The stathenry is a unit of inductance defined as 8.987552e11 henry.</rdfs:comment> + <om:symbol>statH</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">898755200000</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;henry"/> + <om:hasDimension rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e-9Henry"> + <om:hasNumericalValue>1.0e-9</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;henry"/> + </om:Measure> + + <om:Measure rdf:about="&om;_8.987552e11Henry"> + <om:hasNumericalValue>8.987552e11</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;henry"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Inductance"> + <om:commonlyHasUnit rdf:resource="&om;abhenry"/> + <om:commonlyHasUnit rdf:resource="&om;stathenry"/> + </owl:Class> + + <!-- Henry Per Metre Ontology --> + + <om:UnitDivision rdf:about="&om;henryPerMetre"> + <rdfs:label xml:lang="en">henry per metre</rdfs:label> + <rdfs:label xml:lang="nl">henry per meter</rdfs:label> + <om:symbol>H/m</om:symbol> + <om:alternativeSymbol>H m-1</om:alternativeSymbol> + <om:alternativeSymbol>H·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;henry"/> + <om:hasDenominator rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;permeabilityOfFreeSpace-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;PermeabilityOfFreeSpace"> + <om:commonlyHasUnit rdf:resource="&om;henryPerMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;PermeabilityOfFreeSpaceUnit"> + <rdfs:label xml:lang="en">permeability of free space unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;henryPerMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;PermeabilityOfFreeSpace"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;PermeabilityOfFreeSpaceUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Farad Per Metre Ontology --> + + <om:UnitDivision rdf:about="&om;faradPerMetre"> + <rdfs:label xml:lang="en">farad per metre</rdfs:label> + <rdfs:label xml:lang="nl">farad per meter</rdfs:label> + <om:symbol>F/m</om:symbol> + <om:alternativeSymbol>F m-1</om:alternativeSymbol> + <om:alternativeSymbol>F·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;farad"/> + <om:hasDenominator rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;permittivity-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Permittivity"> + <om:commonlyHasUnit rdf:resource="&om;faradPerMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;PermittivityUnit"> + <rdfs:label xml:lang="en">permittivity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;faradPerMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Permittivity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;PermittivityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Coulomb Metre Ontology --> + + <om:UnitMultiplication rdf:about="&om;coulombMetre"> + <rdfs:label xml:lang="en">coulomb metre</rdfs:label> + <rdfs:label xml:lang="nl">coulomb meter</rdfs:label> + <om:symbol>C m</om:symbol> + <om:alternativeSymbol>C·m</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;coulomb"/> + <hasTerm2 rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;electricDipoleMoment-Dimension"/> + </om:UnitMultiplication> + + <owl:Class rdf:about="&om;ElectricDipoleMoment"> + <om:commonlyHasUnit rdf:resource="&om;coulombMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricDipoleMomentUnit"> + <rdfs:label xml:lang="en">electric dipole moment unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;debye"/> + <om:UnitMultiplication rdf:about="&om;coulombMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricDipoleMoment"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ElectricDipoleMomentUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Electric Dipole Moment Unit Ontology --> + + <om:Unit rdf:about="&om;debye"> + <rdfs:label xml:lang="en">debye</rdfs:label> + <rdfs:label xml:lang="nl">debye</rdfs:label> + <om:symbol>D</om:symbol> + <rdfs:comment xml:lang="en">The debye is a unit of electric dipole moment defined as 3.33564e-30 coulomb metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.00000000000000000000000000000333564</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;coulombMetre"/> + <om:hasDimension rdf:resource="&om;electricDipoleMoment-Dimension"/> + </om:Unit> + + <!--<om:Measure rdf:about="&om;_3.33564e-30CoulombMetre"> + <om:hasNumericalValue>3.33564e-30</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;coulombMetre"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;ElectricDipoleMoment"> + <om:commonlyHasUnit rdf:resource="&om;debye"/> + </owl:Class> + + <!-- Reciprocal Henry Ontology --> + + <om:UnitExponentiation rdf:about="&om;reciprocalHenry"> + <rdfs:label xml:lang="en">reciprocal henry</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde henry</rdfs:label> + <om:symbol>H-1</om:symbol> + <om:hasBase rdf:resource="&om;henry"/> + <om:hasExponent rdf:datatype="&xsd;integer">-1</om:hasExponent> + <om:hasDimension rdf:resource="&om;reluctance-Dimension"/> + </om:UnitExponentiation> + + <owl:Class rdf:about="&om;Reluctance"> + <om:commonlyHasUnit rdf:resource="&om;reciprocalHenry"/> + </owl:Class> + + <owl:Class rdf:about="&om;ReluctanceUnit"> + <rdfs:label xml:lang="en">reluctance unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitExponentiation rdf:about="&om;reciprocalHenry"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Reluctance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ReluctanceUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Ohm Metre Ontology --> + + <om:UnitMultiplication rdf:about="&om;ohmMetre"> + <rdfs:label xml:lang="en">ohm metre</rdfs:label> + <rdfs:label xml:lang="nl">ohm meter</rdfs:label> + <om:symbol>Ω m</om:symbol> + <om:alternativeSymbol>Ω·m</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;ohm"/> + <hasTerm2 rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;electricalResistivity-Dimension"/> + </om:UnitMultiplication> + + <owl:Class rdf:about="&om;ElectricalResistivity"> + <om:commonlyHasUnit rdf:resource="&om;ohmMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricalResistivityUnit"> + <rdfs:label xml:lang="en">electrical resistivity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitMultiplication rdf:about="&om;ohmMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricalResistivity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ElectricalResistivityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Siemens Per Metre Ontology --> + + <om:UnitDivision rdf:about="&om;siemensPerMetre"> + <rdfs:label xml:lang="en">siemens per metre</rdfs:label> + <rdfs:label xml:lang="nl">siemens per meter</rdfs:label> + <om:symbol>S/m</om:symbol> + <om:alternativeSymbol>S m-1</om:alternativeSymbol> + <om:alternativeSymbol>S·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;siemens"/> + <om:hasDenominator rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;electricalConductivity-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;ElectricalConductivity"> + <om:commonlyHasUnit rdf:resource="&om;siemensPerMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricalConductivityUnit"> + <rdfs:label xml:lang="en">electrical conductivity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;siemensPerMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ElectricalConductivity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ElectricalConductivityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Dimension Ontologies --> + + <!-- Contents --> + + <!-- Electric Current Dimension Ontology --> + <!-- Current Density Dimension Ontology --> + <!-- Electric Charge Dimension Ontology --> + <!-- Electric Potential Dimension Ontology --> + <!-- Capacitance Dimension Ontology --> + <!-- Electrical Resistance Dimension Ontology --> + <!-- Electrical Conductance Dimension Ontology --> + <!-- Electric Field Dimension Ontology --> + <!-- Electric Charge Density Dimension Ontology --> + <!-- Electric Flux Density Dimension Ontology --> + <!-- Magnetic Flux Dimension Ontology --> + <!-- Magnetic Field Dimension Ontology --> + <!-- Magnetic Flux Density Dimension Ontology --> + <!-- Inductance Dimension Ontology --> + <!-- Permeability of Free Space Dimension Ontology --> + <!-- Permittivity Dimension Ontology --> + <!-- Electric Dipole Moment Dimension Ontology --> + <!-- Reluctance Dimension Ontology --> + <!-- Electrical Resistivity Dimension Ontology --> + <!-- Electrical Conductivity Dimension Ontology --> + + <!-- Electric Current Dimension Ontology --> + + <om:Dimension rdf:about="&om;electricCurrent-Dimension"> + <rdfs:label xml:lang="en">electric current dimension</rdfs:label> + <om:symbol>I</om:symbol> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;ElectricCurrent"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;electricCurrent-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;MagnetomotiveForce"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;electricCurrent-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Current Density Dimension Ontology --> + + <om:Dimension rdf:about="&om;currentDensity-Dimension"> + <rdfs:label xml:lang="en">current density dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;CurrentDensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;currentDensity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Electric Charge Dimension Ontology --> + + <om:Dimension rdf:about="&om;electricCharge-Dimension"> + <rdfs:label xml:lang="en">electric charge dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;ElectricCharge"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;electricCharge-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Electric Potential Dimension Ontology --> + + <om:Dimension rdf:about="&om;electricPotential-Dimension"> + <rdfs:label xml:lang="en">electric potential dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-3</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;ElectricPotential"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;electricPotential-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Capacitance Dimension Ontology --> + + <om:Dimension rdf:about="&om;capacitance-Dimension"> + <rdfs:label xml:lang="en">capacitance dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">4</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Capacitance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;capacitance-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Electrical Resistance Dimension Ontology --> + + <om:Dimension rdf:about="&om;electricalResistance-Dimension"> + <rdfs:label xml:lang="en">electrical resistance dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-3</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;ElectricalResistance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;electricalResistance-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Electrical Conductance Dimension Ontology --> + + <om:Dimension rdf:about="&om;electricalConductance-Dimension"> + <rdfs:label xml:lang="en">electrical conductance dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">3</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;ElectricalConductance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;electricalConductance-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Electric Field Dimension Ontology --> + + <om:Dimension rdf:about="&om;electricField-Dimension"> + <rdfs:label xml:lang="en">electric field dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-3</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;ElectricField"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;electricField-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Electric Charge Density Dimension Ontology --> + + <om:Dimension rdf:about="&om;electricChargeDensity-Dimension"> + <rdfs:label xml:lang="en">electric charge density dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-3</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;ElectricChargeDensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;electricChargeDensity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Electric Flux Density Dimension Ontology --> + + <om:Dimension rdf:about="&om;electricFluxDensity-Dimension"> + <rdfs:label xml:lang="en">electric flux density dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;ElectricFluxDensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;electricFluxDensity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Magnetic Flux Dimension Ontology --> + + <om:Dimension rdf:about="&om;magneticFlux-Dimension"> + <rdfs:label xml:lang="en">magnetic flux dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;MagneticFlux"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;magneticFlux-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Magnetic Field Dimension Ontology --> + + <om:Dimension rdf:about="&om;MagneticField-Dimension"> + <rdfs:label xml:lang="en">magnetic field dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;MagneticField"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;MagneticField-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Magnetic Flux Density Dimension Ontology --> + + <om:Dimension rdf:about="&om;magneticFluxDensity-Dimension"> + <rdfs:label xml:lang="en">magnetic flux density dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;MagneticFluxDensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;magneticFluxDensity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Inductance Dimension Ontology --> + + <om:Dimension rdf:about="&om;inductanceOrPermeance-Electromagnetic-Dimension"> + <rdfs:label xml:lang="en">inductance or permeance (electromagnetic) dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Inductance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;Permeance-Electromagnetic"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;inductanceOrPermeance-Electromagnetic-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Permeability of Free Space Dimension Ontology --> + + <om:Dimension rdf:about="&om;permeabilityOfFreeSpace-Dimension"> + <rdfs:label xml:lang="en">permeability of free space dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;PermeabilityOfFreeSpace"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;permeabilityOfFreeSpace-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Permittivity Dimension Ontology --> + + <om:Dimension rdf:about="&om;permittivity-Dimension"> + <rdfs:label xml:lang="en">permittivity dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-3</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">4</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Permittivity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;permittivity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Electric Dipole Moment Dimension Ontology --> + + <om:Dimension rdf:about="&om;electricDipoleMoment-Dimension"> + <rdfs:label xml:lang="en">electric dipole moment dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;ElectricDipoleMoment"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;electricDipoleMoment-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Reluctance Dimension Ontology --> + + <om:Dimension rdf:about="&om;reluctance-Dimension"> + <rdfs:label xml:lang="en">reluctance dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Reluctance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;reluctance-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Electrical Resistivity Dimension Ontology --> + + <om:Dimension rdf:about="&om;electricalResistivity-Dimension"> + <rdfs:label xml:lang="en">electrical resistivity dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">3</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-3</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;ElectricalResistivity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;electricalResistivity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Electrical Conductivity Dimension Ontology --> + + <om:Dimension rdf:about="&om;electricalConductivity-Dimension"> + <rdfs:label xml:lang="en">electrical conductivity dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-3</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">3</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;ElectricalConductivity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;electricalConductivity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Fluid Mechanics Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Dimension Ontologies --> + + <om:ApplicationArea rdf:about="&om;fluidMechanics"> + <rdfs:label xml:lang="en">fluid mechanics</rdfs:label> + <rdfs:label xml:lang="nl">vloeistofmechanica</rdfs:label> + <om:usesQuantity rdf:resource="&om;ContactAngle"/> + <om:usesQuantity rdf:resource="&om;WettingAngle"/> + <om:usesQuantity rdf:resource="&om;Stress"/> + <om:usesQuantity rdf:resource="&om;CompressiveStress"/> + <om:usesQuantity rdf:resource="&om;NormalStress"/> + <om:usesQuantity rdf:resource="&om;ShearStress"/> + <om:usesQuantity rdf:resource="&om;StressTensor"/> + <om:usesQuantity rdf:resource="&om;ShearRate"/> + <om:usesQuantity rdf:resource="&om;Strain"/> + <om:usesQuantity rdf:resource="&om;LinearStrain"/> + <om:usesQuantity rdf:resource="&om;VolumeStrain"/> + <om:usesQuantity rdf:resource="&om;NormalStrain"/> + <om:usesQuantity rdf:resource="&om;ShearStrain"/> + <om:usesQuantity rdf:resource="&om;StrainTensor"/> + <om:usesQuantity rdf:resource="&om;DynamicModulus"/> + <om:usesQuantity rdf:resource="&om;ShearModulus"/> + <om:usesQuantity rdf:resource="&om;StorageModulus"/> + <om:usesQuantity rdf:resource="&om;ShearStorageModulus"/> + <om:usesQuantity rdf:resource="&om;LossModulus"/> + <om:usesQuantity rdf:resource="&om;ShearLossModulus"/> + <om:usesQuantity rdf:resource="&om;BulkModulus"/> + <om:usesQuantity rdf:resource="&om;ModulusOfElasticity"/> + <om:usesQuantity rdf:resource="&om;ElasticityTensor"/> + <om:usesQuantity rdf:resource="&om;SurfaceTension"/> + <om:usesUnit rdf:resource="&om;attoradian"/> + <om:usesUnit rdf:resource="&om;centiradian"/> + <om:usesUnit rdf:resource="&om;deciradian"/> + <om:usesUnit rdf:resource="&om;femtoradian"/> + <om:usesUnit rdf:resource="&om;microradian"/> + <om:usesUnit rdf:resource="&om;milliradian"/> + <om:usesUnit rdf:resource="&om;nanoradian"/> + <om:usesUnit rdf:resource="&om;picoradian"/> + <om:usesUnit rdf:resource="&om;newtonPerSquareMetre"/> + <om:usesUnit rdf:resource="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + <om:usesUnit rdf:resource="&om;pascal"/> + <om:usesUnit rdf:resource="&om;attopascal"/> + <om:usesUnit rdf:resource="&om;centipascal"/> + <om:usesUnit rdf:resource="&om;decapascal"/> + <om:usesUnit rdf:resource="&om;decipascal"/> + <om:usesUnit rdf:resource="&om;exapascal"/> + <om:usesUnit rdf:resource="&om;femtopascal"/> + <om:usesUnit rdf:resource="&om;gigapascal"/> + <om:usesUnit rdf:resource="&om;hectopascal"/> + <om:usesUnit rdf:resource="&om;kilopascal"/> + <om:usesUnit rdf:resource="&om;megapascal"/> + <om:usesUnit rdf:resource="&om;micropascal"/> + <om:usesUnit rdf:resource="&om;millipascal"/> + <om:usesUnit rdf:resource="&om;nanopascal"/> + <om:usesUnit rdf:resource="&om;petapascal"/> + <om:usesUnit rdf:resource="&om;picopascal"/> + <om:usesUnit rdf:resource="&om;terapascal"/> + <om:usesUnit rdf:resource="&om;bar"/> + <om:usesUnit rdf:resource="&om;decibar"/> + <om:usesUnit rdf:resource="&om;microbar"/> + <om:usesUnit rdf:resource="&om;millibar"/> + <om:usesUnit rdf:resource="&om;metreOfMercury"/> + <om:usesUnit rdf:resource="&om;centimetreOfMercury"/> + <om:usesUnit rdf:resource="&om;millimetreOfMercury"/> + <om:usesUnit rdf:resource="&om;atmosphere-Standard"/> + <om:usesUnit rdf:resource="&om;atmosphere-Technical"/> + <om:usesUnit rdf:resource="&om;barye"/> + <om:usesUnit rdf:resource="&om;torr"/> + </om:ApplicationArea> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Angle Subclass Upper Ontology --> + <!-- Stress Upper Ontology --> + <!-- Stress Subclass Upper Ontology --> + <!-- Shear Rate Upper Ontology --> + <!-- Strain Upper Ontology --> + <!-- Strain Subclass Upper Ontology --> + <!-- Dynamic Modulus Upper Ontology --> + <!-- Dynamic Modulus Subclass Upper Ontology --> + <!-- Surface Tension Upper Ontology --> + + <!-- Angle Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;ContactAngle"> + <rdfs:label xml:lang="en">contact angle</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;WettingAngle"> + <rdfs:label xml:lang="en">wetting angle</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;ContactAngle"> + <om:commonlyHasUnit rdf:resource="&om;metrePerMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;WettingAngle"> + <om:commonlyHasUnit rdf:resource="&om;metrePerMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ContactAngle"> + <om:commonlyHasUnit rdf:resource="&om;radian"/> + </owl:Class> + + <owl:Class rdf:about="&om;WettingAngle"> + <om:commonlyHasUnit rdf:resource="&om;radian"/> + </owl:Class> + + <owl:Class rdf:about="&om;ContactAngle"> + <om:commonlyHasUnit rdf:resource="&om;attoradian"/> + <om:commonlyHasUnit rdf:resource="&om;centiradian"/> + <om:commonlyHasUnit rdf:resource="&om;deciradian"/> + <om:commonlyHasUnit rdf:resource="&om;femtoradian"/> + <om:commonlyHasUnit rdf:resource="&om;microradian"/> + <om:commonlyHasUnit rdf:resource="&om;milliradian"/> + <om:commonlyHasUnit rdf:resource="&om;nanoradian"/> + <om:commonlyHasUnit rdf:resource="&om;picoradian"/> + </owl:Class> + + <owl:Class rdf:about="&om;WettingAngle"> + <om:commonlyHasUnit rdf:resource="&om;attoradian"/> + <om:commonlyHasUnit rdf:resource="&om;centiradian"/> + <om:commonlyHasUnit rdf:resource="&om;deciradian"/> + <om:commonlyHasUnit rdf:resource="&om;femtoradian"/> + <om:commonlyHasUnit rdf:resource="&om;microradian"/> + <om:commonlyHasUnit rdf:resource="&om;milliradian"/> + <om:commonlyHasUnit rdf:resource="&om;nanoradian"/> + <om:commonlyHasUnit rdf:resource="&om;picoradian"/> + </owl:Class> + + <owl:Class rdf:about="&om;ContactAngle"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;gon"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;revolution"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;WettingAngle"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;gon"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;revolution"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Angle"/> + </owl:Class> + + <!-- Stress Upper Ontology --> + + <owl:Class rdf:about="&om;Stress"> + <rdfs:label xml:lang="en">stress</rdfs:label> + <rdfs:label xml:lang="nl">mechanische spanning</rdfs:label> + <rdfs:comment xml:lang="en">Stress is a force that produces or tends to produce deformation in a body measured by the force applied per unit area.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>σ</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Stress"> + <om:commonlyHasUnit rdf:resource="&om;newtonPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Stress"> + <om:commonlyHasUnit rdf:resource="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Stress"> + <om:commonlyHasUnit rdf:resource="&om;pascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;Stress"> + <om:commonlyHasUnit rdf:resource="&om;attopascal"/> + <om:commonlyHasUnit rdf:resource="&om;centipascal"/> + <om:commonlyHasUnit rdf:resource="&om;decapascal"/> + <om:commonlyHasUnit rdf:resource="&om;decipascal"/> + <om:commonlyHasUnit rdf:resource="&om;exapascal"/> + <om:commonlyHasUnit rdf:resource="&om;femtopascal"/> + <om:commonlyHasUnit rdf:resource="&om;gigapascal"/> + <om:commonlyHasUnit rdf:resource="&om;hectopascal"/> + <om:commonlyHasUnit rdf:resource="&om;kilopascal"/> + <om:commonlyHasUnit rdf:resource="&om;megapascal"/> + <om:commonlyHasUnit rdf:resource="&om;micropascal"/> + <om:commonlyHasUnit rdf:resource="&om;millipascal"/> + <om:commonlyHasUnit rdf:resource="&om;nanopascal"/> + <om:commonlyHasUnit rdf:resource="&om;petapascal"/> + <om:commonlyHasUnit rdf:resource="&om;picopascal"/> + <om:commonlyHasUnit rdf:resource="&om;terapascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;Stress"> + <om:commonlyHasUnit rdf:resource="&om;bar"/> + </owl:Class> + + <owl:Class rdf:about="&om;Stress"> + <om:commonlyHasUnit rdf:resource="&om;decibar"/> + <om:commonlyHasUnit rdf:resource="&om;microbar"/> + <om:commonlyHasUnit rdf:resource="&om;millibar"/> + </owl:Class> + + <owl:Class rdf:about="&om;Stress"> + <om:commonlyHasUnit rdf:resource="&om;metreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;Stress"> + <om:commonlyHasUnit rdf:resource="&om;centimetreOfMercury"/> + <om:commonlyHasUnit rdf:resource="&om;millimetreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;Stress"> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Standard"/> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Technical"/> + <om:commonlyHasUnit rdf:resource="&om;barye"/> + <om:commonlyHasUnit rdf:resource="&om;torr"/> + </owl:Class> + + <owl:Class rdf:about="&om;Stress"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;pressure-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Stress Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;CompressiveStress"> + <rdfs:label xml:lang="en">compressive stress</rdfs:label> + <rdfs:comment xml:lang="en">Compressive stress is a stress that, when applied, acts towards the center of a material.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Stress"/> + </owl:Class> + + <owl:Class rdf:about="&om;NormalStress"> + <rdfs:label xml:lang="en">normal stress</rdfs:label> + <rdfs:label xml:lang="nl">normaalspanning</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Stress"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStress"> + <rdfs:label xml:lang="en">shear stress</rdfs:label> + <rdfs:label xml:lang="nl">schuifspanning</rdfs:label> + <rdfs:comment xml:lang="en">Shear stress is a stress that is applied parallel or tangential to a face of a material.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Stress"/> + <om:symbol>τ</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;StressTensor"> + <rdfs:label xml:lang="en">stress tensor</rdfs:label> + <rdfs:label xml:lang="nl">mechanische-spanningstensor</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Stress"/> + <om:symbol>τ_ij</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;CompressiveStress"> + <om:commonlyHasUnit rdf:resource="&om;newtonPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;NormalStress"> + <om:commonlyHasUnit rdf:resource="&om;newtonPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStress"> + <om:commonlyHasUnit rdf:resource="&om;newtonPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;StressTensor"> + <om:commonlyHasUnit rdf:resource="&om;newtonPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;CompressiveStress"> + <om:commonlyHasUnit rdf:resource="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;NormalStress"> + <om:commonlyHasUnit rdf:resource="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStress"> + <om:commonlyHasUnit rdf:resource="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;StressTensor"> + <om:commonlyHasUnit rdf:resource="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;CompressiveStress"> + <om:commonlyHasUnit rdf:resource="&om;pascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;NormalStress"> + <om:commonlyHasUnit rdf:resource="&om;pascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStress"> + <om:commonlyHasUnit rdf:resource="&om;pascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;StressTensor"> + <om:commonlyHasUnit rdf:resource="&om;pascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;CompressiveStress"> + <om:commonlyHasUnit rdf:resource="&om;attopascal"/> + <om:commonlyHasUnit rdf:resource="&om;centipascal"/> + <om:commonlyHasUnit rdf:resource="&om;decapascal"/> + <om:commonlyHasUnit rdf:resource="&om;decipascal"/> + <om:commonlyHasUnit rdf:resource="&om;exapascal"/> + <om:commonlyHasUnit rdf:resource="&om;femtopascal"/> + <om:commonlyHasUnit rdf:resource="&om;gigapascal"/> + <om:commonlyHasUnit rdf:resource="&om;hectopascal"/> + <om:commonlyHasUnit rdf:resource="&om;kilopascal"/> + <om:commonlyHasUnit rdf:resource="&om;megapascal"/> + <om:commonlyHasUnit rdf:resource="&om;micropascal"/> + <om:commonlyHasUnit rdf:resource="&om;millipascal"/> + <om:commonlyHasUnit rdf:resource="&om;nanopascal"/> + <om:commonlyHasUnit rdf:resource="&om;petapascal"/> + <om:commonlyHasUnit rdf:resource="&om;picopascal"/> + <om:commonlyHasUnit rdf:resource="&om;terapascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;NormalStress"> + <om:commonlyHasUnit rdf:resource="&om;attopascal"/> + <om:commonlyHasUnit rdf:resource="&om;centipascal"/> + <om:commonlyHasUnit rdf:resource="&om;decapascal"/> + <om:commonlyHasUnit rdf:resource="&om;decipascal"/> + <om:commonlyHasUnit rdf:resource="&om;exapascal"/> + <om:commonlyHasUnit rdf:resource="&om;femtopascal"/> + <om:commonlyHasUnit rdf:resource="&om;gigapascal"/> + <om:commonlyHasUnit rdf:resource="&om;hectopascal"/> + <om:commonlyHasUnit rdf:resource="&om;kilopascal"/> + <om:commonlyHasUnit rdf:resource="&om;megapascal"/> + <om:commonlyHasUnit rdf:resource="&om;micropascal"/> + <om:commonlyHasUnit rdf:resource="&om;millipascal"/> + <om:commonlyHasUnit rdf:resource="&om;nanopascal"/> + <om:commonlyHasUnit rdf:resource="&om;petapascal"/> + <om:commonlyHasUnit rdf:resource="&om;picopascal"/> + <om:commonlyHasUnit rdf:resource="&om;terapascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStress"> + <om:commonlyHasUnit rdf:resource="&om;attopascal"/> + <om:commonlyHasUnit rdf:resource="&om;centipascal"/> + <om:commonlyHasUnit rdf:resource="&om;decapascal"/> + <om:commonlyHasUnit rdf:resource="&om;decipascal"/> + <om:commonlyHasUnit rdf:resource="&om;exapascal"/> + <om:commonlyHasUnit rdf:resource="&om;femtopascal"/> + <om:commonlyHasUnit rdf:resource="&om;gigapascal"/> + <om:commonlyHasUnit rdf:resource="&om;hectopascal"/> + <om:commonlyHasUnit rdf:resource="&om;kilopascal"/> + <om:commonlyHasUnit rdf:resource="&om;megapascal"/> + <om:commonlyHasUnit rdf:resource="&om;micropascal"/> + <om:commonlyHasUnit rdf:resource="&om;millipascal"/> + <om:commonlyHasUnit rdf:resource="&om;nanopascal"/> + <om:commonlyHasUnit rdf:resource="&om;petapascal"/> + <om:commonlyHasUnit rdf:resource="&om;picopascal"/> + <om:commonlyHasUnit rdf:resource="&om;terapascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;StressTensor"> + <om:commonlyHasUnit rdf:resource="&om;attopascal"/> + <om:commonlyHasUnit rdf:resource="&om;centipascal"/> + <om:commonlyHasUnit rdf:resource="&om;decapascal"/> + <om:commonlyHasUnit rdf:resource="&om;decipascal"/> + <om:commonlyHasUnit rdf:resource="&om;exapascal"/> + <om:commonlyHasUnit rdf:resource="&om;femtopascal"/> + <om:commonlyHasUnit rdf:resource="&om;gigapascal"/> + <om:commonlyHasUnit rdf:resource="&om;hectopascal"/> + <om:commonlyHasUnit rdf:resource="&om;kilopascal"/> + <om:commonlyHasUnit rdf:resource="&om;megapascal"/> + <om:commonlyHasUnit rdf:resource="&om;micropascal"/> + <om:commonlyHasUnit rdf:resource="&om;millipascal"/> + <om:commonlyHasUnit rdf:resource="&om;nanopascal"/> + <om:commonlyHasUnit rdf:resource="&om;petapascal"/> + <om:commonlyHasUnit rdf:resource="&om;picopascal"/> + <om:commonlyHasUnit rdf:resource="&om;terapascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;CompressiveStress"> + <om:commonlyHasUnit rdf:resource="&om;bar"/> + </owl:Class> + + <owl:Class rdf:about="&om;NormalStress"> + <om:commonlyHasUnit rdf:resource="&om;bar"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStress"> + <om:commonlyHasUnit rdf:resource="&om;bar"/> + </owl:Class> + + <owl:Class rdf:about="&om;StressTensor"> + <om:commonlyHasUnit rdf:resource="&om;bar"/> + </owl:Class> + + <owl:Class rdf:about="&om;CompressiveStress"> + <om:commonlyHasUnit rdf:resource="&om;decibar"/> + <om:commonlyHasUnit rdf:resource="&om;microbar"/> + <om:commonlyHasUnit rdf:resource="&om;millibar"/> + </owl:Class> + + <owl:Class rdf:about="&om;NormalStress"> + <om:commonlyHasUnit rdf:resource="&om;decibar"/> + <om:commonlyHasUnit rdf:resource="&om;microbar"/> + <om:commonlyHasUnit rdf:resource="&om;millibar"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStress"> + <om:commonlyHasUnit rdf:resource="&om;decibar"/> + <om:commonlyHasUnit rdf:resource="&om;microbar"/> + <om:commonlyHasUnit rdf:resource="&om;millibar"/> + </owl:Class> + + <owl:Class rdf:about="&om;StressTensor"> + <om:commonlyHasUnit rdf:resource="&om;decibar"/> + <om:commonlyHasUnit rdf:resource="&om;microbar"/> + <om:commonlyHasUnit rdf:resource="&om;millibar"/> + </owl:Class> + + <owl:Class rdf:about="&om;CompressiveStress"> + <om:commonlyHasUnit rdf:resource="&om;metreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;NormalStress"> + <om:commonlyHasUnit rdf:resource="&om;metreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStress"> + <om:commonlyHasUnit rdf:resource="&om;metreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;StressTensor"> + <om:commonlyHasUnit rdf:resource="&om;metreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;CompressiveStress"> + <om:commonlyHasUnit rdf:resource="&om;centimetreOfMercury"/> + <om:commonlyHasUnit rdf:resource="&om;millimetreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;NormalStress"> + <om:commonlyHasUnit rdf:resource="&om;centimetreOfMercury"/> + <om:commonlyHasUnit rdf:resource="&om;millimetreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStress"> + <om:commonlyHasUnit rdf:resource="&om;centimetreOfMercury"/> + <om:commonlyHasUnit rdf:resource="&om;millimetreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;StressTensor"> + <om:commonlyHasUnit rdf:resource="&om;centimetreOfMercury"/> + <om:commonlyHasUnit rdf:resource="&om;millimetreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;CompressiveStress"> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Standard"/> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Technical"/> + <om:commonlyHasUnit rdf:resource="&om;barye"/> + <om:commonlyHasUnit rdf:resource="&om;torr"/> + </owl:Class> + + <owl:Class rdf:about="&om;NormalStress"> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Standard"/> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Technical"/> + <om:commonlyHasUnit rdf:resource="&om;barye"/> + <om:commonlyHasUnit rdf:resource="&om;torr"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStress"> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Standard"/> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Technical"/> + <om:commonlyHasUnit rdf:resource="&om;barye"/> + <om:commonlyHasUnit rdf:resource="&om;torr"/> + </owl:Class> + + <owl:Class rdf:about="&om;StressTensor"> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Standard"/> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Technical"/> + <om:commonlyHasUnit rdf:resource="&om;barye"/> + <om:commonlyHasUnit rdf:resource="&om;torr"/> + </owl:Class> + + <!-- Shear Rate Upper Ontology --> + + <owl:Class rdf:about="&om;ShearRate"> + <rdfs:label xml:lang="en">shear rate</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>S</om:symbol> + </owl:Class> + + <!-- Strain Upper Ontology --> + + <owl:Class rdf:about="&om;Strain"> + <rdfs:label xml:lang="en">strain</rdfs:label> + <rdfs:label xml:lang="nl">vervorming</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>ε</om:symbol> + <om:alternativeSymbol>γ</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;Strain"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;Strain"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;StrainUnit"> + <rdfs:label xml:lang="en">strain unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + <om:Unit rdf:about="&om;percent"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Strain"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;StrainUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;Strain"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Strain Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;LinearStrain"> + <rdfs:label xml:lang="en">linear strain</rdfs:label> + <rdfs:label xml:lang="nl">lineaire vervorming</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Strain"/> + <om:alternativeSymbol>e</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;VolumeStrain"> + <rdfs:label xml:lang="en">volume strain</rdfs:label> + <om:alternativeLabel xml:lang="en">bulk strain</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Strain"/> + <om:symbol>θ</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;NormalStrain"> + <rdfs:label xml:lang="en">normal strain</rdfs:label> + <rdfs:label xml:lang="nl">normaalvervorming</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Strain"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStrain"> + <rdfs:label xml:lang="en">shear strain</rdfs:label> + <rdfs:label xml:lang="nl">schuifvervorming</rdfs:label> + <rdfs:comment xml:lang="en">Shear strain is a strain that acts parallel to the surface of a material that it acts on.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Strain"/> + </owl:Class> + + <owl:Class rdf:about="&om;StrainTensor"> + <rdfs:label xml:lang="en">strain tensor</rdfs:label> + <om:alternativeLabel xml:lang="nl">vervormingstensor</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">rektensor</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Strain"/> + <om:symbol>ε_ij</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;LinearStrain"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumeStrain"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NormalStrain"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStrain"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;StrainTensor"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;LinearStrain"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumeStrain"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;NormalStrain"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStrain"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;StrainTensor"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <!-- Dynamic Modulus Upper Ontology --> + + <owl:Class rdf:about="&om;DynamicModulus"> + <rdfs:label xml:lang="en">dynamic modulus</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>E</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicModulus"> + <om:commonlyHasUnit rdf:resource="&om;newtonPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicModulus"> + <om:commonlyHasUnit rdf:resource="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicModulus"> + <om:commonlyHasUnit rdf:resource="&om;pascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicModulus"> + <om:commonlyHasUnit rdf:resource="&om;attopascal"/> + <om:commonlyHasUnit rdf:resource="&om;centipascal"/> + <om:commonlyHasUnit rdf:resource="&om;decapascal"/> + <om:commonlyHasUnit rdf:resource="&om;decipascal"/> + <om:commonlyHasUnit rdf:resource="&om;exapascal"/> + <om:commonlyHasUnit rdf:resource="&om;femtopascal"/> + <om:commonlyHasUnit rdf:resource="&om;gigapascal"/> + <om:commonlyHasUnit rdf:resource="&om;hectopascal"/> + <om:commonlyHasUnit rdf:resource="&om;kilopascal"/> + <om:commonlyHasUnit rdf:resource="&om;megapascal"/> + <om:commonlyHasUnit rdf:resource="&om;micropascal"/> + <om:commonlyHasUnit rdf:resource="&om;millipascal"/> + <om:commonlyHasUnit rdf:resource="&om;nanopascal"/> + <om:commonlyHasUnit rdf:resource="&om;petapascal"/> + <om:commonlyHasUnit rdf:resource="&om;picopascal"/> + <om:commonlyHasUnit rdf:resource="&om;terapascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicModulus"> + <om:commonlyHasUnit rdf:resource="&om;bar"/> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicModulus"> + <om:commonlyHasUnit rdf:resource="&om;decibar"/> + <om:commonlyHasUnit rdf:resource="&om;microbar"/> + <om:commonlyHasUnit rdf:resource="&om;millibar"/> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicModulus"> + <om:commonlyHasUnit rdf:resource="&om;metreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicModulus"> + <om:commonlyHasUnit rdf:resource="&om;centimetreOfMercury"/> + <om:commonlyHasUnit rdf:resource="&om;millimetreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicModulus"> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Standard"/> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Technical"/> + <om:commonlyHasUnit rdf:resource="&om;barye"/> + <om:commonlyHasUnit rdf:resource="&om;torr"/> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicModulus"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;pressure-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Dynamic Modulus Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;ShearModulus"> + <rdfs:label xml:lang="en">shear modulus</rdfs:label> + <rdfs:label xml:lang="nl">schuifmodulus</rdfs:label> + <rdfs:comment xml:lang="en">Shear modulus is the ratio of shear stress to shear strain.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;DynamicModulus"/> + <om:symbol>G</om:symbol> + <om:alternativeSymbol>S</om:alternativeSymbol> + <om:alternativeSymbol>μ</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;StorageModulus"> + <rdfs:label xml:lang="en">storage modulus</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;DynamicModulus"/> + <om:symbol>E'</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStorageModulus"> + <rdfs:label xml:lang="en">shear storage modulus</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;StorageModulus"/> + <om:symbol>G'</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;LossModulus"> + <rdfs:label xml:lang="en">loss modulus</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;DynamicModulus"/> + <om:symbol>E''</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;ShearLossModulus"> + <rdfs:label xml:lang="en">shear loss modulus</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;StorageModulus"/> + <om:symbol>G''</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;BulkModulus"> + <rdfs:label xml:lang="en">bulk modulus</rdfs:label> + <rdfs:label xml:lang="nl">compressiemodulus</rdfs:label> + <rdfs:comment xml:lang="en">Bulk modulus is a substance's resistance to uniform compression.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;DynamicModulus"/> + <om:symbol>K</om:symbol> + <om:alternativeSymbol>κ</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;ModulusOfElasticity"> + <rdfs:label xml:lang="en">modulus of elasticity</rdfs:label> + <rdfs:label xml:lang="nl">elasticiteitsmodulus</rdfs:label> + <om:alternativeLabel xml:lang="en">Young's modulus</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;DynamicModulus"/> + <om:symbol>E</om:symbol> + <om:alternativeSymbol>Y</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;ElasticityTensor"> + <rdfs:label xml:lang="en">elasticity tensor</rdfs:label> + <rdfs:label xml:lang="nl">elasticiteitstensor</rdfs:label> + <om:alternativeLabel xml:lang="en">stiffness tensor</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;DynamicModulus"/> + <om:symbol>c_ijkl</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;ShearModulus"> + <om:commonlyHasUnit rdf:resource="&om;newtonPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;StorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;newtonPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;newtonPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;LossModulus"> + <om:commonlyHasUnit rdf:resource="&om;newtonPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearLossModulus"> + <om:commonlyHasUnit rdf:resource="&om;newtonPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;BulkModulus"> + <om:commonlyHasUnit rdf:resource="&om;newtonPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ModulusOfElasticity"> + <om:commonlyHasUnit rdf:resource="&om;newtonPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElasticityTensor"> + <om:commonlyHasUnit rdf:resource="&om;newtonPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearModulus"> + <om:commonlyHasUnit rdf:resource="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;StorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;LossModulus"> + <om:commonlyHasUnit rdf:resource="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearLossModulus"> + <om:commonlyHasUnit rdf:resource="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;BulkModulus"> + <om:commonlyHasUnit rdf:resource="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ModulusOfElasticity"> + <om:commonlyHasUnit rdf:resource="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElasticityTensor"> + <om:commonlyHasUnit rdf:resource="&om;kilogramSecond-TimeToThePower-2ReciprocalMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearModulus"> + <om:commonlyHasUnit rdf:resource="&om;pascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;StorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;pascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;pascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;LossModulus"> + <om:commonlyHasUnit rdf:resource="&om;pascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearLossModulus"> + <om:commonlyHasUnit rdf:resource="&om;pascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;BulkModulus"> + <om:commonlyHasUnit rdf:resource="&om;pascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;ModulusOfElasticity"> + <om:commonlyHasUnit rdf:resource="&om;pascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElasticityTensor"> + <om:commonlyHasUnit rdf:resource="&om;pascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearModulus"> + <om:commonlyHasUnit rdf:resource="&om;attopascal"/> + <om:commonlyHasUnit rdf:resource="&om;centipascal"/> + <om:commonlyHasUnit rdf:resource="&om;decapascal"/> + <om:commonlyHasUnit rdf:resource="&om;decipascal"/> + <om:commonlyHasUnit rdf:resource="&om;exapascal"/> + <om:commonlyHasUnit rdf:resource="&om;femtopascal"/> + <om:commonlyHasUnit rdf:resource="&om;gigapascal"/> + <om:commonlyHasUnit rdf:resource="&om;hectopascal"/> + <om:commonlyHasUnit rdf:resource="&om;kilopascal"/> + <om:commonlyHasUnit rdf:resource="&om;megapascal"/> + <om:commonlyHasUnit rdf:resource="&om;micropascal"/> + <om:commonlyHasUnit rdf:resource="&om;millipascal"/> + <om:commonlyHasUnit rdf:resource="&om;nanopascal"/> + <om:commonlyHasUnit rdf:resource="&om;petapascal"/> + <om:commonlyHasUnit rdf:resource="&om;picopascal"/> + <om:commonlyHasUnit rdf:resource="&om;terapascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;StorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;attopascal"/> + <om:commonlyHasUnit rdf:resource="&om;centipascal"/> + <om:commonlyHasUnit rdf:resource="&om;decapascal"/> + <om:commonlyHasUnit rdf:resource="&om;decipascal"/> + <om:commonlyHasUnit rdf:resource="&om;exapascal"/> + <om:commonlyHasUnit rdf:resource="&om;femtopascal"/> + <om:commonlyHasUnit rdf:resource="&om;gigapascal"/> + <om:commonlyHasUnit rdf:resource="&om;hectopascal"/> + <om:commonlyHasUnit rdf:resource="&om;kilopascal"/> + <om:commonlyHasUnit rdf:resource="&om;megapascal"/> + <om:commonlyHasUnit rdf:resource="&om;micropascal"/> + <om:commonlyHasUnit rdf:resource="&om;millipascal"/> + <om:commonlyHasUnit rdf:resource="&om;nanopascal"/> + <om:commonlyHasUnit rdf:resource="&om;petapascal"/> + <om:commonlyHasUnit rdf:resource="&om;picopascal"/> + <om:commonlyHasUnit rdf:resource="&om;terapascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;attopascal"/> + <om:commonlyHasUnit rdf:resource="&om;centipascal"/> + <om:commonlyHasUnit rdf:resource="&om;decapascal"/> + <om:commonlyHasUnit rdf:resource="&om;decipascal"/> + <om:commonlyHasUnit rdf:resource="&om;exapascal"/> + <om:commonlyHasUnit rdf:resource="&om;femtopascal"/> + <om:commonlyHasUnit rdf:resource="&om;gigapascal"/> + <om:commonlyHasUnit rdf:resource="&om;hectopascal"/> + <om:commonlyHasUnit rdf:resource="&om;kilopascal"/> + <om:commonlyHasUnit rdf:resource="&om;megapascal"/> + <om:commonlyHasUnit rdf:resource="&om;micropascal"/> + <om:commonlyHasUnit rdf:resource="&om;millipascal"/> + <om:commonlyHasUnit rdf:resource="&om;nanopascal"/> + <om:commonlyHasUnit rdf:resource="&om;petapascal"/> + <om:commonlyHasUnit rdf:resource="&om;picopascal"/> + <om:commonlyHasUnit rdf:resource="&om;terapascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;LossModulus"> + <om:commonlyHasUnit rdf:resource="&om;attopascal"/> + <om:commonlyHasUnit rdf:resource="&om;centipascal"/> + <om:commonlyHasUnit rdf:resource="&om;decapascal"/> + <om:commonlyHasUnit rdf:resource="&om;decipascal"/> + <om:commonlyHasUnit rdf:resource="&om;exapascal"/> + <om:commonlyHasUnit rdf:resource="&om;femtopascal"/> + <om:commonlyHasUnit rdf:resource="&om;gigapascal"/> + <om:commonlyHasUnit rdf:resource="&om;hectopascal"/> + <om:commonlyHasUnit rdf:resource="&om;kilopascal"/> + <om:commonlyHasUnit rdf:resource="&om;megapascal"/> + <om:commonlyHasUnit rdf:resource="&om;micropascal"/> + <om:commonlyHasUnit rdf:resource="&om;millipascal"/> + <om:commonlyHasUnit rdf:resource="&om;nanopascal"/> + <om:commonlyHasUnit rdf:resource="&om;petapascal"/> + <om:commonlyHasUnit rdf:resource="&om;picopascal"/> + <om:commonlyHasUnit rdf:resource="&om;terapascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearLossModulus"> + <om:commonlyHasUnit rdf:resource="&om;attopascal"/> + <om:commonlyHasUnit rdf:resource="&om;centipascal"/> + <om:commonlyHasUnit rdf:resource="&om;decapascal"/> + <om:commonlyHasUnit rdf:resource="&om;decipascal"/> + <om:commonlyHasUnit rdf:resource="&om;exapascal"/> + <om:commonlyHasUnit rdf:resource="&om;femtopascal"/> + <om:commonlyHasUnit rdf:resource="&om;gigapascal"/> + <om:commonlyHasUnit rdf:resource="&om;hectopascal"/> + <om:commonlyHasUnit rdf:resource="&om;kilopascal"/> + <om:commonlyHasUnit rdf:resource="&om;megapascal"/> + <om:commonlyHasUnit rdf:resource="&om;micropascal"/> + <om:commonlyHasUnit rdf:resource="&om;millipascal"/> + <om:commonlyHasUnit rdf:resource="&om;nanopascal"/> + <om:commonlyHasUnit rdf:resource="&om;petapascal"/> + <om:commonlyHasUnit rdf:resource="&om;picopascal"/> + <om:commonlyHasUnit rdf:resource="&om;terapascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;BulkModulus"> + <om:commonlyHasUnit rdf:resource="&om;attopascal"/> + <om:commonlyHasUnit rdf:resource="&om;centipascal"/> + <om:commonlyHasUnit rdf:resource="&om;decapascal"/> + <om:commonlyHasUnit rdf:resource="&om;decipascal"/> + <om:commonlyHasUnit rdf:resource="&om;exapascal"/> + <om:commonlyHasUnit rdf:resource="&om;femtopascal"/> + <om:commonlyHasUnit rdf:resource="&om;gigapascal"/> + <om:commonlyHasUnit rdf:resource="&om;hectopascal"/> + <om:commonlyHasUnit rdf:resource="&om;kilopascal"/> + <om:commonlyHasUnit rdf:resource="&om;megapascal"/> + <om:commonlyHasUnit rdf:resource="&om;micropascal"/> + <om:commonlyHasUnit rdf:resource="&om;millipascal"/> + <om:commonlyHasUnit rdf:resource="&om;nanopascal"/> + <om:commonlyHasUnit rdf:resource="&om;petapascal"/> + <om:commonlyHasUnit rdf:resource="&om;picopascal"/> + <om:commonlyHasUnit rdf:resource="&om;terapascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;ModulusOfElasticity"> + <om:commonlyHasUnit rdf:resource="&om;attopascal"/> + <om:commonlyHasUnit rdf:resource="&om;centipascal"/> + <om:commonlyHasUnit rdf:resource="&om;decapascal"/> + <om:commonlyHasUnit rdf:resource="&om;decipascal"/> + <om:commonlyHasUnit rdf:resource="&om;exapascal"/> + <om:commonlyHasUnit rdf:resource="&om;femtopascal"/> + <om:commonlyHasUnit rdf:resource="&om;gigapascal"/> + <om:commonlyHasUnit rdf:resource="&om;hectopascal"/> + <om:commonlyHasUnit rdf:resource="&om;kilopascal"/> + <om:commonlyHasUnit rdf:resource="&om;megapascal"/> + <om:commonlyHasUnit rdf:resource="&om;micropascal"/> + <om:commonlyHasUnit rdf:resource="&om;millipascal"/> + <om:commonlyHasUnit rdf:resource="&om;nanopascal"/> + <om:commonlyHasUnit rdf:resource="&om;petapascal"/> + <om:commonlyHasUnit rdf:resource="&om;picopascal"/> + <om:commonlyHasUnit rdf:resource="&om;terapascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElasticityTensor"> + <om:commonlyHasUnit rdf:resource="&om;attopascal"/> + <om:commonlyHasUnit rdf:resource="&om;centipascal"/> + <om:commonlyHasUnit rdf:resource="&om;decapascal"/> + <om:commonlyHasUnit rdf:resource="&om;decipascal"/> + <om:commonlyHasUnit rdf:resource="&om;exapascal"/> + <om:commonlyHasUnit rdf:resource="&om;femtopascal"/> + <om:commonlyHasUnit rdf:resource="&om;gigapascal"/> + <om:commonlyHasUnit rdf:resource="&om;hectopascal"/> + <om:commonlyHasUnit rdf:resource="&om;kilopascal"/> + <om:commonlyHasUnit rdf:resource="&om;megapascal"/> + <om:commonlyHasUnit rdf:resource="&om;micropascal"/> + <om:commonlyHasUnit rdf:resource="&om;millipascal"/> + <om:commonlyHasUnit rdf:resource="&om;nanopascal"/> + <om:commonlyHasUnit rdf:resource="&om;petapascal"/> + <om:commonlyHasUnit rdf:resource="&om;picopascal"/> + <om:commonlyHasUnit rdf:resource="&om;terapascal"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearModulus"> + <om:commonlyHasUnit rdf:resource="&om;bar"/> + </owl:Class> + + <owl:Class rdf:about="&om;StorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;bar"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;bar"/> + </owl:Class> + + <owl:Class rdf:about="&om;LossModulus"> + <om:commonlyHasUnit rdf:resource="&om;bar"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearLossModulus"> + <om:commonlyHasUnit rdf:resource="&om;bar"/> + </owl:Class> + + <owl:Class rdf:about="&om;BulkModulus"> + <om:commonlyHasUnit rdf:resource="&om;bar"/> + </owl:Class> + + <owl:Class rdf:about="&om;ModulusOfElasticity"> + <om:commonlyHasUnit rdf:resource="&om;bar"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElasticityTensor"> + <om:commonlyHasUnit rdf:resource="&om;bar"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearModulus"> + <om:commonlyHasUnit rdf:resource="&om;decibar"/> + <om:commonlyHasUnit rdf:resource="&om;microbar"/> + <om:commonlyHasUnit rdf:resource="&om;millibar"/> + </owl:Class> + + <owl:Class rdf:about="&om;StorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;decibar"/> + <om:commonlyHasUnit rdf:resource="&om;microbar"/> + <om:commonlyHasUnit rdf:resource="&om;millibar"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;decibar"/> + <om:commonlyHasUnit rdf:resource="&om;microbar"/> + <om:commonlyHasUnit rdf:resource="&om;millibar"/> + </owl:Class> + + <owl:Class rdf:about="&om;LossModulus"> + <om:commonlyHasUnit rdf:resource="&om;decibar"/> + <om:commonlyHasUnit rdf:resource="&om;microbar"/> + <om:commonlyHasUnit rdf:resource="&om;millibar"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearLossModulus"> + <om:commonlyHasUnit rdf:resource="&om;decibar"/> + <om:commonlyHasUnit rdf:resource="&om;microbar"/> + <om:commonlyHasUnit rdf:resource="&om;millibar"/> + </owl:Class> + + <owl:Class rdf:about="&om;BulkModulus"> + <om:commonlyHasUnit rdf:resource="&om;decibar"/> + <om:commonlyHasUnit rdf:resource="&om;microbar"/> + <om:commonlyHasUnit rdf:resource="&om;millibar"/> + </owl:Class> + + <owl:Class rdf:about="&om;ModulusOfElasticity"> + <om:commonlyHasUnit rdf:resource="&om;decibar"/> + <om:commonlyHasUnit rdf:resource="&om;microbar"/> + <om:commonlyHasUnit rdf:resource="&om;millibar"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElasticityTensor"> + <om:commonlyHasUnit rdf:resource="&om;decibar"/> + <om:commonlyHasUnit rdf:resource="&om;microbar"/> + <om:commonlyHasUnit rdf:resource="&om;millibar"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearModulus"> + <om:commonlyHasUnit rdf:resource="&om;metreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;StorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;metreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;metreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;LossModulus"> + <om:commonlyHasUnit rdf:resource="&om;metreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearLossModulus"> + <om:commonlyHasUnit rdf:resource="&om;metreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;BulkModulus"> + <om:commonlyHasUnit rdf:resource="&om;metreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;ModulusOfElasticity"> + <om:commonlyHasUnit rdf:resource="&om;metreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElasticityTensor"> + <om:commonlyHasUnit rdf:resource="&om;metreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearModulus"> + <om:commonlyHasUnit rdf:resource="&om;centimetreOfMercury"/> + <om:commonlyHasUnit rdf:resource="&om;millimetreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;StorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;centimetreOfMercury"/> + <om:commonlyHasUnit rdf:resource="&om;millimetreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;centimetreOfMercury"/> + <om:commonlyHasUnit rdf:resource="&om;millimetreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;LossModulus"> + <om:commonlyHasUnit rdf:resource="&om;centimetreOfMercury"/> + <om:commonlyHasUnit rdf:resource="&om;millimetreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearLossModulus"> + <om:commonlyHasUnit rdf:resource="&om;centimetreOfMercury"/> + <om:commonlyHasUnit rdf:resource="&om;millimetreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;BulkModulus"> + <om:commonlyHasUnit rdf:resource="&om;centimetreOfMercury"/> + <om:commonlyHasUnit rdf:resource="&om;millimetreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;ModulusOfElasticity"> + <om:commonlyHasUnit rdf:resource="&om;centimetreOfMercury"/> + <om:commonlyHasUnit rdf:resource="&om;millimetreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElasticityTensor"> + <om:commonlyHasUnit rdf:resource="&om;centimetreOfMercury"/> + <om:commonlyHasUnit rdf:resource="&om;millimetreOfMercury"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearModulus"> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Standard"/> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Technical"/> + <om:commonlyHasUnit rdf:resource="&om;barye"/> + <om:commonlyHasUnit rdf:resource="&om;torr"/> + </owl:Class> + + <owl:Class rdf:about="&om;StorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Standard"/> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Technical"/> + <om:commonlyHasUnit rdf:resource="&om;barye"/> + <om:commonlyHasUnit rdf:resource="&om;torr"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearStorageModulus"> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Standard"/> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Technical"/> + <om:commonlyHasUnit rdf:resource="&om;barye"/> + <om:commonlyHasUnit rdf:resource="&om;torr"/> + </owl:Class> + + <owl:Class rdf:about="&om;LossModulus"> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Standard"/> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Technical"/> + <om:commonlyHasUnit rdf:resource="&om;barye"/> + <om:commonlyHasUnit rdf:resource="&om;torr"/> + </owl:Class> + + <owl:Class rdf:about="&om;ShearLossModulus"> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Standard"/> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Technical"/> + <om:commonlyHasUnit rdf:resource="&om;barye"/> + <om:commonlyHasUnit rdf:resource="&om;torr"/> + </owl:Class> + + <owl:Class rdf:about="&om;BulkModulus"> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Standard"/> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Technical"/> + <om:commonlyHasUnit rdf:resource="&om;barye"/> + <om:commonlyHasUnit rdf:resource="&om;torr"/> + </owl:Class> + + <owl:Class rdf:about="&om;ModulusOfElasticity"> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Standard"/> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Technical"/> + <om:commonlyHasUnit rdf:resource="&om;barye"/> + <om:commonlyHasUnit rdf:resource="&om;torr"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElasticityTensor"> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Standard"/> + <om:commonlyHasUnit rdf:resource="&om;atmosphere-Technical"/> + <om:commonlyHasUnit rdf:resource="&om;barye"/> + <om:commonlyHasUnit rdf:resource="&om;torr"/> + </owl:Class> + + <!-- Surface Tension Upper Ontology --> + + <owl:Class rdf:about="&om;SurfaceTension"> + <rdfs:label xml:lang="en">surface tension</rdfs:label> + <rdfs:label xml:lang="nl">oppervlaktespanning</rdfs:label> + <rdfs:comment xml:lang="en">Surface tension is an attractive property of the surface of a liquid.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>γ</om:symbol> + <om:alternativeSymbol>σ</om:alternativeSymbol> + </owl:Class> + + <!-- Dimension Ontologies --> + + <!-- Contents --> + + <!-- Surface Tension Dimension Ontology --> + + <!-- Surface Tension Dimension Ontology --> + + <om:Dimension rdf:about="&om;surfaceTension-Dimension"> + <rdfs:label xml:lang="en">surface tension dimension</rdfs:label> + <rdfs:label xml:lang="nl">oppervlaktespanningdimensie</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;SurfaceTension"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;surfaceTension-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Fluid Mechanics Dimensionless Numbers Ontology --> + + <!-- Contents --> + + <!-- Alfvén Number Upper Ontology --> + <!-- Cowling Number Upper Ontology --> + <!-- Euler Number Upper Ontology --> + <!-- First Cowling Number Upper Ontology --> + <!-- Fourier Number Upper Ontology --> + <!-- Fourier Number For Mass Transfer Upper Ontology --> + <!-- Froude Number Upper Ontology --> + <!-- Grashof Number Upper Ontology --> + <!-- Grashof Number For Mass Transfer Upper Ontology --> + <!-- Hartmann Number Upper Ontology --> + <!-- Knudsen Number Upper Ontology --> + <!-- Lewis Number Upper Ontology --> + <!-- Mach Number Upper Ontology --> + <!-- Magnetic Reynolds Number Upper Ontology --> + <!-- Nusselt Number Upper Ontology --> + <!-- Nusselt Number For Mass Transfer Upper Ontology --> + <!-- Péclet Number Upper Ontology --> + <!-- Péclet Number For Mass Transfer Upper Ontology --> + <!-- Prandtl Number Upper Ontology --> + <!-- Rayleigh Number Upper Ontology --> + <!-- Reynolds Number Upper Ontology --> + <!-- Schmidt Number Upper Ontology --> + <!-- Stantont Number Upper Ontology --> + <!-- Stanton Number For Mass Transfer Upper Ontology --> + <!-- Strouhal Number Upper Ontology --> + <!-- Weber Number Upper Ontology --> + + <!-- Dimensionless Parameters Ontology --> + + <om:ApplicationArea rdf:about="&om;fluidMechanicsDimensionlessNumbers"> + <rdfs:label xml:lang="en">fluid mechanics dimensionless numbers</rdfs:label> + <rdfs:label xml:lang="nl">vloeistofmechanica dimensieloze getallen</rdfs:label> + <!-- <om:uses_application_area rdf:resource="&om;space_and_time"/> --> + <om:usesQuantity rdf:resource="&om;AlfvenNumber"/> + <om:usesQuantity rdf:resource="&om;CowlingNumber"/> + <om:usesQuantity rdf:resource="&om;EulerNumber"/> + <om:usesQuantity rdf:resource="&om;FirstCowlingNumber"/> + <om:usesQuantity rdf:resource="&om;FourierNumber"/> + <om:usesQuantity rdf:resource="&om;FourierNumberForMassTransfer"/> + <om:usesQuantity rdf:resource="&om;FroudeNumber"/> + <om:usesQuantity rdf:resource="&om;GrashofNumber"/> + <om:usesQuantity rdf:resource="&om;GrashofNumberForMassTransfer"/> + <om:usesQuantity rdf:resource="&om;HartmannNumber"/> + <om:usesQuantity rdf:resource="&om;KnudsenNumber"/> + <om:usesQuantity rdf:resource="&om;LewisNumber"/> + <om:usesQuantity rdf:resource="&om;MachNumber"/> + <om:usesQuantity rdf:resource="&om;MagneticReynoldsNumber"/> + <om:usesQuantity rdf:resource="&om;NusseltNumber"/> + <om:usesQuantity rdf:resource="&om;NusseltNumberForMassTransfer"/> + <om:usesQuantity rdf:resource="&om;PecletNumber"/> + <om:usesQuantity rdf:resource="&om;PecletNumberForMassTransfer"/> + <om:usesQuantity rdf:resource="&om;PrandtlNumber"/> + <om:usesQuantity rdf:resource="&om;RayleighNumber"/> + <om:usesQuantity rdf:resource="&om;ReynoldsNumber"/> + <om:usesQuantity rdf:resource="&om;SchmidtNumber"/> + <om:usesQuantity rdf:resource="&om;StantonNumber"/> + <om:usesQuantity rdf:resource="&om;StantonNumberForMassTransfer"/> + <om:usesQuantity rdf:resource="&om;StrouhalNumber"/> + <om:usesQuantity rdf:resource="&om;WeberNumber"/> + </om:ApplicationArea> + + <!-- Alfvén Number Upper Ontology --> + + <owl:Class rdf:about="&om;AlfvenNumber"> + <rdfs:label xml:lang="en">Alfvén number</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Al</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;AlfvenNumberUnit"> + <rdfs:label xml:lang="en">Alfvén number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AlfvenNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;AlfvenNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;AlfvenNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Cowling Number Upper Ontology --> + + <owl:Class rdf:about="&om;CowlingNumber"> + <rdfs:label xml:lang="en">Cowling number</rdfs:label> + <om:alternativeLabel xml:lang="en">second Cowling number</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Co</om:symbol> + <om:alternativeSymbol>Co2</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;CowlingNumberUnit"> + <rdfs:label xml:lang="en">Cowling number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;CowlingNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;CowlingNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;CowlingNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Euler Number Upper Ontology --> + + <owl:Class rdf:about="&om;EulerNumber"> + <rdfs:label xml:lang="en">Euler number</rdfs:label> + <rdfs:label xml:lang="nl">getal van Euler</rdfs:label> + <rdfs:comment xml:lang="en">The Euler number is a dimensionless number that expresses the relationship between a local pressure drop e.g. over a restriction and the kinetic energy per unit volume.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Eu</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;EulerNumberUnit"> + <rdfs:label xml:lang="en">Euler number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;EulerNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;EulerNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;EulerNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- First Cowling Number Upper Ontology --> + + <owl:Class rdf:about="&om;FirstCowlingNumber"> + <rdfs:label xml:lang="en">first Cowling number</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Co_1</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;FirstCowlingNumberUnit"> + <rdfs:label xml:lang="en">first Cowling number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;FirstCowlingNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;FirstCowlingNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;FirstCowlingNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Fourier Number Upper Ontology --> + + <owl:Class rdf:about="&om;FourierNumber"> + <rdfs:label xml:lang="en">Fourier number</rdfs:label> + <rdfs:label xml:lang="nl">getal van Fourier</rdfs:label> + <rdfs:comment xml:lang="en">The Fourier number is a dimensionless number that characterises heat conduction. It is the ratio of heat conduction rate to rate of thermal energy storage. The Fourier number is a dimensionless time.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Fo</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;FourierNumberUnit"> + <rdfs:label xml:lang="en">Fourier number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;FourierNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;FourierNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;FourierNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Fourier Number For Mass Transfer Upper Ontology --> + + <owl:Class rdf:about="&om;FourierNumberForMassTransfer"> + <rdfs:label xml:lang="en">Fourier number for mass transfer</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Fo*</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;FourierNumberForMassTransferUnit"> + <rdfs:label xml:lang="en">Fourier number for mass transfer unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;FourierNumberForMassTransfer"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;FourierNumberForMassTransferUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;FourierNumberForMassTransfer"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Froude Number Upper Ontology --> + + <owl:Class rdf:about="&om;FroudeNumber"> + <rdfs:label xml:lang="en">Froude number</rdfs:label> + <rdfs:label xml:lang="nl">getal van Froude</rdfs:label> + <rdfs:comment xml:lang="en">The Froude number is a dimensionless number that compares inertial and gravitational forces. It may be used to quantify the resistance of an object moving through water, and compare objects of different sizes.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Fr</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;FroudeNumberUnit"> + <rdfs:label xml:lang="en">Froude number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;FroudeNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;FroudeNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;FroudeNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Grashof Number Upper Ontology --> + + <owl:Class rdf:about="&om;GrashofNumber"> + <rdfs:label xml:lang="en">Grashof number</rdfs:label> + <rdfs:label xml:lang="nl">getal van Grashof</rdfs:label> + <rdfs:comment xml:lang="en">The Grashof number is a dimensionless number that approximates the ratio of buoyancy to viscous force that acts on a fluid.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Gr</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;GrashofNumberUnit"> + <rdfs:label xml:lang="en">Grashof number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;GrashofNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;GrashofNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;GrashofNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Grashof Number For Mass Transfer Upper Ontology --> + + <owl:Class rdf:about="&om;GrashofNumberForMassTransfer"> + <rdfs:label xml:lang="en">Grashof number for mass transfer</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Gr*</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;GrashofNumberForMassTransferUnit"> + <rdfs:label xml:lang="en">Grashof number for mass transfer unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;GrashofNumberForMassTransfer"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;GrashofNumberForMassTransferUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;GrashofNumberForMassTransfer"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Hartmann Number Upper Ontology --> + + <owl:Class rdf:about="&om;HartmannNumber"> + <rdfs:label xml:lang="en">Hartmann number</rdfs:label> + <rdfs:label xml:lang="nl">getal van Hartmann</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Ha</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;HartmannNumberUnit"> + <rdfs:label xml:lang="en">Hartmann number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;HartmannNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;HartmannNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;HartmannNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Knudsen Number Upper Ontology --> + + <owl:Class rdf:about="&om;KnudsenNumber"> + <rdfs:label xml:lang="en">Knudsen number</rdfs:label> + <rdfs:label xml:lang="nl">getal van Knudsen</rdfs:label> + <rdfs:comment xml:lang="en">The Knudsen number is a dimensionless number defined as the ratio of the molecular mean free path length to a representative physical length scale.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Kn</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;KnudsenNumberUnit"> + <rdfs:label xml:lang="en">Knudsen number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;KnudsenNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;KnudsenNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;KnudsenNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Lewis Number Upper Ontology --> + + <owl:Class rdf:about="&om;LewisNumber"> + <rdfs:label xml:lang="en">Lewis number</rdfs:label> + <rdfs:label xml:lang="nl">getal van Lewis</rdfs:label> + <rdfs:comment xml:lang="en">The Lewis number is a dimensionless number defined as the ratio of thermal diffusivity to mass diffusivity.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Le</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;LewisNumberUnit"> + <rdfs:label xml:lang="en">Lewis number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;LewisNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;LewisNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;LewisNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Mach Number Upper Ontology --> + + <owl:Class rdf:about="&om;MachNumber"> + <rdfs:label xml:lang="en">Mach number</rdfs:label> + <rdfs:label xml:lang="nl">Machgetal</rdfs:label> + <rdfs:comment xml:lang="en">The Mach number is the speed of an object that moves through air, or any fluid substance, divided by the speed of sound as it is in that substance.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Ma</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;MachNumberUnit"> + <rdfs:label xml:lang="en">Mach number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MachNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MachNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;MachNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Magnetic Reynolds Number Upper Ontology --> + + <owl:Class rdf:about="&om;MagneticReynoldsNumber"> + <rdfs:label xml:lang="en">magnetic Reynolds number</rdfs:label> + <rdfs:label xml:lang="nl">magnetisch getal van Reynolds</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Rm</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;MagneticReynoldsNumberUnit"> + <rdfs:label xml:lang="en">magnetic Reynolds number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MagneticReynoldsNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MagneticReynoldsNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;MagneticReynoldsNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Nusselt Number Upper Ontology --> + + <owl:Class rdf:about="&om;NusseltNumber"> + <rdfs:label xml:lang="en">Nusselt number</rdfs:label> + <rdfs:label xml:lang="nl">getal van Nusselt</rdfs:label> + <rdfs:comment xml:lang="en">The Nusselt number is the ratio of convective to conductive heat transfer across (normal to) the boundary.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Nu</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;NusseltNumberUnit"> + <rdfs:label xml:lang="en">Nusselt number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;NusseltNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;NusseltNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;NusseltNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Nusselt Number For Mass Transfer Upper Ontology --> + + <owl:Class rdf:about="&om;NusseltNumberForMassTransfer"> + <rdfs:label xml:lang="en">Nusselt number for mass transfer</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Nu*</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;NusseltNumberForMassTransferUnit"> + <rdfs:label xml:lang="en">Nusselt number for mass transfer unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;NusseltNumberForMassTransfer"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;NusseltNumberForMassTransferUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;NusseltNumberForMassTransfer"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Péclet Number Upper Ontology --> + + <owl:Class rdf:about="&om;PecletNumber"> + <rdfs:label xml:lang="en">Péclet number</rdfs:label> + <rdfs:label xml:lang="nl">getal van Péclet</rdfs:label> + <rdfs:comment xml:lang="en">The Péclet number is a dimensionless number that relates the rate of advection of a flow to its rate of diffusion, often thermal diffusion.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Pe</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;PecletNumberUnit"> + <rdfs:label xml:lang="en">Péclet number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;PecletNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;PecletNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;PecletNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Péclet Number For Mass Transfer Upper Ontology --> + + <owl:Class rdf:about="&om;PecletNumberForMassTransfer"> + <rdfs:label xml:lang="en">Péclet number for mass transfer</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Pe*</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;PecletNumberForMassTransferUnit"> + <rdfs:label xml:lang="en">Péclet number for mass transfer unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;PecletNumberForMassTransfer"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;PecletNumberForMassTransferUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;PecletNumberForMassTransfer"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Prandtl Number Upper Ontology --> + + <owl:Class rdf:about="&om;PrandtlNumber"> + <rdfs:label xml:lang="en">Prandtl number</rdfs:label> + <rdfs:label xml:lang="nl">getal van Prandtl</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Pr</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;PrandtlNumberUnit"> + <rdfs:label xml:lang="en">Prandtl number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;PrandtlNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;PrandtlNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;PrandtlNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Rayleigh Number Upper Ontology --> + + <owl:Class rdf:about="&om;RayleighNumber"> + <rdfs:label xml:lang="en">Rayleigh number</rdfs:label> + <rdfs:label xml:lang="nl">getal van Rayleigh</rdfs:label> + <rdfs:comment xml:lang="en">The Rayleigh number for a fluid is a dimensionless number associated with buoyancy driven flow.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Ra</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;RayleighNumberUnit"> + <rdfs:label xml:lang="en">Rayleigh number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;RayleighNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;RayleighNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;RayleighNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Reynolds Number Upper Ontology --> + + <owl:Class rdf:about="&om;ReynoldsNumber"> + <rdfs:label xml:lang="en">Reynolds number</rdfs:label> + <rdfs:label xml:lang="nl">getal van Reynolds</rdfs:label> + <rdfs:comment xml:lang="en">The Reynolds number is a dimensionless number that gives a measure of the ratio of inertial forces to viscous forces and, consequently, quantifies the relative importance of these two types of forces for given flow conditions.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Re</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;ReynoldsNumberUnit"> + <rdfs:label xml:lang="en">Reynolds number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ReynoldsNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ReynoldsNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;ReynoldsNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Schmidt Number Upper Ontology --> + + <owl:Class rdf:about="&om;SchmidtNumber"> + <rdfs:label xml:lang="en">Schmidt number</rdfs:label> + <rdfs:label xml:lang="nl">getal van Schmidt</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Sc</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;SchmidtNumberUnit"> + <rdfs:label xml:lang="en">Schmidt number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;SchmidtNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;SchmidtNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;SchmidtNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Stanton Number Upper Ontology --> + + <owl:Class rdf:about="&om;StantonNumber"> + <rdfs:label xml:lang="en">Stanton number</rdfs:label> + <rdfs:label xml:lang="nl">getal van Stanton</rdfs:label> + <rdfs:comment xml:lang="en">The Stanton number is a dimensionless number that measures the ratio of heat transferred into a fluid to the thermal capacity of fluid.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>St</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;StantonNumberUnit"> + <rdfs:label xml:lang="en">Stanton number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;StantonNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;StantonNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;StantonNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Stanton Number For Mass Transfer Upper Ontology --> + + <owl:Class rdf:about="&om;StantonNumberForMassTransfer"> + <rdfs:label xml:lang="en">Stanton number for mass transfer</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>St*</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;StantonNumberForMassTransferUnit"> + <rdfs:label xml:lang="en">Stanton number for mass transfer unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;StantonNumberForMassTransfer"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;StantonNumberForMassTransferUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;StantonNumberForMassTransfer"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Strouhal Number Upper Ontology --> + + <owl:Class rdf:about="&om;StrouhalNumber"> + <rdfs:label xml:lang="en">Strouhal number</rdfs:label> + <rdfs:label xml:lang="nl">getal van Strouhal</rdfs:label> + <rdfs:comment xml:lang="en">The Strouhal number is a dimensionless number that describes oscillating flow mechanisms.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Sr</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;StrouhalNumberUnit"> + <rdfs:label xml:lang="en">Strouhal number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;StrouhalNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;StrouhalNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;StrouhalNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Weber Number Upper Ontology --> + + <owl:Class rdf:about="&om;WeberNumber"> + <rdfs:label xml:lang="en">Weber number</rdfs:label> + <rdfs:label xml:lang="nl">getal van Weber</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>We</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;WeberNumberUnit"> + <rdfs:label xml:lang="en">Weber number unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;WeberNumber"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;WeberNumberUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;WeberNumber"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Chemical Physics Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Unit of Measure Ontologies --> + <!-- Dimension Ontologies --> + + <!-- Chemical Physics Ontology --> + + <om:ApplicationArea rdf:about="&om;chemicalPhysics"> + <rdfs:label xml:lang="en">chemical physics</rdfs:label> + <rdfs:label xml:lang="nl">fysische chemie</rdfs:label> + <!-- <om:uses_application_area rdf:resource="&om;space_and_time"/> --> + <om:usesQuantity rdf:resource="&om;AmountOfSubstance"/> + <om:usesQuantity rdf:resource="&om;AmountOfSubstanceConcentration"/> + <om:usesQuantity rdf:resource="&om;AmountOfSubstanceFraction"/> + <om:usesQuantity rdf:resource="&om;MolarEnergy"/> + <om:usesQuantity rdf:resource="&om;ResonanceEnergy"/> + <om:usesQuantity rdf:resource="&om;MolarEntropy"/> + <om:usesQuantity rdf:resource="&om;MolarHeatCapacity"/> + <om:usesQuantity rdf:resource="&om;AmountOfSubstanceFlow"/> + <om:usesQuantity rdf:resource="&om;Molality"/> + <om:usesQuantity rdf:resource="&om;MolarMass"/> + <om:usesQuantity rdf:resource="&om;MolarVolume"/> + <om:usesQuantity rdf:resource="&om;AmountOfSubstanceFractionFlow"/> + <om:usesUnit rdf:resource="&om;one"/> + <om:usesUnit rdf:resource="&om;partsPerMillion"/> + <om:usesUnit rdf:resource="&om;percent"/> + <om:usesUnit rdf:resource="&om;mole"/> + <om:usesUnit rdf:resource="&om;attomole"/> + <om:usesUnit rdf:resource="&om;centimole"/> + <om:usesUnit rdf:resource="&om;decamole"/> + <om:usesUnit rdf:resource="&om;decimole"/> + <om:usesUnit rdf:resource="&om;examole"/> + <om:usesUnit rdf:resource="&om;femtomole"/> + <om:usesUnit rdf:resource="&om;gigamole"/> + <om:usesUnit rdf:resource="&om;hectomole"/> + <om:usesUnit rdf:resource="&om;kilomole"/> + <om:usesUnit rdf:resource="&om;megamole"/> + <om:usesUnit rdf:resource="&om;micromole"/> + <om:usesUnit rdf:resource="&om;millimole"/> + <om:usesUnit rdf:resource="&om;nanomole"/> + <om:usesUnit rdf:resource="&om;petamole"/> + <om:usesUnit rdf:resource="&om;picomole"/> + <om:usesUnit rdf:resource="&om;teramole"/> + <om:usesUnit rdf:resource="&om;molePerCubicmetre"/> + <om:usesUnit rdf:resource="&om;molePerLitre"/> + <om:usesUnit rdf:resource="&om;attomolePerLitre"/> + <om:usesUnit rdf:resource="&om;centimolePerLitre"/> + <om:usesUnit rdf:resource="&om;decamolePerLitre"/> + <om:usesUnit rdf:resource="&om;decimolePerLitre"/> + <om:usesUnit rdf:resource="&om;examolePerLitre"/> + <om:usesUnit rdf:resource="&om;femtomolePerLitre"/> + <om:usesUnit rdf:resource="&om;gigamolePerLitre"/> + <om:usesUnit rdf:resource="&om;hectomolePerLitre"/> + <om:usesUnit rdf:resource="&om;kilomolePerLitre"/> + <om:usesUnit rdf:resource="&om;megamolePerLitre"/> + <om:usesUnit rdf:resource="&om;micromolePerLitre"/> + <om:usesUnit rdf:resource="&om;millimolePerLitre"/> + <om:usesUnit rdf:resource="&om;nanomolePerLitre"/> + <om:usesUnit rdf:resource="&om;petamolePerLitre"/> + <om:usesUnit rdf:resource="&om;picomolePerLitre"/> + <om:usesUnit rdf:resource="&om;teramolePerLitre"/> + <om:usesUnit rdf:resource="&om;molePerAttolitre"/> + <om:usesUnit rdf:resource="&om;molePerCentilitre"/> + <om:usesUnit rdf:resource="&om;molePerDecalitre"/> + <om:usesUnit rdf:resource="&om;molePerDecilitre"/> + <om:usesUnit rdf:resource="&om;molePerExalitre"/> + <om:usesUnit rdf:resource="&om;molePerFemtolitre"/> + <om:usesUnit rdf:resource="&om;molePerGigalitre"/> + <om:usesUnit rdf:resource="&om;molePerHectolitre"/> + <om:usesUnit rdf:resource="&om;molePerKilolitre"/> + <om:usesUnit rdf:resource="&om;molePerMegalitre"/> + <om:usesUnit rdf:resource="&om;molePerMicrolitre"/> + <om:usesUnit rdf:resource="&om;molePerMillilitre"/> + <om:usesUnit rdf:resource="&om;molePerNanolitre"/> + <om:usesUnit rdf:resource="&om;molePerPetalitre"/> + <om:usesUnit rdf:resource="&om;molePerPicolitre"/> + <om:usesUnit rdf:resource="&om;molePerTeralitre"/> + <om:usesUnit rdf:resource="&om;molar"/> + <om:usesUnit rdf:resource="&om;attomolar"/> + <om:usesUnit rdf:resource="&om;femtomolar"/> + <om:usesUnit rdf:resource="&om;megamolar"/> + <om:usesUnit rdf:resource="&om;micromolar"/> + <om:usesUnit rdf:resource="&om;millimolar"/> + <om:usesUnit rdf:resource="&om;nanomolar"/> + <om:usesUnit rdf:resource="&om;picomolar"/> + <om:usesUnit rdf:resource="&om;molePerMole"/> + <om:usesUnit rdf:resource="&om;micromolePerMole"/> + <om:usesUnit rdf:resource="&om;joulePerMole"/> + <om:usesUnit rdf:resource="&om;joulePerKelvinMole"/> + <om:usesUnit rdf:resource="&om;molePerKilogram"/> + <om:usesUnit rdf:resource="&om;kilogramPerMole"/> + <om:usesUnit rdf:resource="&om;cubicMetrePerMole"/> + <om:usesUnit rdf:resource="&om;litrePerMole"/> + <om:usesUnit rdf:resource="&om;moleMicrometre"/> + <om:usesUnit rdf:resource="&om;moleMicrometreReciprocalSquareCentimetre"/> + <om:usesUnit rdf:resource="&om;moleMicrometreReciprocalSquareCentimetreReciprocalSecond-Time"/> + <om:usesUnit rdf:resource="&om;molePerMetre"/> + <om:usesUnit rdf:resource="&om;attomolePerMetre"/> + <om:usesUnit rdf:resource="&om;femtomolePerMetre"/> + <om:usesUnit rdf:resource="&om;picomolePerMetre"/> + <om:usesUnit rdf:resource="&om;nanomolePerMetre"/> + <om:usesUnit rdf:resource="&om;micromolePerMetre"/> + <om:usesUnit rdf:resource="&om;millimolePerMetre"/> + <om:usesUnit rdf:resource="&om;centimolePerMetre"/> + <om:usesUnit rdf:resource="&om;decimolePerMetre"/> + <om:usesUnit rdf:resource="&om;decamolePerMetre"/> + <om:usesUnit rdf:resource="&om;hectomolePerMetre"/> + <om:usesUnit rdf:resource="&om;kilomolePerMetre"/> + <om:usesUnit rdf:resource="&om;megamolePerMetre"/> + <om:usesUnit rdf:resource="&om;gigamolePerMetre"/> + <om:usesUnit rdf:resource="&om;teramolePerMetre"/> + <om:usesUnit rdf:resource="&om;petamolePerMetre"/> + <om:usesUnit rdf:resource="&om;examolePerMetre"/> + <om:usesUnit rdf:resource="&om;molePerYoctometre"/> + <om:usesUnit rdf:resource="&om;molePerZeptometre"/> + <om:usesUnit rdf:resource="&om;molePerAttometre"/> + <om:usesUnit rdf:resource="&om;molePerFemtometre"/> + <om:usesUnit rdf:resource="&om;molePerPicometre"/> + <om:usesUnit rdf:resource="&om;molePerNanometre"/> + <om:usesUnit rdf:resource="&om;molePerMicrometre"/> + <om:usesUnit rdf:resource="&om;molePerMillimetre"/> + <om:usesUnit rdf:resource="&om;molePerCentimetre"/> + <om:usesUnit rdf:resource="&om;molePerDecimetre"/> + <om:usesUnit rdf:resource="&om;molePerDecametre"/> + <om:usesUnit rdf:resource="&om;molePerHectometre"/> + <om:usesUnit rdf:resource="&om;molePerKilometre"/> + <om:usesUnit rdf:resource="&om;molePermegametre"/> + <om:usesUnit rdf:resource="&om;molePerGigametre"/> + <om:usesUnit rdf:resource="&om;molePerTerametre"/> + <om:usesUnit rdf:resource="&om;molePerPetametre"/> + <om:usesUnit rdf:resource="&om;molePerExametre"/> + <om:usesUnit rdf:resource="&om;molePerZettametre"/> + <om:usesUnit rdf:resource="&om;molePerYottametre"/> + <om:usesUnit rdf:resource="&om;kelvinMole"/> + <om:usesUnit rdf:resource="&om;micromolePerSecond-TimeGram"/> + </om:ApplicationArea> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Amount of Substance Upper Ontology --> + <!-- Amount of Substance Concentration Upper Ontology --> + <!-- Amount of Substance Fraction Upper Ontology --> + <!-- Molar Energy Upper Ontology --> + <!-- Molar Energy Subclass Upper Ontology --> + <!-- Molar Entropy Upper Ontology --> + <!-- Molar Heat Capacity Upper Ontology --> + <!-- Gas Constant upper Ontology --> + <!-- Amount of Substance Flow Upper Ontology --> + <!-- Molality Upper Ontology --> + <!-- Molar Mass Upper Ontology --> + <!-- Molar Volume Upper Ontology --> + <!-- Amount of Substance Fraction Flow Upper Ontology --> + + <!-- Amount of Substance Upper Ontology --> + + <owl:Class rdf:about="&om;AmountOfSubstance"> + <rdfs:label xml:lang="en">amount of substance</rdfs:label> + <rdfs:label xml:lang="nl">stofhoeveelheid</rdfs:label> + <rdfs:comment xml:lang="en">Amount of substance is the number of elementary entities such as atoms, molecules, electrons, particles, etc. present in a phenomenon. It is a base quantity in the International System of Units.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>n</om:symbol> + </owl:Class> + + <!-- Amount of Substance Concentration Upper Ontology --> + + <owl:Class rdf:about="&om;AmountOfSubstanceConcentration"> + <rdfs:label xml:lang="en">amount of substance concentration</rdfs:label> + <om:alternativeLabel xml:lang="en">molar concentration</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">molaire concentratie</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>C</om:symbol> + </owl:Class> + + <!-- Amount of Substance Fraction Upper Ontology --> + + <owl:Class rdf:about="&om;AmountOfSubstanceFraction"> + <rdfs:label xml:lang="en">amount of substance fraction</rdfs:label> + <om:alternativeLabel xml:lang="en">amount-of-substance fraction</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">mole fraction</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">molfractie</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>x</om:symbol> + <om:alternativeSymbol>y</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;AmountOfSubstanceFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;AmountOfSubstanceFraction"> + <om:commonlyHasUnit rdf:resource="&om;partsPerMillion"/> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;AmountOfSubstanceFraction"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Molar Energy Upper Ontology --> + + <owl:Class rdf:about="&om;MolarEnergy"> + <rdfs:label xml:lang="en">molar energy</rdfs:label> + <rdfs:label xml:lang="nl">molaire energie</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Molar Energy Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;ResonanceEnergy"> + <rdfs:label xml:lang="en">resonance energy</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;MolarEnergy"/> + </owl:Class> + + <!-- Molar Entropy Upper Ontology --> + + <owl:Class rdf:about="&om;MolarEntropy"> + <rdfs:label xml:lang="en">molar entropy</rdfs:label> + <rdfs:label xml:lang="nl">molaire entropie</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Molar Heat Capacity Upper Ontology --> + + <owl:Class rdf:about="&om;MolarHeatCapacity"> + <rdfs:label xml:lang="en">molar heat capacity</rdfs:label> + <rdfs:label xml:lang="nl">molaire warmtecapaciteit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Gas Constant upper Ontology --> + + <owl:Class rdf:about="&om;GasConstant"> + <rdfs:label xml:lang="en">gas constant</rdfs:label> + <rdfs:label xml:lang="nl">gasconstante</rdfs:label> + <om:alternativeLabel xml:lang="en">universal gas constant</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">universele gasconstante</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>R</om:symbol> + </owl:Class> + + <!-- Amount of Substance Flow Upper Ontology --> + + <owl:Class rdf:about="&om;AmountOfSubstanceFlow"> + <rdfs:label xml:lang="en">amount of substance flow</rdfs:label> + <om:alternativeLabel xml:lang="en">amount-of-substance flow</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">molar flow</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Molality Upper Ontology --> + + <owl:Class rdf:about="&om;Molality"> + <rdfs:label xml:lang="en">molality</rdfs:label> + <rdfs:label xml:lang="nl">molaliteit</rdfs:label> + <om:alternativeLabel xml:lang="en">molality of solution</om:alternativeLabel> + <rdfs:comment xml:lang="en">Molality is the number of moles of solute per kilogram of solvent.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>b</om:symbol> + <om:alternativeSymbol>m</om:alternativeSymbol> + </owl:Class> + + <!-- Molar Mass Upper Ontology --> + + <owl:Class rdf:about="&om;MolarMass"> + <rdfs:label xml:lang="en">molar mass</rdfs:label> + <rdfs:label xml:lang="nl">molaire massa</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>M</om:symbol> + </owl:Class> + + <!-- Molar Volume Upper Ontology --> + + <owl:Class rdf:about="&om;MolarVolume"> + <rdfs:label xml:lang="en">molar volume</rdfs:label> + <rdfs:label xml:lang="nl">molair volume</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>V_m</om:symbol> + </owl:Class> + + <!-- Amount of Substance Fraction Flow Upper Ontology --> + + <owl:Class rdf:about="&om;AmountOfSubstanceFractionFlow"> + <rdfs:label xml:lang="en">amount of substance fraction flow</rdfs:label> + <om:alternativeLabel xml:lang="en">amount-of-substance fraction flow</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">mole fraction flow</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Unit of Measure Ontologies --> + + <!-- Contents --> + + <!-- Mole Ontology --> + <!-- Mole Multiples and Submultiples Ontology --> + <!-- One Ontology --> + <!-- Quantity of Dimension One Unit Ontology --> + <!-- Mole Per Cubic Metre Ontology --> + <!-- Mole Per Litre Ontology --> + <!-- Mole Per Litre Multiples and Submultiples Ontology --> + <!-- Molar Ontology --> + <!-- Molar Multiples and Submultiples Ontology --> + <!-- Mole Per Mole Ontology --> + <!-- Joule Per Mole Ontology --> + <!-- Joule Per Kelvin Mole Ontology --> + <!-- Mole Per Kilogram Ontology --> + <!-- Kilogram Per Mole Ontology --> + <!-- Cubic Metre Per Mole Ontology --> + <!-- Litre Per Mole Ontology --> + <!-- Mole Micrometre Ontology --> + <!-- Mole Micrometre Reciprocal Square Centimetre Ontology --> + <!-- Mole Micrometre Reciprocal Square Centimetre Reciprocal Second Ontology --> + <!-- Mole Micrometre Reciprocal Square Centimetre Reciprocal Second Reciprocal Atmosphere Ontology --> + <!-- Mole Per Metre Ontology --> + <!-- Mole Per Metre Multiples and Submultiples Ontology --> + <!-- Kelvin Mole Ontology --> + <!-- Micromole Per Second Gram Ontology --> + <!-- Nanomole Per Hour Millilitre Ontology --> + + <!-- Mole Ontology --> + + <om:Unit rdf:about="&om;mole"> + <rdfs:label xml:lang="en">mole</rdfs:label> + <rdfs:label xml:lang="nl">mol</rdfs:label> + <om:symbol>mol</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:Unit> + + <owl:Thing rdf:about="&om;systemThatContainsAsManyElementaryEntitiesAsThereAreAtomsIn0.012KilogramOfCarbon12"> + <rdfs:label xml:lang="en">system that contains as many elementary entities as there are atoms in 0.012 kilogram of carbon 122</rdfs:label> + </owl:Thing> + + <AmountOfSubstance rdf:about="&om;amountOfSubstanceOfASystemThatContainsAsManyElementaryEntitiesAsThereAreAtomsIn0.012KilogramOfCarbon12"> + <rdfs:label xml:lang="en">amount of substance of a system that contains as many elementary entities as there are atoms in 0.012 kilogram of carbon 12</rdfs:label> + <om:hasPhenomenon rdf:resource="&om;systemThatContainsAsManyElementaryEntitiesAsThereAreAtomsIn0.012KilogramOfCarbon12"/> + </AmountOfSubstance> + + <om:Unit rdf:about="&om;mole"> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:hasQuantity rdf:resource="&om;amountOfSubstanceOfASystemThatContainsAsManyElementaryEntitiesAsThereAreAtomsIn0.012KilogramOfCarbon12"/> + </om:Unit> + + <owl:Class rdf:about="&om;AmountOfSubstance"> + <om:commonlyHasUnit rdf:resource="&om;mole"/> + </owl:Class> + + <owl:Class rdf:about="&om;AmountOfSubstanceUnit"> + <rdfs:label xml:lang="en">amount of substance unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;mole"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedMole"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AmountOfSubstance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;AmountOfSubstanceUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Mole Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctomole"> + <rdfs:label xml:lang="en">yoctomole</rdfs:label> + <rdfs:label xml:lang="nl">yoctomol</rdfs:label> + <om:symbol>ymol</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptomole"> + <rdfs:label xml:lang="en">zeptomole</rdfs:label> + <rdfs:label xml:lang="nl">zeptomol</rdfs:label> + <om:symbol>zmol</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attomole"> + <rdfs:label xml:lang="en">attomole</rdfs:label> + <rdfs:label xml:lang="nl">attomol</rdfs:label> + <om:symbol>amol</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtomole"> + <rdfs:label xml:lang="en">femtomole</rdfs:label> + <rdfs:label xml:lang="nl">femtomol</rdfs:label> + <om:symbol>fmol</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picomole"> + <rdfs:label xml:lang="en">picomole</rdfs:label> + <rdfs:label xml:lang="nl">picomol</rdfs:label> + <om:symbol>pmol</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanomole"> + <rdfs:label xml:lang="en">nanomole</rdfs:label> + <rdfs:label xml:lang="nl">nanomol</rdfs:label> + <om:symbol>nmol</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;micromole"> + <rdfs:label xml:lang="en">micromole</rdfs:label> + <rdfs:label xml:lang="nl">micromol</rdfs:label> + <om:symbol>μmol</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millimole"> + <rdfs:label xml:lang="en">millimole</rdfs:label> + <rdfs:label xml:lang="nl">millimol</rdfs:label> + <om:symbol>mmol</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centimole"> + <rdfs:label xml:lang="en">centimole</rdfs:label> + <rdfs:label xml:lang="nl">centimol</rdfs:label> + <om:symbol>cmol</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decimole"> + <rdfs:label xml:lang="en">decimole</rdfs:label> + <rdfs:label xml:lang="nl">decimol</rdfs:label> + <om:symbol>dmol</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decamole"> + <rdfs:label xml:lang="en">decamole</rdfs:label> + <rdfs:label xml:lang="nl">decamol</rdfs:label> + <om:symbol>damol</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectomole"> + <rdfs:label xml:lang="en">hectomole</rdfs:label> + <rdfs:label xml:lang="nl">hectomol</rdfs:label> + <om:symbol>hmol</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilomole"> + <rdfs:label xml:lang="en">kilomole</rdfs:label> + <rdfs:label xml:lang="nl">kilomol</rdfs:label> + <om:symbol>kmol</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megamole"> + <rdfs:label xml:lang="en">megamole</rdfs:label> + <rdfs:label xml:lang="nl">megamol</rdfs:label> + <om:symbol>Mmol</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigamole"> + <rdfs:label xml:lang="en">gigamole</rdfs:label> + <rdfs:label xml:lang="nl">gigamol</rdfs:label> + <om:symbol>Gmol</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;teramole"> + <rdfs:label xml:lang="en">teramole</rdfs:label> + <rdfs:label xml:lang="nl">teramol</rdfs:label> + <om:symbol>Tmol</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petamole"> + <rdfs:label xml:lang="en">petamole</rdfs:label> + <rdfs:label xml:lang="nl">petamol</rdfs:label> + <om:symbol>Pmol</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;examole"> + <rdfs:label xml:lang="en">examole</rdfs:label> + <rdfs:label xml:lang="nl">examol</rdfs:label> + <om:symbol>Emol</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettamole"> + <rdfs:label xml:lang="en">zettamole</rdfs:label> + <rdfs:label xml:lang="nl">zettamol</rdfs:label> + <om:symbol>Zmol</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottamole"> + <rdfs:label xml:lang="en">yottamole</rdfs:label> + <rdfs:label xml:lang="nl">yottamol</rdfs:label> + <om:symbol>Ymol</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;amountOfSubstance-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedMole"> + <rdfs:label xml:lang="en">prefixed mole</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;mole"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AmountOfSubstance"> + <om:commonlyHasUnit rdf:resource="&om;attomole"/> + <om:commonlyHasUnit rdf:resource="&om;centimole"/> + <om:commonlyHasUnit rdf:resource="&om;decamole"/> + <om:commonlyHasUnit rdf:resource="&om;decimole"/> + <om:commonlyHasUnit rdf:resource="&om;examole"/> + <om:commonlyHasUnit rdf:resource="&om;femtomole"/> + <om:commonlyHasUnit rdf:resource="&om;gigamole"/> + <om:commonlyHasUnit rdf:resource="&om;hectomole"/> + <om:commonlyHasUnit rdf:resource="&om;kilomole"/> + <om:commonlyHasUnit rdf:resource="&om;megamole"/> + <om:commonlyHasUnit rdf:resource="&om;micromole"/> + <om:commonlyHasUnit rdf:resource="&om;millimole"/> + <om:commonlyHasUnit rdf:resource="&om;nanomole"/> + <om:commonlyHasUnit rdf:resource="&om;petamole"/> + <om:commonlyHasUnit rdf:resource="&om;picomole"/> + <om:commonlyHasUnit rdf:resource="&om;teramole"/> + </owl:Class> + + <!-- Mole Per Cubic Metre Ontology --> + + <om:UnitDivision rdf:about="&om;molePerCubicmetre"> + <rdfs:label xml:lang="en">mole per cubic metre</rdfs:label> + <rdfs:label xml:lang="nl">mol per kubieke meter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per cubic metre is a unit of amount of substance concentration defined as mole divided by cubic metre.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>mol/m3</om:symbol> + <om:alternativeSymbol>mol m-3</om:alternativeSymbol> + <om:alternativeSymbol>mol·m-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;AmountOfSubstanceConcentration"> + <om:commonlyHasUnit rdf:resource="&om;molePerCubicmetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;AmountOfSubstanceConcentrationUnit"> + <rdfs:label xml:lang="en">amount of substance concentration unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;molar"/> + <om:UnitDivision rdf:about="&om;molePerCubicmetre"/> + <om:UnitDivision rdf:about="&om;molePerLitre"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedMolar"/> + <owl:Class rdf:about="&om;PrefixedMolePerLitre"/> + <owl:Class rdf:about="&om;MolePerPrefixedLitre"/> + <owl:Class rdf:about="&om;PrefixedMolePerPrefixedLitre"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AmountOfSubstanceConcentration"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;AmountOfSubstanceConcentrationUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Mole Per Litre Ontology --> + + <om:UnitDivision rdf:about="&om;molePerLitre"> + <rdfs:label xml:lang="en">mole per litre</rdfs:label> + <rdfs:label xml:lang="nl">mole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per litre is a unit of amount of substance concentration defined as mole divided by litre.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>mol/l</om:symbol> + <om:alternativeSymbol>mol l-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;AmountOfSubstanceConcentration"> + <om:commonlyHasUnit rdf:resource="&om;molePerLitre"/> + </owl:Class> + + <!-- Mole Per Litre Multiples and Submultiples Ontology --> + + <om:PrefixedMolePerLitre rdf:about="&om;yoctomolePerLitre"> + <rdfs:label xml:lang="en">yoctomole per litre</rdfs:label> + <rdfs:label xml:lang="nl">yoctomole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Yoctomole per litre is a unit of amount of substance concentration defined as yoctomole divided by litre.</rdfs:comment> + <om:symbol>ymol/l</om:symbol> + <om:alternativeSymbol>ymol l-1</om:alternativeSymbol> + <om:alternativeSymbol>ymol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;yoctomole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;zeptomolePerLitre"> + <rdfs:label xml:lang="en">zeptomole per litre</rdfs:label> + <rdfs:label xml:lang="nl">zeptomole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Zeptomole per litre is a unit of amount of substance concentration defined as zeptomole divided by litre.</rdfs:comment> + <om:symbol>zmol/l</om:symbol> + <om:alternativeSymbol>zmol l-1</om:alternativeSymbol> + <om:alternativeSymbol>zmol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;zeptomole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;attomolePerLitre"> + <rdfs:label xml:lang="en">attomole per litre</rdfs:label> + <rdfs:label xml:lang="nl">attomole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Attomole per litre is a unit of amount of substance concentration defined as attomole divided by litre.</rdfs:comment> + <om:symbol>amol/l</om:symbol> + <om:alternativeSymbol>amol l-1</om:alternativeSymbol> + <om:alternativeSymbol>amol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;attomole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;femtomolePerLitre"> + <rdfs:label xml:lang="en">femtomole per litre</rdfs:label> + <rdfs:label xml:lang="nl">femtomole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Femtomole per litre is a unit of amount of substance concentration defined as femtomole divided by litre.</rdfs:comment> + <om:symbol>fmol/l</om:symbol> + <om:alternativeSymbol>fm s-1</om:alternativeSymbol> + <om:alternativeSymbol>fm·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;femtomole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;picomolePerLitre"> + <rdfs:label xml:lang="en">picomole per litre</rdfs:label> + <rdfs:label xml:lang="nl">picomole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Picomole per litre is a unit of amount of substance concentration defined as picomole divided by litre.</rdfs:comment> + <om:symbol>pmol/l</om:symbol> + <om:alternativeSymbol>pmol l-1</om:alternativeSymbol> + <om:alternativeSymbol>pmol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;picomole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;nanomolePerLitre"> + <rdfs:label xml:lang="en">nanomole per litre</rdfs:label> + <rdfs:label xml:lang="nl">nanomole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Nanomole per litre is a unit of amount of substance concentration defined as nanomole divided by litre.</rdfs:comment> + <om:symbol>nmol/l</om:symbol> + <om:alternativeSymbol>nmol l-1</om:alternativeSymbol> + <om:alternativeSymbol>nmol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;nanomole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;micromolePerLitre"> + <rdfs:label xml:lang="en">micromole per litre</rdfs:label> + <rdfs:label xml:lang="nl">micromole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Micromole per litre is a unit of amount of substance concentration defined as micromole divided by litre.</rdfs:comment> + <om:symbol>μmol/l</om:symbol> + <om:alternativeSymbol>μmol l-1</om:alternativeSymbol> + <om:alternativeSymbol>μmol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;micromole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;millimolePerLitre"> + <rdfs:label xml:lang="en">millimole per litre</rdfs:label> + <rdfs:label xml:lang="nl">millimole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Millimole per litre is a unit of amount of substance concentration defined as millimole divided by litre.</rdfs:comment> + <om:symbol>mmol/l</om:symbol> + <om:alternativeSymbol>mmol l-1</om:alternativeSymbol> + <om:alternativeSymbol>mmol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;millimole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;centimolePerLitre"> + <rdfs:label xml:lang="en">centimole per litre</rdfs:label> + <rdfs:label xml:lang="nl">centimole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Centimole per litre is a unit of amount of substance concentration defined as centimole divided by litre.</rdfs:comment> + <om:symbol>cmol/l</om:symbol> + <om:alternativeSymbol>cmol l-1</om:alternativeSymbol> + <om:alternativeSymbol>cmol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;centimole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;decimolePerLitre"> + <rdfs:label xml:lang="en">decimole per litre</rdfs:label> + <rdfs:label xml:lang="nl">decimole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Decimole per litre is a unit of amount of substance concentration defined as decimole divided by litre.</rdfs:comment> + <om:symbol>dmol/l</om:symbol> + <om:alternativeSymbol>dmol l-1</om:alternativeSymbol> + <om:alternativeSymbol>dmol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;decimole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;decamolePerLitre"> + <rdfs:label xml:lang="en">decamole per litre</rdfs:label> + <rdfs:label xml:lang="nl">decamole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Decamole per litre is a unit of amount of substance concentration defined as decamole divided by litre.</rdfs:comment> + <om:symbol>damol/l</om:symbol> + <om:alternativeSymbol>damol l-1</om:alternativeSymbol> + <om:alternativeSymbol>damol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;decamole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;hectomolePerLitre"> + <rdfs:label xml:lang="en">hectomole per litre</rdfs:label> + <rdfs:label xml:lang="nl">hectomole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Hectomole per litre is a unit of amount of substance concentration defined as hectomole divided by litre.</rdfs:comment> + <om:symbol>hmol/l</om:symbol> + <om:alternativeSymbol>hmol l-1</om:alternativeSymbol> + <om:alternativeSymbol>hmol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;hectomole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;kilomolePerLitre"> + <rdfs:label xml:lang="en">kilomole per litre</rdfs:label> + <rdfs:label xml:lang="nl">kilomole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Kilomole per litre is a unit of amount of substance concentration defined as kilomole divided by litre.</rdfs:comment> + <om:symbol>kmol/l</om:symbol> + <om:alternativeSymbol>kmol l-1</om:alternativeSymbol> + <om:alternativeSymbol>kmol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilomole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;megamolePerLitre"> + <rdfs:label xml:lang="en">megamole per litre</rdfs:label> + <rdfs:label xml:lang="nl">megamole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Megamole per litre is a unit of amount of substance concentration defined as megamole divided by litre.</rdfs:comment> + <om:symbol>Mmol/l</om:symbol> + <om:alternativeSymbol>Mmol l-1</om:alternativeSymbol> + <om:alternativeSymbol>Mmol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;megamole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;gigamolePerLitre"> + <rdfs:label xml:lang="en">gigamole per litre</rdfs:label> + <rdfs:label xml:lang="nl">gigamole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Gigamole per litre is a unit of amount of substance concentration defined as gigamole divided by litre.</rdfs:comment> + <om:symbol>Gmol/l</om:symbol> + <om:alternativeSymbol>Gmol l-1</om:alternativeSymbol> + <om:alternativeSymbol>Gmol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gigamole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;teramolePerLitre"> + <rdfs:label xml:lang="en">teramole per litre</rdfs:label> + <rdfs:label xml:lang="nl">teramole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Teramole per litre is a unit of amount of substance concentration defined as teramole divided by litre.</rdfs:comment> + <om:symbol>Tmol/l</om:symbol> + <om:alternativeSymbol>Tmol l-1</om:alternativeSymbol> + <om:alternativeSymbol>Tmol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;teramole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;petamolePerLitre"> + <rdfs:label xml:lang="en">petamole per litre</rdfs:label> + <rdfs:label xml:lang="nl">petamole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Petamole per litre is a unit of amount of substance concentration defined as petamole divided by litre.</rdfs:comment> + <om:symbol>Pmol/l</om:symbol> + <om:alternativeSymbol>Pmol l-1</om:alternativeSymbol> + <om:alternativeSymbol>Pmol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;petamole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;examolePerLitre"> + <rdfs:label xml:lang="en">examole per litre</rdfs:label> + <rdfs:label xml:lang="nl">examole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Examole per litre is a unit of amount of substance concentration defined as examole divided by litre.</rdfs:comment> + <om:symbol>Emol/l</om:symbol> + <om:alternativeSymbol>Emol l-1</om:alternativeSymbol> + <om:alternativeSymbol>Emol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;examole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;zettamolePerLitre"> + <rdfs:label xml:lang="en">zettamole per litre</rdfs:label> + <rdfs:label xml:lang="nl">zettamole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Zettamole per litre is a unit of amount of substance concentration defined as zettamole divided by litre.</rdfs:comment> + <om:symbol>Zmol/l</om:symbol> + <om:alternativeSymbol>Zmol l-1</om:alternativeSymbol> + <om:alternativeSymbol>Zmol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;zettamole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:PrefixedMolePerLitre rdf:about="&om;yottamolePerLitre"> + <rdfs:label xml:lang="en">yottamole per litre</rdfs:label> + <rdfs:label xml:lang="nl">yottamole per liter</rdfs:label> + <rdfs:comment xml:lang="en">Yottamole per litre is a unit of amount of substance concentration defined as yottamole divided by litre.</rdfs:comment> + <om:symbol>Ymol/l</om:symbol> + <om:alternativeSymbol>Ymol l-1</om:alternativeSymbol> + <om:alternativeSymbol>Ymol·l-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;yottamole"/> + <om:hasDenominator rdf:resource="&om;litre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedMolePerLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerYoctolitre"> + <rdfs:label xml:lang="en">mole per yoctolitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per yoctoliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per yoctolitre is a unit of amount of substance concentration defined as mole divided by yoctolitre.</rdfs:comment> + <om:symbol>mol/yl</om:symbol> + <om:alternativeSymbol>mol yl-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·yl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;yoctolitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerZeptolitre"> + <rdfs:label xml:lang="en">mole per zeptolitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per zeptoliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per zeptolitre is a unit of amount of substance concentration defined as mole divided by zeptolitre.</rdfs:comment> + <om:symbol>mol/zl</om:symbol> + <om:alternativeSymbol>mol zl-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·zl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;zeptolitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerAttolitre"> + <rdfs:label xml:lang="en">mole per attolitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per attoliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per attolitre is a unit of amount of substance concentration defined as mole divided by attolitre.</rdfs:comment> + <om:symbol>mol/al</om:symbol> + <om:alternativeSymbol>mol al-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·al-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;attolitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerFemtolitre"> + <rdfs:label xml:lang="en">mole per femtolitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per femtoliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per femtolitre is a unit of amount of substance concentration defined as mole divided by femtolitre.</rdfs:comment> + <om:symbol>mol/fl</om:symbol> + <om:alternativeSymbol>mol fl-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·fl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;femtolitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerPicolitre"> + <rdfs:label xml:lang="en">mole per picolitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per picoliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per picolitre is a unit of amount of substance concentration defined as mole divided by picolitre.</rdfs:comment> + <om:symbol>mol/pl</om:symbol> + <om:alternativeSymbol>mol pl-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·pl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;picolitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerNanolitre"> + <rdfs:label xml:lang="en">mole per nanolitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per nanoliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per nanolitre is a unit of amount of substance concentration defined as mole divided by nanolitre.</rdfs:comment> + <om:symbol>mol/nl</om:symbol> + <om:alternativeSymbol>mol nl-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·nl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;nanolitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerMicrolitre"> + <rdfs:label xml:lang="en">mole per microlitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per microliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per microlitre is a unit of amount of substance concentration defined as mole divided by microlitre.</rdfs:comment> + <om:symbol>mol/μl</om:symbol> + <om:alternativeSymbol>mol μl-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·μl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;microlitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerMillilitre"> + <rdfs:label xml:lang="en">mole per millilitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per milliliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per millilitre is a unit of amount of substance concentration defined as mole divided by millilitre.</rdfs:comment> + <om:symbol>mol/ml</om:symbol> + <om:alternativeSymbol>mol ml-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·ml-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;millilitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerCentilitre"> + <rdfs:label xml:lang="en">mole per centilitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per centiliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per centilitre is a unit of amount of substance concentration defined as mole divided by centilitre.</rdfs:comment> + <om:symbol>mol/cl</om:symbol> + <om:alternativeSymbol>mol cl-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·cl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;centilitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerDecilitre"> + <rdfs:label xml:lang="en">mole per decilitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per deciliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per decilitre is a unit of amount of substance concentration defined as mole divided by decilitre.</rdfs:comment> + <om:symbol>mol/dl</om:symbol> + <om:alternativeSymbol>mol dl-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·dl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;decilitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerDecalitre"> + <rdfs:label xml:lang="en">mole per decalitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per decaliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per decalitre is a unit of amount of substance concentration defined as mole divided by decalitre.</rdfs:comment> + <om:symbol>mol/dal</om:symbol> + <om:alternativeSymbol>mol dal-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·dal-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;decalitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerHectolitre"> + <rdfs:label xml:lang="en">mole per hectolitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per hectoliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per hectolitre is a unit of amount of substance concentration defined as mole divided by hectolitre.</rdfs:comment> + <om:symbol>mol/hl</om:symbol> + <om:alternativeSymbol>mol hl-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·hl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;hectolitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerKilolitre"> + <rdfs:label xml:lang="en">mole per kilolitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per kiloliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per kilolitre is a unit of amount of substance concentration defined as mole divided by kilolitre.</rdfs:comment> + <om:symbol>mol/kl</om:symbol> + <om:alternativeSymbol>mol kl-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·kl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;kilolitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerMegalitre"> + <rdfs:label xml:lang="en">mole per megalitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per megaliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per megalitre is a unit of amount of substance concentration defined as mole divided by megalitre.</rdfs:comment> + <om:symbol>mol/Ml</om:symbol> + <om:alternativeSymbol>mol Ml-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·Ml-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;megalitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerGigalitre"> + <rdfs:label xml:lang="en">mole per gigalitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per gigaliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per gigalitre is a unit of amount of substance concentration defined as mole divided by gigalitre.</rdfs:comment> + <om:symbol>mol/Gl</om:symbol> + <om:alternativeSymbol>mol Gl-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·Gl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;gigalitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerTeralitre"> + <rdfs:label xml:lang="en">mole per teralitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per teraliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per teralitre is a unit of amount of substance concentration defined as mole divided by teralitre.</rdfs:comment> + <om:symbol>mol/Tl</om:symbol> + <om:alternativeSymbol>mol Tl-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·Tl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;teralitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerPetalitre"> + <rdfs:label xml:lang="en">mole per petalitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per petaliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per petalitre is a unit of amount of substance concentration defined as mole divided by petalitre.</rdfs:comment> + <om:symbol>mol/Pl</om:symbol> + <om:alternativeSymbol>mol Pl-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·Pl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;petalitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerExalitre"> + <rdfs:label xml:lang="en">mole per exalitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per exaliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per exalitre is a unit of amount of substance concentration defined as mole divided by exalitre.</rdfs:comment> + <om:symbol>mol/El</om:symbol> + <om:alternativeSymbol>mol El-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·El-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;exalitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerZettalitre"> + <rdfs:label xml:lang="en">mole per zettalitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per zettaliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per zettalitre is a unit of amount of substance concentration defined as mole divided by zettalitre.</rdfs:comment> + <om:symbol>mol/Zl</om:symbol> + <om:alternativeSymbol>mol Zl-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·Zl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;zettalitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <om:MolePerPrefixedLitre rdf:about="&om;molePerYottalitre"> + <rdfs:label xml:lang="en">mole per yottalitre</rdfs:label> + <rdfs:label xml:lang="nl">mole per yottaliter</rdfs:label> + <rdfs:comment xml:lang="en">Mole per yottalitre is a unit of amount of substance concentration defined as mole divided by yottalitre.</rdfs:comment> + <om:symbol>mol/Yl</om:symbol> + <om:alternativeSymbol>mol Yl-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·Yl-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;yottalitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:MolePerPrefixedLitre> + + <owl:Class rdf:about="&om;PrefixedMolePerLitre"> + <rdfs:label xml:lang="en">prefixed mole per litre</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitDivision"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedMole"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:hasValue rdf:resource="&om;litre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MolePerPrefixedLitre"> + <rdfs:label xml:lang="en">mole per prefixed litre</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitDivision"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:hasValue rdf:resource="&om;mole"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedLitre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;PrefixedMolePerPrefixedLitre"> + <rdfs:label xml:lang="en">prefixed mole per prefixed litre</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitDivision"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedMole"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedLitre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AmountOfSubstanceConcentration"> + <om:commonlyHasUnit rdf:resource="&om;attomolePerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;centimolePerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;decamolePerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;decimolePerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;examolePerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;femtomolePerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;gigamolePerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;hectomolePerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;kilomolePerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;megamolePerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;micromolePerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;millimolePerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;nanomolePerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;petamolePerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;picomolePerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;teramolePerLitre"/> + <om:commonlyHasUnit rdf:resource="&om;molePerAttolitre"/> + <om:commonlyHasUnit rdf:resource="&om;molePerCentilitre"/> + <om:commonlyHasUnit rdf:resource="&om;molePerDecalitre"/> + <om:commonlyHasUnit rdf:resource="&om;molePerDecilitre"/> + <om:commonlyHasUnit rdf:resource="&om;molePerExalitre"/> + <om:commonlyHasUnit rdf:resource="&om;molePerFemtolitre"/> + <om:commonlyHasUnit rdf:resource="&om;molePerGigalitre"/> + <om:commonlyHasUnit rdf:resource="&om;molePerHectolitre"/> + <om:commonlyHasUnit rdf:resource="&om;molePerKilolitre"/> + <om:commonlyHasUnit rdf:resource="&om;molePerMegalitre"/> + <om:commonlyHasUnit rdf:resource="&om;molePerMicrolitre"/> + <om:commonlyHasUnit rdf:resource="&om;molePerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;molePerNanolitre"/> + <om:commonlyHasUnit rdf:resource="&om;molePerPetalitre"/> + <om:commonlyHasUnit rdf:resource="&om;molePerPicolitre"/> + <om:commonlyHasUnit rdf:resource="&om;molePerTeralitre"/> + </owl:Class> + + <!-- Molar Ontology --> + + <om:Unit rdf:about="&om;molar"> + <rdfs:label xml:lang="en">molar</rdfs:label> + <rdfs:label xml:lang="nl">molair</rdfs:label> + <rdfs:comment xml:lang="en">Molar is a unit of amount of substance concentration defined as 1 mole per litre.</rdfs:comment> + <om:symbol>M</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;molePerLitre"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;AmountOfSubstanceConcentration"> + <om:commonlyHasUnit rdf:resource="&om;molar"/> + </owl:Class> + + <!-- Molar Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctomolar"> + <rdfs:label xml:lang="en">yoctomolar</rdfs:label> + <rdfs:label xml:lang="nl">yoctomolair</rdfs:label> + <rdfs:comment xml:lang="en">The yoctomolar is a unit of amount of substance concentration defined as 1.0e-24 molar.</rdfs:comment> + <om:symbol>yM</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptomolar"> + <rdfs:label xml:lang="en">zeptomolar</rdfs:label> + <rdfs:label xml:lang="nl">zeptomolair</rdfs:label> + <rdfs:comment xml:lang="en">The zeptmolar is a unit of amount of substance concentration defined as 1.0e-21 molar.</rdfs:comment> + <om:symbol>zM</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attomolar"> + <rdfs:label xml:lang="en">attomolar</rdfs:label> + <rdfs:label xml:lang="nl">attomolair</rdfs:label> + <rdfs:comment xml:lang="en">The attomolar is a unit of amount of substance concentration defined as 1.0e-18 molar.</rdfs:comment> + <om:symbol>aM</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtomolar"> + <rdfs:label xml:lang="en">femtomolar</rdfs:label> + <rdfs:label xml:lang="nl">femtomolair</rdfs:label> + <rdfs:comment xml:lang="en">The femtomolar is a unit of amount of substance concentration defined as 1.0e-15 molar.</rdfs:comment> + <om:symbol>fM</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picomolar"> + <rdfs:label xml:lang="en">picomolar</rdfs:label> + <rdfs:label xml:lang="nl">picomolair</rdfs:label> + <rdfs:comment xml:lang="en">The picomolar is a unit of amount of substance concentration defined as 1.0e-12 molar.</rdfs:comment> + <om:symbol>pM</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanomolar"> + <rdfs:label xml:lang="en">nanomolar</rdfs:label> + <rdfs:label xml:lang="nl">nanomolair</rdfs:label> + <rdfs:comment xml:lang="en">The nanomolar is a unit of amount of substance concentration defined as 1.0e-9 molar.</rdfs:comment> + <om:symbol>nM</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;micromolar"> + <rdfs:label xml:lang="en">micromolar</rdfs:label> + <rdfs:label xml:lang="nl">micromolair</rdfs:label> + <rdfs:comment xml:lang="en">The micromolar is a unit of amount of substance concentration defined as 1.0e-6 molar.</rdfs:comment> + <om:symbol>μM</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millimolar"> + <rdfs:label xml:lang="en">millimolar</rdfs:label> + <rdfs:label xml:lang="nl">millimolair</rdfs:label> + <rdfs:comment xml:lang="en">The millimolar is a unit of amount of substance concentration defined as 1.0e-3 molar.</rdfs:comment> + <om:symbol>mM</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centimolar"> + <rdfs:label xml:lang="en">centimolar</rdfs:label> + <rdfs:label xml:lang="nl">centimolair</rdfs:label> + <rdfs:comment xml:lang="en">The centimolar is a unit of amount of substance concentration defined as 1.0e-2 molar.</rdfs:comment> + <om:symbol>cM</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decimolar"> + <rdfs:label xml:lang="en">decimolar</rdfs:label> + <rdfs:label xml:lang="nl">decimolair</rdfs:label> + <rdfs:comment xml:lang="en">The decimolar is a unit of amount of substance concentration defined as 1.0e-1 molar.</rdfs:comment> + <om:symbol>dM</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decamolar"> + <rdfs:label xml:lang="en">decamolar</rdfs:label> + <rdfs:label xml:lang="nl">decamolair</rdfs:label> + <rdfs:comment xml:lang="en">The decamolar is a unit of amount of substance concentration defined as 1.0e1 molar.</rdfs:comment> + <om:symbol>daM</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectomolar"> + <rdfs:label xml:lang="en">hectomolar</rdfs:label> + <rdfs:label xml:lang="nl">hectomolair</rdfs:label> + <rdfs:comment xml:lang="en">The hectomolar is a unit of amount of substance concentration defined as 1.0e2 molar.</rdfs:comment> + <om:symbol>hM</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilomolar"> + <rdfs:label xml:lang="en">kilomolar</rdfs:label> + <rdfs:label xml:lang="nl">kilomolair</rdfs:label> + <rdfs:comment xml:lang="en">The kilomolar is a unit of amount of substance concentration defined as 1.0e3 molar.</rdfs:comment> + <om:symbol>kM</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megamolar"> + <rdfs:label xml:lang="en">megamolar</rdfs:label> + <rdfs:label xml:lang="nl">megamolair</rdfs:label> + <rdfs:comment xml:lang="en">The megamolar is a unit of amount of substance concentration defined as 1.0e6 molar.</rdfs:comment> + <om:symbol>MM</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigamolar"> + <rdfs:label xml:lang="en">gigamolar</rdfs:label> + <rdfs:label xml:lang="nl">gigamolair</rdfs:label> + <rdfs:comment xml:lang="en">The gigamolar is a unit of amount of substance concentration defined as 1.0e9 molar.</rdfs:comment> + <om:symbol>GM</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;teramolar"> + <rdfs:label xml:lang="en">teramolar</rdfs:label> + <rdfs:label xml:lang="nl">teramolair</rdfs:label> + <rdfs:comment xml:lang="en">The teramolar is a unit of amount of substance concentration defined as 1.0e12 molar.</rdfs:comment> + <om:symbol>TM</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petamolar"> + <rdfs:label xml:lang="en">petamolar</rdfs:label> + <rdfs:label xml:lang="nl">petamolair</rdfs:label> + <rdfs:comment xml:lang="en">The petamolar is a unit of amount of substance concentration defined as 1.0e15 molar.</rdfs:comment> + <om:symbol>PM</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;examolar"> + <rdfs:label xml:lang="en">examolar</rdfs:label> + <rdfs:label xml:lang="nl">examolair</rdfs:label> + <rdfs:comment xml:lang="en">The examolar is a unit of amount of substance concentration defined as 1.0e18 molar.</rdfs:comment> + <om:symbol>EM</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettamolar"> + <rdfs:label xml:lang="en">zettamolar</rdfs:label> + <rdfs:label xml:lang="nl">zettamolair</rdfs:label> + <rdfs:comment xml:lang="en">The zettamolar is a unit of amount of substance concentration defined as 1.0e21 molar.</rdfs:comment> + <om:symbol>ZM</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottamolar"> + <rdfs:label xml:lang="en">yottamolar</rdfs:label> + <rdfs:label xml:lang="nl">yottamolair</rdfs:label> + <rdfs:comment xml:lang="en">The yottamolar is a unit of amount of substance concentration defined as 1.0e24 molar.</rdfs:comment> + <om:symbol>YM</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;molar"/> + <om:hasDimension rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedMolar"> + <rdfs:label xml:lang="en">prefixed molar</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;molar"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AmountOfSubstanceConcentration"> + <om:commonlyHasUnit rdf:resource="&om;attomolar"/> + <om:commonlyHasUnit rdf:resource="&om;femtomolar"/> + <om:commonlyHasUnit rdf:resource="&om;megamolar"/> + <om:commonlyHasUnit rdf:resource="&om;micromolar"/> + <om:commonlyHasUnit rdf:resource="&om;millimolar"/> + <om:commonlyHasUnit rdf:resource="&om;nanomolar"/> + <om:commonlyHasUnit rdf:resource="&om;picomolar"/> + </owl:Class> + + <!-- Mole Per Mole Ontology --> + + <om:UnitDivision rdf:about="&om;molePerMole"> + <rdfs:label xml:lang="en">mole per mole</rdfs:label> + <rdfs:label xml:lang="nl">mol per mol</rdfs:label> + <om:symbol>mol/mol</om:symbol> + <om:alternativeSymbol>mol mol-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·mol-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;micromolePerMole"> + <rdfs:label xml:lang="en">micromole per mole</rdfs:label> + <rdfs:label xml:lang="nl">micromol per mol</rdfs:label> + <om:symbol>μmol/mol</om:symbol> + <om:alternativeSymbol>μmol mol-1</om:alternativeSymbol> + <om:alternativeSymbol>μmol·mol-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;micromole"/> + <om:hasDenominator rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;AmountOfSubstanceFraction"> + <om:commonlyHasUnit rdf:resource="&om;molePerMole"/> + <om:commonlyHasUnit rdf:resource="&om;micromolePerMole"/> + </owl:Class> + + <owl:Class rdf:about="&om;AmountOfSubstanceFractionUnit"> + <rdfs:label xml:lang="en">amount of substance fraction unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + <om:Unit rdf:about="&om;partsPerMillion"/> + <om:Unit rdf:about="&om;percent"/> + <om:UnitDivision rdf:about="&om;molePerMole"/> + <om:UnitDivision rdf:about="&om;micromolePerMole"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AmountOfSubstanceFraction"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;AmountOfSubstanceFractionUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Joule Per Mole Ontology --> + + <om:UnitDivision rdf:about="&om;joulePerMole"> + <rdfs:label xml:lang="en">joule per mole</rdfs:label> + <rdfs:label xml:lang="nl">joule per mol</rdfs:label> + <om:symbol>J/mol</om:symbol> + <om:alternativeSymbol>J mol-1</om:alternativeSymbol> + <om:alternativeSymbol>J·mol-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;joule"/> + <om:hasDenominator rdf:resource="&om;mole"/> + <om:hasDimension rdf:resource="&om;molarEnergy-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;MolarEnergy"> + <om:commonlyHasUnit rdf:resource="&om;joulePerMole"/> + </owl:Class> + + <owl:Class rdf:about="&om;ResonanceEnergy"> + <om:commonlyHasUnit rdf:resource="&om;joulePerMole"/> + </owl:Class> + + <owl:Class rdf:about="&om;MolarEnergyUnit"> + <rdfs:label xml:lang="en">molar energy unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;joulePerMole"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MolarEnergy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MolarEnergyUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Joule Per Kelvin Mole Ontology --> + + <om:UnitDivision rdf:about="&om;joulePerKelvinMole"> + <rdfs:label xml:lang="en">joule per kelvin mole</rdfs:label> + <rdfs:label xml:lang="nl">joule per kelvin mol</rdfs:label> + <om:symbol>J/(K mol)</om:symbol> + <om:alternativeSymbol>J/(K·mol)</om:alternativeSymbol> + <om:alternativeSymbol>J K-1 mol-1</om:alternativeSymbol> + <om:alternativeSymbol>J·K-1·mol-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;joule"/> + <om:hasDenominator rdf:resource="&om;kelvinMole"/> + <om:hasDimension rdf:resource="&om;molarEntropyOrMolarHeatCapacityOrGasConstant-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;MolarEntropy"> + <om:commonlyHasUnit rdf:resource="&om;joulePerKelvinMole"/> + </owl:Class> + + <owl:Class rdf:about="&om;MolarHeatCapacity"> + <om:commonlyHasUnit rdf:resource="&om;joulePerKelvinMole"/> + </owl:Class> + + <owl:Class rdf:about="&om;GasConstant"> + <om:commonlyHasUnit rdf:resource="&om;joulePerKelvinMole"/> + </owl:Class> + + <owl:Class rdf:about="&om;MolarEntropyUnit"> + <rdfs:label xml:lang="en">molar entropy unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;joulePerKelvinMole"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MolarHeatCapacityUnit"> + <rdfs:label xml:lang="en">molar heat capacity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;joulePerKelvinMole"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;GasConstantUnit"> + <rdfs:label xml:lang="en">gas constant unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;joulePerKelvinMole"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MolarEntropy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MolarEntropyUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;MolarHeatCapacity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MolarHeatCapacityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;GasConstant"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;GasConstantUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Mole Per Kilogram Ontology --> + + <om:UnitDivision rdf:about="&om;molePerKilogram"> + <rdfs:label xml:lang="en">mole per kilogram</rdfs:label> + <rdfs:label xml:lang="nl">mol per kilogram</rdfs:label> + <om:symbol>mol/kg</om:symbol> + <om:alternativeSymbol>mol kg-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·kg-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;kilogram"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Molality"> + <om:commonlyHasUnit rdf:resource="&om;molePerKilogram"/> + </owl:Class> + + <owl:Class rdf:about="&om;MolalityUnit"> + <rdfs:label xml:lang="en">molality unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;molePerKilogram"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Molality"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MolalityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Kilogram Per Mole Ontology --> + + <om:UnitDivision rdf:about="&om;kilogramPerMole"> + <rdfs:label xml:lang="en">kilogram per mole</rdfs:label> + <rdfs:label xml:lang="nl">kilogram per mol</rdfs:label> + <om:symbol>kg/mol</om:symbol> + <om:alternativeSymbol>kg mol-1</om:alternativeSymbol> + <om:alternativeSymbol>kg·mol-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilogram"/> + <om:hasDenominator rdf:resource="&om;mole"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;MolarMass"> + <om:commonlyHasUnit rdf:resource="&om;kilogramPerMole"/> + </owl:Class> + + <owl:Class rdf:about="&om;MolarMassUnit"> + <rdfs:label xml:lang="en">molar mass unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;kilogramPerMole"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MolarMass"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MolarMassUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Cubic Metre Per Mole Ontology --> + + <om:UnitDivision rdf:about="&om;cubicMetrePerMole"> + <rdfs:label xml:lang="en">cubic metre per mole</rdfs:label> + <rdfs:label xml:lang="nl">kubieke meter per mol</rdfs:label> + <om:symbol>m3/mol</om:symbol> + <om:alternativeSymbol>m3 mol-1</om:alternativeSymbol> + <om:alternativeSymbol>m3·mol-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;cubicMetre"/> + <om:hasDenominator rdf:resource="&om;mole"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;MolarVolume"> + <om:commonlyHasUnit rdf:resource="&om;cubicMetrePerMole"/> + </owl:Class> + + <owl:Class rdf:about="&om;MolarVolumeUnit"> + <rdfs:label xml:lang="en">molar volume unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;cubicMetrePerMole"/> + <om:UnitDivision rdf:about="&om;litrePerMole"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MolarVolume"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MolarVolumeUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Litre Per Mole Ontology --> + + <om:UnitDivision rdf:about="&om;litrePerMole"> + <rdfs:label xml:lang="en">litre per mole</rdfs:label> + <rdfs:label xml:lang="nl">liter per mol</rdfs:label> + <om:symbol>l/mol</om:symbol> + <om:alternativeSymbol>l mol-1</om:alternativeSymbol> + <om:alternativeSymbol>l·mol-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;litre"/> + <om:hasDenominator rdf:resource="&om;mole"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;MolarVolume"> + <om:commonlyHasUnit rdf:resource="&om;litrePerMole"/> + </owl:Class> + + <!-- Mole Micrometre Ontology --> + + <om:UnitMultiplication rdf:about="&om;moleMicrometre"> + <rdfs:label xml:lang="en">mole micrometre</rdfs:label> + <rdfs:label xml:lang="nl">mol micrometer</rdfs:label> + <om:symbol>mol μm</om:symbol> + <om:alternativeSymbol>mol·μm</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;mole"/> + <hasTerm2 rdf:resource="&om;micrometre"/> + </om:UnitMultiplication> + + <!-- Mole Micrometre Reciprocal Square Centimetre Ontology --> + + <om:UnitMultiplication rdf:about="&om;moleMicrometreReciprocalSquareCentimetre"> + <rdfs:label xml:lang="en">mole micrometre reciprocal square centimetre</rdfs:label> + <rdfs:label xml:lang="nl">mol micrometer omgekeerde vierkante centimeter</rdfs:label> + <om:symbol>mol μm cm-2</om:symbol> + <om:alternativeSymbol>mol·μm·cm-2</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;moleMicrometre"/> + <hasTerm2 rdf:resource="&om;reciprocalSquareCentimetre"/> + </om:UnitMultiplication> + + <!-- Mole Micrometre Reciprocal Square Centimetre Reciprocal Second Ontology --> + + <om:UnitMultiplication rdf:about="&om;moleMicrometreReciprocalSquareCentimetreReciprocalSecond-Time"> + <rdfs:label xml:lang="en">mole micrometre reciprocal square centimetre reciprocal second</rdfs:label> + <rdfs:label xml:lang="nl">mol micrometer omgekeerde vierkante centimeter omgekeerde seconde</rdfs:label> + <om:symbol>mol μm cm-2 s-1</om:symbol> + <om:alternativeSymbol>mol·μm·cm-2·s-1</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;moleMicrometreReciprocalSquareCentimetre"/> + <hasTerm2 rdf:resource="&om;reciprocalSecond-Time"/> + </om:UnitMultiplication> + + <!-- Mole Per Metre Ontology --> + + <om:UnitDivision rdf:about="&om;molePerMetre"> + <rdfs:label xml:lang="en">mole per metre</rdfs:label> + <rdfs:label xml:lang="nl">mole per meter</rdfs:label> + <om:symbol>mol/m</om:symbol> + <om:alternativeSymbol>mol m-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:UnitDivision> + + <!-- Mole Per Metre Multiples and Submultiples Ontology --> + + <om:PrefixedMolePerMetre rdf:about="&om;yoctomolePerMetre"> + <rdfs:label xml:lang="en">yoctomole per metre</rdfs:label> + <rdfs:label xml:lang="nl">yoctomole per meter</rdfs:label> + <om:symbol>ymol/m</om:symbol> + <om:alternativeSymbol>ymol m-1</om:alternativeSymbol> + <om:alternativeSymbol>ymol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;yoctomole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;zeptomolePerMetre"> + <rdfs:label xml:lang="en">zeptomole per metre</rdfs:label> + <rdfs:label xml:lang="nl">zeptomole per meter</rdfs:label> + <om:symbol>zmol/m</om:symbol> + <om:alternativeSymbol>zmol m-1</om:alternativeSymbol> + <om:alternativeSymbol>zmol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;zeptomole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;attomolePerMetre"> + <rdfs:label xml:lang="en">attomole per metre</rdfs:label> + <rdfs:label xml:lang="nl">attomole per meter</rdfs:label> + <om:symbol>amol/m</om:symbol> + <om:alternativeSymbol>amol m-1</om:alternativeSymbol> + <om:alternativeSymbol>amol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;attomole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;femtomolePerMetre"> + <rdfs:label xml:lang="en">femtomole per metre</rdfs:label> + <rdfs:label xml:lang="nl">femtomole per meter</rdfs:label> + <om:symbol>fmol/m</om:symbol> + <om:alternativeSymbol>fm s-1</om:alternativeSymbol> + <om:alternativeSymbol>fm·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;femtomole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;picomolePerMetre"> + <rdfs:label xml:lang="en">picomole per metre</rdfs:label> + <rdfs:label xml:lang="nl">picomole per meter</rdfs:label> + <om:symbol>pmol/m</om:symbol> + <om:alternativeSymbol>pmol m-1</om:alternativeSymbol> + <om:alternativeSymbol>pmol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;picomole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;nanomolePerMetre"> + <rdfs:label xml:lang="en">nanomole per metre</rdfs:label> + <rdfs:label xml:lang="nl">nanomole per meter</rdfs:label> + <om:symbol>nmol/m</om:symbol> + <om:alternativeSymbol>nmol m-1</om:alternativeSymbol> + <om:alternativeSymbol>nmol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;nanomole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;micromolePerMetre"> + <rdfs:label xml:lang="en">micromole per metre</rdfs:label> + <rdfs:label xml:lang="nl">micromole per meter</rdfs:label> + <om:symbol>μmol/m</om:symbol> + <om:alternativeSymbol>μmol m-1</om:alternativeSymbol> + <om:alternativeSymbol>μmol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;micromole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;millimolePerMetre"> + <rdfs:label xml:lang="en">millimole per metre</rdfs:label> + <rdfs:label xml:lang="nl">millimole per meter</rdfs:label> + <om:symbol>mmol/m</om:symbol> + <om:alternativeSymbol>mmol m-1</om:alternativeSymbol> + <om:alternativeSymbol>mmol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;millimole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;centimolePerMetre"> + <rdfs:label xml:lang="en">centimole per metre</rdfs:label> + <rdfs:label xml:lang="nl">centimole per meter</rdfs:label> + <om:symbol>cmol/m</om:symbol> + <om:alternativeSymbol>cmol m-1</om:alternativeSymbol> + <om:alternativeSymbol>cmol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;centimole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;decimolePerMetre"> + <rdfs:label xml:lang="en">decimole per metre</rdfs:label> + <rdfs:label xml:lang="nl">decimole per meter</rdfs:label> + <om:symbol>dmol/m</om:symbol> + <om:alternativeSymbol>dmol m-1</om:alternativeSymbol> + <om:alternativeSymbol>dmol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;decimole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;decamolePerMetre"> + <rdfs:label xml:lang="en">decamole per metre</rdfs:label> + <rdfs:label xml:lang="nl">decamole per meter</rdfs:label> + <om:symbol>damol/m</om:symbol> + <om:alternativeSymbol>damol m-1</om:alternativeSymbol> + <om:alternativeSymbol>damol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;decamole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;hectomolePerMetre"> + <rdfs:label xml:lang="en">hectomole per metre</rdfs:label> + <rdfs:label xml:lang="nl">hectomole per meter</rdfs:label> + <om:symbol>hmol/m</om:symbol> + <om:alternativeSymbol>hmol m-1</om:alternativeSymbol> + <om:alternativeSymbol>hmol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;hectomole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;kilomolePerMetre"> + <rdfs:label xml:lang="en">kilomole per metre</rdfs:label> + <rdfs:label xml:lang="nl">kilomole per meter</rdfs:label> + <om:symbol>kmol/m</om:symbol> + <om:alternativeSymbol>kmol m-1</om:alternativeSymbol> + <om:alternativeSymbol>kmol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilomole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;megamolePerMetre"> + <rdfs:label xml:lang="en">megamole per metre</rdfs:label> + <rdfs:label xml:lang="nl">megamole per meter</rdfs:label> + <om:symbol>Mmol/m</om:symbol> + <om:alternativeSymbol>Mmol m-1</om:alternativeSymbol> + <om:alternativeSymbol>Mmol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;megamole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;gigamolePerMetre"> + <rdfs:label xml:lang="en">gigamole per metre</rdfs:label> + <rdfs:label xml:lang="nl">gigamole per meter</rdfs:label> + <om:symbol>Gmol/m</om:symbol> + <om:alternativeSymbol>Gmol m-1</om:alternativeSymbol> + <om:alternativeSymbol>Gmol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gigamole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;teramolePerMetre"> + <rdfs:label xml:lang="en">teramole per metre</rdfs:label> + <rdfs:label xml:lang="nl">teramole per meter</rdfs:label> + <om:symbol>Tmol/m</om:symbol> + <om:alternativeSymbol>Tmol m-1</om:alternativeSymbol> + <om:alternativeSymbol>Tmol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;teramole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;petamolePerMetre"> + <rdfs:label xml:lang="en">petamole per metre</rdfs:label> + <rdfs:label xml:lang="nl">petamole per meter</rdfs:label> + <om:symbol>Pmol/m</om:symbol> + <om:alternativeSymbol>Pmol m-1</om:alternativeSymbol> + <om:alternativeSymbol>Pmol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;petamole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;examolePerMetre"> + <rdfs:label xml:lang="en">examole per metre</rdfs:label> + <rdfs:label xml:lang="nl">examole per meter</rdfs:label> + <om:symbol>Emol/m</om:symbol> + <om:alternativeSymbol>Emol m-1</om:alternativeSymbol> + <om:alternativeSymbol>Emol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;examole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;zettamolePerMetre"> + <rdfs:label xml:lang="en">zettamole per metre</rdfs:label> + <rdfs:label xml:lang="nl">zettamole per meter</rdfs:label> + <om:symbol>Zmol/m</om:symbol> + <om:alternativeSymbol>Zmol m-1</om:alternativeSymbol> + <om:alternativeSymbol>Zmol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;zettamole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:PrefixedMolePerMetre rdf:about="&om;yottamolePerMetre"> + <rdfs:label xml:lang="en">yottamole per metre</rdfs:label> + <rdfs:label xml:lang="nl">yottamole per meter</rdfs:label> + <om:symbol>Ymol/m</om:symbol> + <om:alternativeSymbol>Ymol m-1</om:alternativeSymbol> + <om:alternativeSymbol>Ymol·m-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;yottamole"/> + <om:hasDenominator rdf:resource="&om;metre"/> + </om:PrefixedMolePerMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerYoctometre"> + <rdfs:label xml:lang="en">mole per yoctometre</rdfs:label> + <rdfs:label xml:lang="nl">mole per yoctometer</rdfs:label> + <om:symbol>mol/ym</om:symbol> + <om:alternativeSymbol>mol ym-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·ym-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;yoctometre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerZeptometre"> + <rdfs:label xml:lang="en">mole per zeptometre</rdfs:label> + <rdfs:label xml:lang="nl">mole per zeptometer</rdfs:label> + <om:symbol>mol/zm</om:symbol> + <om:alternativeSymbol>mol zm-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·zm-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;zeptometre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerAttometre"> + <rdfs:label xml:lang="en">mole per attometre</rdfs:label> + <rdfs:label xml:lang="nl">mole per attometer</rdfs:label> + <om:symbol>mol/am</om:symbol> + <om:alternativeSymbol>mol am-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·am-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;attometre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerFemtometre"> + <rdfs:label xml:lang="en">mole per femtometre</rdfs:label> + <rdfs:label xml:lang="nl">mole per femtometer</rdfs:label> + <om:symbol>mol/fm</om:symbol> + <om:alternativeSymbol>mol fm-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·fm-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;femtometre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerPicometre"> + <rdfs:label xml:lang="en">mole per picometre</rdfs:label> + <rdfs:label xml:lang="nl">mole per picometer</rdfs:label> + <om:symbol>mol/pm</om:symbol> + <om:alternativeSymbol>mol pm-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·pm-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;picometre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerNanometre"> + <rdfs:label xml:lang="en">mole per nanometre</rdfs:label> + <rdfs:label xml:lang="nl">mole per nanometer</rdfs:label> + <om:symbol>mol/nm</om:symbol> + <om:alternativeSymbol>mol nm-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·nm-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;nanometre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerMicrometre"> + <rdfs:label xml:lang="en">mole per micrometre</rdfs:label> + <rdfs:label xml:lang="nl">mole per micrometer</rdfs:label> + <om:symbol>mol/μm</om:symbol> + <om:alternativeSymbol>mol μm-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·μm-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;micrometre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerMillimetre"> + <rdfs:label xml:lang="en">mole per millimetre</rdfs:label> + <rdfs:label xml:lang="nl">mole per millimeter</rdfs:label> + <om:symbol>mol/mm</om:symbol> + <om:alternativeSymbol>mol mm-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·mm-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;millimetre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerCentimetre"> + <rdfs:label xml:lang="en">mole per centimetre</rdfs:label> + <rdfs:label xml:lang="nl">mole per centimeter</rdfs:label> + <om:symbol>mol/cm</om:symbol> + <om:alternativeSymbol>mol cm-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·cm-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;centimetre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerDecimetre"> + <rdfs:label xml:lang="en">mole per decimetre</rdfs:label> + <rdfs:label xml:lang="nl">mole per decimeter</rdfs:label> + <om:symbol>mol/dm</om:symbol> + <om:alternativeSymbol>mol dm-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·dm-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;decimetre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerDecametre"> + <rdfs:label xml:lang="en">mole per decametre</rdfs:label> + <rdfs:label xml:lang="nl">mole per decameter</rdfs:label> + <om:symbol>mol/dam</om:symbol> + <om:alternativeSymbol>mol dam-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·dam-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;decametre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerHectometre"> + <rdfs:label xml:lang="en">mole per hectometre</rdfs:label> + <rdfs:label xml:lang="nl">mole per hectometer</rdfs:label> + <om:symbol>mol/hm</om:symbol> + <om:alternativeSymbol>mol hm-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·hm-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;hectometre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerKilometre"> + <rdfs:label xml:lang="en">mole per kilometre</rdfs:label> + <rdfs:label xml:lang="nl">mole per kilometer</rdfs:label> + <om:symbol>mol/km</om:symbol> + <om:alternativeSymbol>mol km-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·km-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;kilometre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePermegametre"> + <rdfs:label xml:lang="en">mole per megametre</rdfs:label> + <rdfs:label xml:lang="nl">mole per megameter</rdfs:label> + <om:symbol>mol/Mm</om:symbol> + <om:alternativeSymbol>mol Mm-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·Mm-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;megametre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerGigametre"> + <rdfs:label xml:lang="en">mole per gigametre</rdfs:label> + <rdfs:label xml:lang="nl">mole per gigameter</rdfs:label> + <om:symbol>mol/Gm</om:symbol> + <om:alternativeSymbol>mol Gm-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·Gm-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;gigametre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerTerametre"> + <rdfs:label xml:lang="en">mole per terametre</rdfs:label> + <rdfs:label xml:lang="nl">mole per terameter</rdfs:label> + <om:symbol>mol/Tm</om:symbol> + <om:alternativeSymbol>mol Tm-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·Tm-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;terametre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerPetametre"> + <rdfs:label xml:lang="en">mole per petametre</rdfs:label> + <rdfs:label xml:lang="nl">mole per petameter</rdfs:label> + <om:symbol>mol/Pm</om:symbol> + <om:alternativeSymbol>mol Pm-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·Pm-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;petametre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerExametre"> + <rdfs:label xml:lang="en">mole per exametre</rdfs:label> + <rdfs:label xml:lang="nl">mole per exameter</rdfs:label> + <om:symbol>mol/Em</om:symbol> + <om:alternativeSymbol>mol Em-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·Em-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;exametre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerZettametre"> + <rdfs:label xml:lang="en">mole per zettametre</rdfs:label> + <rdfs:label xml:lang="nl">mole per zettameter</rdfs:label> + <om:symbol>mol/Zm</om:symbol> + <om:alternativeSymbol>mol Zm-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·Zm-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;zettametre"/> + </om:MolePerPrefixedMetre> + + <om:MolePerPrefixedMetre rdf:about="&om;molePerYottametre"> + <rdfs:label xml:lang="en">mole per yottametre</rdfs:label> + <rdfs:label xml:lang="nl">mole per yottameter</rdfs:label> + <om:symbol>mol/Ym</om:symbol> + <om:alternativeSymbol>mol Ym-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·Ym-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;yottametre"/> + </om:MolePerPrefixedMetre> + + <owl:Class rdf:about="&om;PrefixedMolePerMetre"> + <rdfs:label xml:lang="en">prefixed mole per metre</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitDivision"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedMole"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:hasValue rdf:resource="&om;metre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;MolePerPrefixedMetre"> + <rdfs:label xml:lang="en">mole per prefixed metre</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitDivision"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:hasValue rdf:resource="&om;mole"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedMetre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;PrefixedMolePerPrefixedMetre"> + <rdfs:label xml:lang="en">prefixed mole per prefixed metre</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;UnitDivision"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedMole"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasNumerator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:allValuesFrom rdf:resource="&om;PrefixedMetre"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDenominator"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <!-- Kelvin Mole Ontology --> + + <om:UnitMultiplication rdf:about="&om;kelvinMole"> + <rdfs:label xml:lang="en">kelvin mole</rdfs:label> + <rdfs:label xml:lang="nl">kelvin mol</rdfs:label> + <om:symbol>K mol</om:symbol> + <om:alternativeSymbol>K·mol</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;kelvin"/> + <hasTerm2 rdf:resource="&om;mole"/> + </om:UnitMultiplication> + + <!-- Micromole Per Second Gram Ontology --> + + <om:UnitDivision rdf:about="&om;micromolePerSecond-TimeGram"> + <rdfs:label xml:lang="en">micromole per second gram</rdfs:label> + <om:symbol>μmol/(s g)</om:symbol> + <om:alternativeSymbol>μmol s-1 g-1</om:alternativeSymbol> + <om:alternativeSymbol>μmol·s-1·g-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;micromolePerSecond-Time"/> + <om:hasDenominator rdf:resource="&om;gram"/> + </om:UnitDivision> + <!-- Micromole Per Second Gram Ontology --> + + <!-- Nanomole Per Hour Millilitre Ontology --> + + <om:UnitDivision rdf:about="&om;nanomolePerHour"> + <rdfs:label xml:lang="en">nanomole per hour</rdfs:label> + <om:symbol>nmol/h</om:symbol> + <om:alternativeSymbol>nmol h-1</om:alternativeSymbol> + <om:alternativeSymbol>nmol·h-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;nanomole"/> + <om:hasDenominator rdf:resource="&om;hour"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;nanomolePerHourMillilitre"> + <rdfs:label xml:lang="en">nanomole per hour millilitre</rdfs:label> + <om:symbol>nmol/(h ml)</om:symbol> + <om:alternativeSymbol>nmol h-1 ml-1</om:alternativeSymbol> + <om:alternativeSymbol>nmol·h-1·ml-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;nanomolePerHour"/> + <om:hasDenominator rdf:resource="&om;millilitre"/> + </om:UnitDivision> + + <!-- Dimension Ontologies --> + + <!-- Contents --> + + <!-- Amount of Substance Dimension Ontology --> + <!-- Amount of Substance Concentration Dimension Upper Ontology --> + <!-- Molar Energy Dimension Ontology --> + <!-- Molar Entropy or Molar Heat Capacity or Gas Constant Dimension Ontology --> + + <!-- Amount of Substance Dimension Ontology --> + + <om:Dimension rdf:about="&om;amountOfSubstance-Dimension"> + <rdfs:label xml:lang="en">amount of substance dimension</rdfs:label> + <rdfs:label xml:lang="nl">stofhoeveelheiddimensie</rdfs:label> + <om:symbol>N</om:symbol> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;AmountOfSubstance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;amountOfSubstance-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Amount of Substance Concentration Dimension Upper Ontology --> + + <om:Dimension rdf:about="&om;amountOfSubstanceConcentration-Dimension"> + <rdfs:label xml:lang="en">amount of substance concentration dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-3</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;AmountOfSubstanceConcentration"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;amountOfSubstanceConcentration-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Molar Energy Dimension Ontology --> + + <om:Dimension rdf:about="&om;molarEnergy-Dimension"> + <rdfs:label xml:lang="en">molar energy dimension</rdfs:label> + <rdfs:label xml:lang="nl">molaire-energiedimensie</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;MolarEnergy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;molarEnergy-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Molar Entropy or Molar Heat Capacity or Gas Constant Dimension Ontology --> + + <om:Dimension rdf:about="&om;molarEntropyOrMolarHeatCapacityOrGasConstant-Dimension"> + <rdfs:label xml:lang="en">molar entropy, molar heat capacity, or gas constant dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;MolarEntropy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;molarEntropyOrMolarHeatCapacityOrGasConstant-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;MolarHeatCapacity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;molarEntropyOrMolarHeatCapacityOrGasConstant-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;GasConstant"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;molarEntropyOrMolarHeatCapacityOrGasConstant-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Chemistry Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Unit of Measure Ontologies --> + <!-- Dimension Ontologies --> + + <om:ApplicationArea rdf:about="&om;chemistry"> + <rdfs:label xml:lang="en">chemistry</rdfs:label> + <rdfs:label xml:lang="nl">chemie</rdfs:label> + <!-- <om:uses_application_area rdf:resource="&om;space_and_time"/> --> + <om:usesQuantity rdf:resource="&om;CollisionFrequency"/> + <om:usesQuantity rdf:resource="&om;CatalyticActivity"/> + <om:usesQuantity rdf:resource="&om;CatalyticActivityConcentration"/> + <om:usesQuantity rdf:resource="&om;SpecificCatalyticActivity"/> + <om:usesQuantity rdf:resource="&om;SpecificAmylaseActivity"/> + <om:usesQuantity rdf:resource="&om;SpecificProteaseActivity"/> + <om:usesQuantity rdf:resource="&om;Acidity"/> + <om:usesQuantity rdf:resource="&om;Amphiphilicity"/> + <om:usesQuantity rdf:resource="&om;Hydrophilicity"/> + <om:usesQuantity rdf:resource="&om;Hydrophobicity"/> + <om:usesQuantity rdf:resource="&om;Lipophilicity"/> + <om:usesQuantity rdf:resource="&om;SaltStrength"/> + <om:usesUnit rdf:resource="&om;molePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;micromolePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;katal"/> + <om:usesUnit rdf:resource="&om;attokatal"/> + <om:usesUnit rdf:resource="&om;centikatal"/> + <om:usesUnit rdf:resource="&om;decakatal"/> + <om:usesUnit rdf:resource="&om;decikatal"/> + <om:usesUnit rdf:resource="&om;exakatal"/> + <om:usesUnit rdf:resource="&om;femtokatal"/> + <om:usesUnit rdf:resource="&om;gigakatal"/> + <om:usesUnit rdf:resource="&om;hectokatal"/> + <om:usesUnit rdf:resource="&om;kilokatal"/> + <om:usesUnit rdf:resource="&om;megakatal"/> + <om:usesUnit rdf:resource="&om;microkatal"/> + <om:usesUnit rdf:resource="&om;millikatal"/> + <om:usesUnit rdf:resource="&om;nanokatal"/> + <om:usesUnit rdf:resource="&om;petakatal"/> + <om:usesUnit rdf:resource="&om;picokatal"/> + <om:usesUnit rdf:resource="&om;terakatal"/> + <om:usesUnit rdf:resource="&om;amylaseUnit"/> + <om:usesUnit rdf:resource="&om;deltaA450"/> + <om:usesUnit rdf:resource="&om;deltaA450PerSecond-Time"/> + <om:usesUnit rdf:resource="&om;katalPerCubicmetre"/> + <om:usesUnit rdf:resource="&om;nanokatalPerMilligram"/> + <om:usesUnit rdf:resource="&om;deltaA450PerSecond-TimePerMilligram"/> + </om:ApplicationArea> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Frequency Subclass Upper Ontology --> + <!-- Catalytic Activity Upper Ontology --> + <!-- Catalytic Activity Concentration Upper Ontology --> + <!-- Specific Catalytic Activity Upper Ontology --> + <!-- Specific Catalytic Activity Subclass Upper Ontology --> + <!-- Acidity Upper Ontology --> + <!-- Amphiphilicity Upper Ontology --> + <!-- Hydrophilicity Upper Ontology --> + <!-- Hydrophobicity Upper Ontology --> + <!-- Lipophilicity Upper Ontology --> + <!-- Salt Strength Upper Ontology --> + + <!-- Frequency Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;CollisionFrequency"> + <rdfs:label xml:lang="en">collision frequency</rdfs:label> + <rdfs:comment xml:lang="en">Collision frequency is the average number of collisions between reacting molecules per unit time.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Frequency"/> + <om:symbol>ν_coll</om:symbol> + <om:alternativeSymbol>ν_c</om:alternativeSymbol> + </owl:Class> + + <!-- Catalytic Activity Upper Ontology --> + + <owl:Class rdf:about="&om;CatalyticActivity"> + <rdfs:label xml:lang="en">catalytic activity</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Catalytic Activity Concentration Upper Ontology --> + + <owl:Class rdf:about="&om;CatalyticActivityConcentration"> + <rdfs:label xml:lang="en">catalytic activity concentration</rdfs:label> + <om:alternativeLabel xml:lang="en">catalytic concentration</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Specific Catalytic Activity Upper Ontology --> + + <owl:Class rdf:about="&om;SpecificCatalyticActivity"> + <rdfs:label xml:lang="en">specific catalytic activity</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Specific Catalytic Activity Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;SpecificAmylaseActivity"> + <rdfs:label xml:lang="en">specific amylase activity</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SpecificCatalyticActivity"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificProteaseActivity"> + <rdfs:label xml:lang="en">specific protease activity</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SpecificCatalyticActivity"/> + </owl:Class> + + <!-- Acidity Upper Ontology --> + + <owl:Class rdf:about="&om;Acidity"> + <rdfs:label xml:lang="en">acidity</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>pH</om:symbol> + </owl:Class> + + <!-- Amphiphilicity Upper Ontology --> + + <owl:Class rdf:about="&om;Amphiphilicity"> + <rdfs:label xml:lang="en">amphiphilicity</rdfs:label> + <rdfs:label xml:lang="nl">amfifiliciteit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Hydrophilicity Upper Ontology --> + + <owl:Class rdf:about="&om;Hydrophilicity"> + <rdfs:label xml:lang="en">hydrophilicity</rdfs:label> + <rdfs:label xml:lang="nl">hydrofiliciteit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Hydrophobicity Upper Ontology --> + + <owl:Class rdf:about="&om;Hydrophobicity"> + <rdfs:label xml:lang="en">hydrophobicity</rdfs:label> + <rdfs:label xml:lang="nl">hydrofobiciteit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Lipophilicity Upper Ontology --> + + <owl:Class rdf:about="&om;Lipophilicity"> + <rdfs:label xml:lang="en">lipophilicity</rdfs:label> + <rdfs:label xml:lang="nl">lipofiliciteit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Salt Strength Upper Ontology --> + + <owl:Class rdf:about="&om;SaltStrength"> + <rdfs:label xml:lang="en">salt strength</rdfs:label> + <rdfs:label xml:lang="nl">zoutsterkte</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Unit of Measure Ontologies --> + + <!-- Contents --> + + <!-- Mole Per Second Ontology --> + <!-- Katal Ontology --> + <!-- Katal Multiples and Submultiples Ontology --> + <!-- Catalytic Activity Unit Ontology --> + <!-- Katal Per Cubic Metre Ontology --> + <!-- Nanokatal Per Milligram Ontology --> + + <!-- Mole Per Second Ontology --> + + <om:UnitDivision rdf:about="&om;molePerSecond-Time"> + <rdfs:label xml:lang="en">mole per second</rdfs:label> + <rdfs:label xml:lang="nl">mol per seconde</rdfs:label> + <om:symbol>mol/s</om:symbol> + <om:alternativeSymbol>mol s-1</om:alternativeSymbol> + <om:alternativeSymbol>mol·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;mole"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;micromolePerSecond-Time"> + <rdfs:label xml:lang="en">micromole per second</rdfs:label> + <rdfs:label xml:lang="nl">micromol per seconde</rdfs:label> + <om:symbol>μmol/s</om:symbol> + <om:alternativeSymbol>μmol s-1</om:alternativeSymbol> + <om:alternativeSymbol>μmol·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;micromole"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;AmountOfSubstanceFlow"> + <om:commonlyHasUnit rdf:resource="&om;molePerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;micromolePerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;CatalyticActivity"> + <om:commonlyHasUnit rdf:resource="&om;molePerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;AmountOfSubstanceFlowUnit"> + <rdfs:label xml:lang="en">amount of substance flow unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;molePerSecond-Time"/> + <om:UnitDivision rdf:about="&om;micromolePerSecond-Time"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;CatalyticActivityUnit"> + <rdfs:label xml:lang="en">catalytic activity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;amylaseUnit"/> + <om:Unit rdf:about="&om;katal"/> + <om:UnitDivision rdf:about="&om;molePerSecond-Time"/> + <om:UnitDivision rdf:about="&om;deltaA450PerSecond-Time"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedKatal"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AmountOfSubstanceFlow"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;AmountOfSubstanceFlowUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;CatalyticActivity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;CatalyticActivityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Katal Ontology --> + + <om:Unit rdf:about="&om;katal"> + <rdfs:label xml:lang="en">katal</rdfs:label> + <rdfs:label xml:lang="nl">katal</rdfs:label> + <rdfs:comment xml:lang="en">The katal is a unit of catalytic activity defined as mole divided by second.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>kat</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;molePerSecond-Time"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;CatalyticActivity"> + <om:commonlyHasUnit rdf:resource="&om;katal"/> + </owl:Class> + + <!-- Katal Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctokatal"> + <rdfs:label xml:lang="en">yoctokatal</rdfs:label> + <rdfs:label xml:lang="nl">yoctokatal</rdfs:label> + <rdfs:comment xml:lang="en">The yoctokatal is a unit of catalytic activity defined as 1.0e-24 katal.</rdfs:comment> + <om:symbol>ykat</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptokatal"> + <rdfs:label xml:lang="en">zeptokatal</rdfs:label> + <rdfs:label xml:lang="nl">zeptokatal</rdfs:label> + <rdfs:comment xml:lang="en">The zeptkatal is a unit of catalytic activity defined as 1.0e-21 katal.</rdfs:comment> + <om:symbol>zkat</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attokatal"> + <rdfs:label xml:lang="en">attokatal</rdfs:label> + <rdfs:label xml:lang="nl">attokatal</rdfs:label> + <rdfs:comment xml:lang="en">The attokatal is a unit of catalytic activity defined as 1.0e-18 katal.</rdfs:comment> + <om:symbol>akat</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtokatal"> + <rdfs:label xml:lang="en">femtokatal</rdfs:label> + <rdfs:label xml:lang="nl">femtokatal</rdfs:label> + <rdfs:comment xml:lang="en">The femtokatal is a unit of catalytic activity defined as 1.0e-15 katal.</rdfs:comment> + <om:symbol>fkat</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picokatal"> + <rdfs:label xml:lang="en">picokatal</rdfs:label> + <rdfs:label xml:lang="nl">picokatal</rdfs:label> + <rdfs:comment xml:lang="en">The picokatal is a unit of catalytic activity defined as 1.0e-12 katal.</rdfs:comment> + <om:symbol>pkat</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanokatal"> + <rdfs:label xml:lang="en">nanokatal</rdfs:label> + <rdfs:label xml:lang="nl">nanokatal</rdfs:label> + <rdfs:comment xml:lang="en">The nanokatal is a unit of catalytic activity defined as 1.0e-9 katal.</rdfs:comment> + <om:symbol>nkat</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microkatal"> + <rdfs:label xml:lang="en">microkatal</rdfs:label> + <rdfs:label xml:lang="nl">microkatal</rdfs:label> + <rdfs:comment xml:lang="en">The microkatal is a unit of catalytic activity defined as 1.0e-6 katal.</rdfs:comment> + <om:symbol>μkat</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millikatal"> + <rdfs:label xml:lang="en">millikatal</rdfs:label> + <rdfs:label xml:lang="nl">millikatal</rdfs:label> + <rdfs:comment xml:lang="en">The millikatal is a unit of catalytic activity defined as 1.0e-3 katal.</rdfs:comment> + <om:symbol>mkat</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centikatal"> + <rdfs:label xml:lang="en">centikatal</rdfs:label> + <rdfs:label xml:lang="nl">centikatal</rdfs:label> + <rdfs:comment xml:lang="en">The centikatal is a unit of catalytic activity defined as 1.0e-2 katal.</rdfs:comment> + <om:symbol>ckat</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decikatal"> + <rdfs:label xml:lang="en">decikatal</rdfs:label> + <rdfs:label xml:lang="nl">decikatal</rdfs:label> + <rdfs:comment xml:lang="en">The decikatal is a unit of catalytic activity defined as 1.0e-1 katal.</rdfs:comment> + <om:symbol>dkat</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decakatal"> + <rdfs:label xml:lang="en">decakatal</rdfs:label> + <rdfs:label xml:lang="nl">decakatal</rdfs:label> + <rdfs:comment xml:lang="en">The decakatal is a unit of catalytic activity defined as 1.0e1 katal.</rdfs:comment> + <om:symbol>dakat</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectokatal"> + <rdfs:label xml:lang="en">hectokatal</rdfs:label> + <rdfs:label xml:lang="nl">hectokatal</rdfs:label> + <rdfs:comment xml:lang="en">The hectokatal is a unit of catalytic activity defined as 1.0e2 katal.</rdfs:comment> + <om:symbol>hkat</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilokatal"> + <rdfs:label xml:lang="en">kilokatal</rdfs:label> + <rdfs:label xml:lang="nl">kilokatal</rdfs:label> + <rdfs:comment xml:lang="en">The kilokatal is a unit of catalytic activity defined as 1.0e3 katal.</rdfs:comment> + <om:symbol>kkat</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megakatal"> + <rdfs:label xml:lang="en">megakatal</rdfs:label> + <rdfs:label xml:lang="nl">megakatal</rdfs:label> + <rdfs:comment xml:lang="en">The megakatal is a unit of catalytic activity defined as 1.0e6 katal.</rdfs:comment> + <om:symbol>Mkat</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigakatal"> + <rdfs:label xml:lang="en">gigakatal</rdfs:label> + <rdfs:label xml:lang="nl">gigakatal</rdfs:label> + <rdfs:comment xml:lang="en">The gigakatal is a unit of catalytic activity defined as 1.0e9 katal.</rdfs:comment> + <om:symbol>Gkat</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;terakatal"> + <rdfs:label xml:lang="en">terakatal</rdfs:label> + <rdfs:label xml:lang="nl">terakatal</rdfs:label> + <rdfs:comment xml:lang="en">The terakatal is a unit of catalytic activity defined as 1.0e12 katal.</rdfs:comment> + <om:symbol>Tkat</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petakatal"> + <rdfs:label xml:lang="en">petakatal</rdfs:label> + <rdfs:label xml:lang="nl">petakatal</rdfs:label> + <rdfs:comment xml:lang="en">The petakatal is a unit of catalytic activity defined as 1.0e15 katal.</rdfs:comment> + <om:symbol>Pkat</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exakatal"> + <rdfs:label xml:lang="en">exakatal</rdfs:label> + <rdfs:label xml:lang="nl">exakatal</rdfs:label> + <rdfs:comment xml:lang="en">The exakatal is a unit of catalytic activity defined as 1.0e18 katal.</rdfs:comment> + <om:symbol>Ekat</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettakatal"> + <rdfs:label xml:lang="en">zettakatal</rdfs:label> + <rdfs:label xml:lang="nl">zettakatal</rdfs:label> + <rdfs:comment xml:lang="en">The zettakatal is a unit of catalytic activity defined as 1.0e21 katal.</rdfs:comment> + <om:symbol>Zkat</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottakatal"> + <rdfs:label xml:lang="en">yottakatal</rdfs:label> + <rdfs:label xml:lang="nl">yottakatal</rdfs:label> + <rdfs:comment xml:lang="en">The yottakatal is a unit of catalytic activity defined as 1.0e24 katal.</rdfs:comment> + <om:symbol>Ykat</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;katal"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedKatal"> + <rdfs:label xml:lang="en">prefixed katal</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;katal"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;CatalyticActivity"> + <om:commonlyHasUnit rdf:resource="&om;attokatal"/> + <om:commonlyHasUnit rdf:resource="&om;centikatal"/> + <om:commonlyHasUnit rdf:resource="&om;decakatal"/> + <om:commonlyHasUnit rdf:resource="&om;decikatal"/> + <om:commonlyHasUnit rdf:resource="&om;exakatal"/> + <om:commonlyHasUnit rdf:resource="&om;femtokatal"/> + <om:commonlyHasUnit rdf:resource="&om;gigakatal"/> + <om:commonlyHasUnit rdf:resource="&om;hectokatal"/> + <om:commonlyHasUnit rdf:resource="&om;kilokatal"/> + <om:commonlyHasUnit rdf:resource="&om;megakatal"/> + <om:commonlyHasUnit rdf:resource="&om;microkatal"/> + <om:commonlyHasUnit rdf:resource="&om;millikatal"/> + <om:commonlyHasUnit rdf:resource="&om;nanokatal"/> + <om:commonlyHasUnit rdf:resource="&om;petakatal"/> + <om:commonlyHasUnit rdf:resource="&om;picokatal"/> + <om:commonlyHasUnit rdf:resource="&om;terakatal"/> + </owl:Class> + + <!-- Catalytic Activity Unit Ontology --> + + <om:Unit rdf:about="&om;amylaseUnit"> + <rdfs:label xml:lang="en">amylase unit</rdfs:label> + <rdfs:comment xml:lang="en">The amylase unit is a unit of catalytic activity.</rdfs:comment> + <om:symbol>AU</om:symbol> + <om:alternativeSymbol>U</om:alternativeSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;deltaA450"> + <rdfs:label xml:lang="en">delta A450</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:UnitDivision rdf:about="&om;deltaA450PerSecond-Time"> + <rdfs:label xml:lang="en">delta A450 per second</rdfs:label> + <rdfs:label xml:lang="nl">delta A450 per seconde</rdfs:label> + <om:hasNumerator rdf:resource="&om;deltaA450"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;catalyticActivity-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;CatalyticActivity"> + <om:commonlyHasUnit rdf:resource="&om;amylaseUnit"/> + <om:commonlyHasUnit rdf:resource="&om;deltaA450PerSecond-Time"/> + </owl:Class> + + <!-- Katal Per Cubic Metre Ontology --> + + <om:UnitDivision rdf:about="&om;katalPerCubicmetre"> + <rdfs:label xml:lang="en">katal per cubic metre</rdfs:label> + <rdfs:label xml:lang="nl">katal per kubieke meter</rdfs:label> + <om:symbol>kat/m3</om:symbol> + <om:alternativeSymbol>kat m-3</om:alternativeSymbol> + <om:alternativeSymbol>kat·m-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;katal"/> + <om:hasDenominator rdf:resource="&om;cubicMetre"/> + <om:hasDimension rdf:resource="&om;catalyticActivityConcentration-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;CatalyticActivityConcentration"> + <om:commonlyHasUnit rdf:resource="&om;katalPerCubicmetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;CatalyticActivityConcentrationUnit"> + <rdfs:label xml:lang="en">catalytic activity concentration unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;katalPerCubicmetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;CatalyticActivityConcentration"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;CatalyticActivityConcentrationUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Nanokatal Per Milligram Ontology --> + + <om:UnitDivision rdf:about="&om;nanokatalPerMilligram"> + <rdfs:label xml:lang="en">nanokatal per milligram</rdfs:label> + <rdfs:label xml:lang="nl">nanokatal per milligram</rdfs:label> + <om:symbol>nkat/mg</om:symbol> + <om:alternativeSymbol>nkat mg-1</om:alternativeSymbol> + <om:alternativeSymbol>nkat·mg-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;nanokatal"/> + <om:hasDenominator rdf:resource="&om;milligram"/> + <om:hasDimension rdf:resource="&om;specificCatalyticActivity-Dimension"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;deltaA450PerSecond-TimePerMilligram"> + <rdfs:label xml:lang="en">delta A450 per second per milligram</rdfs:label> + <rdfs:label xml:lang="nl">delta A450 per seconde per milligram</rdfs:label> + <om:hasNumerator rdf:resource="&om;deltaA450PerSecond-Time"/> + <om:hasDenominator rdf:resource="&om;milligram"/> + <om:hasDimension rdf:resource="&om;specificCatalyticActivity-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;SpecificCatalyticActivity"> + <om:commonlyHasUnit rdf:resource="&om;nanokatalPerMilligram"/> + <om:commonlyHasUnit rdf:resource="&om;deltaA450PerSecond-TimePerMilligram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificCatalyticActivityUnit"> + <rdfs:label xml:lang="en">specific catalytic activity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;nanokatalPerMilligram"/> + <om:UnitDivision rdf:about="&om;deltaA450PerSecond-TimePerMilligram"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificCatalyticActivity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;SpecificCatalyticActivityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Dimension Ontologies --> + + <!-- Contents --> + + <!-- Catalytic Activity Dimension Ontology --> + <!-- Catalytic Activity Concentration Dimension Ontology --> + <!-- Specific Catalytic Activity Dimension Ontology --> + + <!-- Catalytic Activity Dimension Ontology --> + + <om:Dimension rdf:about="&om;catalyticActivity-Dimension"> + <rdfs:label xml:lang="en">catalytic activity dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;CatalyticActivity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;catalyticActivity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Catalytic Activity Concentration Dimension Ontology --> + + <om:Dimension rdf:about="&om;catalyticActivityConcentration-Dimension"> + <rdfs:label xml:lang="en">catalytic activity concentration dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-3</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;CatalyticActivityConcentration"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;catalyticActivityConcentration-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Specific Catalytic Activity Dimension Ontology --> + + <om:Dimension rdf:about="&om;specificCatalyticActivity-Dimension"> + <rdfs:label xml:lang="en">specific catalytic activity dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;SpecificCatalyticActivity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;specificCatalyticActivity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Photometry Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Unit of Measure Ontologies --> + <!-- Dimension Ontologies --> + + <om:ApplicationArea rdf:about="&om;photometry"> + <rdfs:label xml:lang="en">photometry</rdfs:label> + <rdfs:label xml:lang="nl">fotometrie</rdfs:label> + <!-- <om:uses_application_area rdf:resource="&om;space_and_time"/> --> + <om:usesQuantity rdf:resource="&om;LuminousIntensity"/> + <om:usesQuantity rdf:resource="&om;Luminance"/> + <om:usesQuantity rdf:resource="&om;LuminousFlux"/> + <om:usesQuantity rdf:resource="&om;LuminousEnergy"/> + <om:usesQuantity rdf:resource="&om;Illuminance"/> + <om:usesQuantity rdf:resource="&om;Exposure"/> + <om:usesQuantity rdf:resource="&om;LuminousEfficacy"/> + <om:usesUnit rdf:resource="&om;candela"/> + <om:usesUnit rdf:resource="&om;attocandela"/> + <om:usesUnit rdf:resource="&om;centicandela"/> + <om:usesUnit rdf:resource="&om;decacandela"/> + <om:usesUnit rdf:resource="&om;decicandela"/> + <om:usesUnit rdf:resource="&om;exacandela"/> + <om:usesUnit rdf:resource="&om;femtocandela"/> + <om:usesUnit rdf:resource="&om;gigacandela"/> + <om:usesUnit rdf:resource="&om;hectocandela"/> + <om:usesUnit rdf:resource="&om;kilocandela"/> + <om:usesUnit rdf:resource="&om;megacandela"/> + <om:usesUnit rdf:resource="&om;microcandela"/> + <om:usesUnit rdf:resource="&om;millicandela"/> + <om:usesUnit rdf:resource="&om;nanocandela"/> + <om:usesUnit rdf:resource="&om;petacandela"/> + <om:usesUnit rdf:resource="&om;picocandela"/> + <om:usesUnit rdf:resource="&om;teracandela"/> + <om:usesUnit rdf:resource="&om;candelaPerSquareMetre"/> + <om:usesUnit rdf:resource="&om;candelaPerSquareCentimetre"/> + <om:usesUnit rdf:resource="&om;footlambert"/> + <om:usesUnit rdf:resource="&om;lambert"/> + <om:usesUnit rdf:resource="&om;stilb"/> + <om:usesUnit rdf:resource="&om;candelaSteradian"/> + <om:usesUnit rdf:resource="&om;lumen"/> + <om:usesUnit rdf:resource="&om;attolumen"/> + <om:usesUnit rdf:resource="&om;centilumen"/> + <om:usesUnit rdf:resource="&om;decalumen"/> + <om:usesUnit rdf:resource="&om;decilumen"/> + <om:usesUnit rdf:resource="&om;exalumen"/> + <om:usesUnit rdf:resource="&om;femtolumen"/> + <om:usesUnit rdf:resource="&om;gigalumen"/> + <om:usesUnit rdf:resource="&om;hectolumen"/> + <om:usesUnit rdf:resource="&om;kilolumen"/> + <om:usesUnit rdf:resource="&om;megalumen"/> + <om:usesUnit rdf:resource="&om;microlumen"/> + <om:usesUnit rdf:resource="&om;millilumen"/> + <om:usesUnit rdf:resource="&om;nanolumen"/> + <om:usesUnit rdf:resource="&om;petalumen"/> + <om:usesUnit rdf:resource="&om;picolumen"/> + <om:usesUnit rdf:resource="&om;teralumen"/> + <om:usesUnit rdf:resource="&om;lumenPerSquareMetre"/> + <om:usesUnit rdf:resource="&om;lux"/> + <om:usesUnit rdf:resource="&om;attolux"/> + <om:usesUnit rdf:resource="&om;centilux"/> + <om:usesUnit rdf:resource="&om;decalux"/> + <om:usesUnit rdf:resource="&om;decilux"/> + <om:usesUnit rdf:resource="&om;exalux"/> + <om:usesUnit rdf:resource="&om;femtolux"/> + <om:usesUnit rdf:resource="&om;gigalux"/> + <om:usesUnit rdf:resource="&om;hectolux"/> + <om:usesUnit rdf:resource="&om;kilolux"/> + <om:usesUnit rdf:resource="&om;megalux"/> + <om:usesUnit rdf:resource="&om;microlux"/> + <om:usesUnit rdf:resource="&om;millilux"/> + <om:usesUnit rdf:resource="&om;nanolux"/> + <om:usesUnit rdf:resource="&om;petalux"/> + <om:usesUnit rdf:resource="&om;picolux"/> + <om:usesUnit rdf:resource="&om;teralux"/> + <om:usesUnit rdf:resource="&om;footcandle"/> + <om:usesUnit rdf:resource="&om;phot"/> + <om:usesUnit rdf:resource="&om;lumenSecond-Time"/> + <om:usesUnit rdf:resource="&om;luxSecond-Time"/> + <om:usesUnit rdf:resource="&om;lumenPerWatt"/> + </om:ApplicationArea> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Luminous Intensity Upper Ontology --> + <!-- Luminance Upper Ontology --> + <!-- Luminous Flux Upper Ontology --> + <!-- Luminous Energy Upper Ontology --> + <!-- Illuminance Upper Ontology --> + <!-- Exposure Upper Ontology --> + <!-- Luminous Efficacy Upper Ontology --> + + <!-- Luminous Intensity Upper Ontology --> + + <owl:Class rdf:about="&om;LuminousIntensity"> + <rdfs:label xml:lang="en">luminous intensity</rdfs:label> + <rdfs:label xml:lang="nl">lichtsterkte</rdfs:label> + <rdfs:comment xml:lang="en">Luminous intensity is the wavelength-weighted power emitted by a light source in a particular direction per unit solid angle. It is a base quantity in the International System of Units. Luminous intensity is luminous flux divided by solid angle.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>I</om:symbol> + <om:alternativeSymbol>I_v</om:alternativeSymbol> + </owl:Class> + + <!-- Luminance Upper Ontology --> + + <owl:Class rdf:about="&om;Luminance"> + <rdfs:label xml:lang="en">luminance</rdfs:label> + <rdfs:comment xml:lang="en">Luminous flux is the total visible energy emitted by a source per unit time.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>L</om:symbol> + <om:alternativeSymbol>L_v</om:alternativeSymbol> + </owl:Class> + + <!-- Luminous Flux Upper Ontology --> + + <owl:Class rdf:about="&om;LuminousFlux"> + <rdfs:label xml:lang="en">luminous flux</rdfs:label> + <rdfs:comment xml:lang="en">Luminous flux is the total visible energy emitted by a source per unit time.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>F</om:symbol> + </owl:Class> + + <!-- Luminous Energy Upper Ontology --> + + <owl:Class rdf:about="&om;LuminousEnergy"> + <rdfs:label xml:lang="en">luminous energy</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>F</om:symbol> + </owl:Class> + + <!-- Illuminance Upper Ontology --> + + <owl:Class rdf:about="&om;Illuminance"> + <rdfs:label xml:lang="en">illuminance</rdfs:label> + <om:alternativeLabel xml:lang="en">illumination</om:alternativeLabel> + <rdfs:comment xml:lang="en">Illuminance is the total luminous flux incident on a surface per unit area.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Φ</om:symbol> + <om:alternativeSymbol>Φ_v</om:alternativeSymbol> + </owl:Class> + + <!-- Exposure Upper Ontology --> + + <owl:Class rdf:about="&om;Exposure"> + <rdfs:label xml:lang="en">exposure</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Luminous Efficacy Upper Ontology --> + + <owl:Class rdf:about="&om;LuminousEfficacy"> + <rdfs:label xml:lang="en">luminous efficacy</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Unit of Measure Ontologies --> + + <!-- Contents --> + + <!-- Candela Ontology --> + <!-- Candela Multiples and Submultiples Ontology --> + <!-- Candela Per Square Metre Ontology --> + <!-- Candela Per Square Centimetre Ontology --> + <!-- Luminance Unit Ontology --> + <!-- Candela Steradian Ontology --> + <!-- Lumen Ontology --> + <!-- Lumen Multiples and Submultiples Ontology --> + <!-- Lumen Second Ontology --> + <!-- Lumen Per Square Metre Ontology --> + <!-- Lux Ontology --> + <!-- Lux Multiples and Submultiples Ontology --> + <!-- Illuminance Unit Ontology --> + <!-- Lux Second Ontology --> + <!-- Lumen Per Watt Ontology --> + + <!-- Candela Ontology --> + + <om:Unit rdf:about="&om;candela"> + <rdfs:label xml:lang="en">candela</rdfs:label> + <rdfs:label xml:lang="nl">candela</rdfs:label> + <rdfs:label xml:lang="zh">坎德拉</rdfs:label> + <om:symbol>cd</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:Unit> + + <om:LuminousIntensity rdf:about="&om;luminousIntensityInAGivenDirectionOfASourceThatEmitsMonochromaticRadiationOfFrequency540e12HertzAndThatHasARadiantIntensityInThatDirectionOf1683WattPerSteradian"> + <rdfs:label xml:lang="en">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</rdfs:label> + </om:LuminousIntensity> + + <om:Unit rdf:about="&om;candela"> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:hasQuantity rdf:resource="&om;luminousIntensityInAGivenDirectionOfASourceThatEmitsMonochromaticRadiationOfFrequency540e12HertzAndThatHasARadiantIntensityInThatDirectionOf1683WattPerSteradian"/> + </om:Unit> + + <owl:Class rdf:about="&om;LuminousIntensity"> + <om:commonlyHasUnit rdf:resource="&om;candela"/> + </owl:Class> + + <owl:Class rdf:about="&om;LuminousIntensityUnit"> + <rdfs:label xml:lang="en">luminous intensity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;candela"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedCandela"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;LuminousIntensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;LuminousIntensityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Candela Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctocandela"> + <rdfs:label xml:lang="en">yoctocandela</rdfs:label> + <rdfs:label xml:lang="nl">yoctocandela</rdfs:label> + <rdfs:comment xml:lang="en">The yoctocandela is a unit of luminous intensity defined as 1.0e-24 candela.</rdfs:comment> + <om:symbol>ycd</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptocandela"> + <rdfs:label xml:lang="en">zeptocandela</rdfs:label> + <rdfs:label xml:lang="nl">zeptocandela</rdfs:label> + <rdfs:comment xml:lang="en">The zeptcandela is a unit of luminous intensity defined as 1.0e-21 candela.</rdfs:comment> + <om:symbol>zcd</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attocandela"> + <rdfs:label xml:lang="en">attocandela</rdfs:label> + <rdfs:label xml:lang="nl">attocandela</rdfs:label> + <rdfs:comment xml:lang="en">The attocandela is a unit of luminous intensity defined as 1.0e-18 candela.</rdfs:comment> + <om:symbol>acd</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtocandela"> + <rdfs:label xml:lang="en">femtocandela</rdfs:label> + <rdfs:label xml:lang="nl">femtocandela</rdfs:label> + <rdfs:comment xml:lang="en">The femtocandela is a unit of luminous intensity defined as 1.0e-15 candela.</rdfs:comment> + <om:symbol>fcd</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picocandela"> + <rdfs:label xml:lang="en">picocandela</rdfs:label> + <rdfs:label xml:lang="nl">picocandela</rdfs:label> + <rdfs:comment xml:lang="en">The picocandela is a unit of luminous intensity defined as 1.0e-12 candela.</rdfs:comment> + <om:symbol>pcd</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanocandela"> + <rdfs:label xml:lang="en">nanocandela</rdfs:label> + <rdfs:label xml:lang="nl">nanocandela</rdfs:label> + <rdfs:comment xml:lang="en">The nanocandela is a unit of luminous intensity defined as 1.0e-9 candela.</rdfs:comment> + <om:symbol>ncd</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microcandela"> + <rdfs:label xml:lang="en">microcandela</rdfs:label> + <rdfs:label xml:lang="nl">microcandela</rdfs:label> + <rdfs:comment xml:lang="en">The microcandela is a unit of luminous intensity defined as 1.0e-6 candela.</rdfs:comment> + <om:symbol>μcd</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millicandela"> + <rdfs:label xml:lang="en">millicandela</rdfs:label> + <rdfs:label xml:lang="nl">millicandela</rdfs:label> + <rdfs:comment xml:lang="en">The millicandela is a unit of luminous intensity defined as 1.0e-3 candela.</rdfs:comment> + <om:symbol>mcd</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centicandela"> + <rdfs:label xml:lang="en">centicandela</rdfs:label> + <rdfs:label xml:lang="nl">centicandela</rdfs:label> + <rdfs:comment xml:lang="en">The centicandela is a unit of luminous intensity defined as 1.0e-2 candela.</rdfs:comment> + <om:symbol>ccd</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decicandela"> + <rdfs:label xml:lang="en">decicandela</rdfs:label> + <rdfs:label xml:lang="nl">decicandela</rdfs:label> + <rdfs:comment xml:lang="en">The decicandela is a unit of luminous intensity defined as 1.0e-1 candela.</rdfs:comment> + <om:symbol>dcd</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decacandela"> + <rdfs:label xml:lang="en">decacandela</rdfs:label> + <rdfs:label xml:lang="nl">decacandela</rdfs:label> + <rdfs:comment xml:lang="en">The decacandela is a unit of luminous intensity defined as 1.0e1 candela.</rdfs:comment> + <om:symbol>dacd</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectocandela"> + <rdfs:label xml:lang="en">hectocandela</rdfs:label> + <rdfs:label xml:lang="nl">hectocandela</rdfs:label> + <rdfs:comment xml:lang="en">The hectocandela is a unit of luminous intensity defined as 1.0e2 candela.</rdfs:comment> + <om:symbol>hcd</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilocandela"> + <rdfs:label xml:lang="en">kilocandela</rdfs:label> + <rdfs:label xml:lang="nl">kilocandela</rdfs:label> + <rdfs:comment xml:lang="en">The kilocandela is a unit of luminous intensity defined as 1.0e3 candela.</rdfs:comment> + <om:symbol>kcd</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megacandela"> + <rdfs:label xml:lang="en">megacandela</rdfs:label> + <rdfs:label xml:lang="nl">megacandela</rdfs:label> + <rdfs:comment xml:lang="en">The megacandela is a unit of luminous intensity defined as 1.0e6 candela.</rdfs:comment> + <om:symbol>Mcd</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigacandela"> + <rdfs:label xml:lang="en">gigacandela</rdfs:label> + <rdfs:label xml:lang="nl">gigacandela</rdfs:label> + <rdfs:comment xml:lang="en">The gigacandela is a unit of luminous intensity defined as 1.0e9 candela.</rdfs:comment> + <om:symbol>Gcd</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;teracandela"> + <rdfs:label xml:lang="en">teracandela</rdfs:label> + <rdfs:label xml:lang="nl">teracandela</rdfs:label> + <rdfs:comment xml:lang="en">The teracandela is a unit of luminous intensity defined as 1.0e12 candela.</rdfs:comment> + <om:symbol>Tcd</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petacandela"> + <rdfs:label xml:lang="en">petacandela</rdfs:label> + <rdfs:label xml:lang="nl">petacandela</rdfs:label> + <rdfs:comment xml:lang="en">The petacandela is a unit of luminous intensity defined as 1.0e15 candela.</rdfs:comment> + <om:symbol>Pcd</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exacandela"> + <rdfs:label xml:lang="en">exacandela</rdfs:label> + <rdfs:label xml:lang="nl">exacandela</rdfs:label> + <rdfs:comment xml:lang="en">The exacandela is a unit of luminous intensity defined as 1.0e18 candela.</rdfs:comment> + <om:symbol>Ecd</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettacandela"> + <rdfs:label xml:lang="en">zettacandela</rdfs:label> + <rdfs:label xml:lang="nl">zettacandela</rdfs:label> + <rdfs:comment xml:lang="en">The zettacandela is a unit of luminous intensity defined as 1.0e21 candela.</rdfs:comment> + <om:symbol>Zcd</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottacandela"> + <rdfs:label xml:lang="en">yottacandela</rdfs:label> + <rdfs:label xml:lang="nl">yottacandela</rdfs:label> + <rdfs:comment xml:lang="en">The yottacandela is a unit of luminous intensity defined as 1.0e24 candela.</rdfs:comment> + <om:symbol>Ycd</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;candela"/> + <om:hasDimension rdf:resource="&om;luminousIntensity-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedCandela"> + <rdfs:label xml:lang="en">prefixed candela</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;candela"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;LuminousIntensity"> + <om:commonlyHasUnit rdf:resource="&om;attocandela"/> + <om:commonlyHasUnit rdf:resource="&om;centicandela"/> + <om:commonlyHasUnit rdf:resource="&om;decacandela"/> + <om:commonlyHasUnit rdf:resource="&om;decicandela"/> + <om:commonlyHasUnit rdf:resource="&om;exacandela"/> + <om:commonlyHasUnit rdf:resource="&om;femtocandela"/> + <om:commonlyHasUnit rdf:resource="&om;gigacandela"/> + <om:commonlyHasUnit rdf:resource="&om;hectocandela"/> + <om:commonlyHasUnit rdf:resource="&om;kilocandela"/> + <om:commonlyHasUnit rdf:resource="&om;megacandela"/> + <om:commonlyHasUnit rdf:resource="&om;microcandela"/> + <om:commonlyHasUnit rdf:resource="&om;millicandela"/> + <om:commonlyHasUnit rdf:resource="&om;nanocandela"/> + <om:commonlyHasUnit rdf:resource="&om;petacandela"/> + <om:commonlyHasUnit rdf:resource="&om;picocandela"/> + <om:commonlyHasUnit rdf:resource="&om;teracandela"/> + </owl:Class> + + <!-- Candela Per Square Metre Ontology --> + + <om:UnitDivision rdf:about="&om;candelaPerSquareMetre"> + <rdfs:label xml:lang="en">candela per square metre</rdfs:label> + <rdfs:label xml:lang="nl">candela per vierkante meter</rdfs:label> + <rdfs:comment xml:lang="en">Candela per square metre is a unit of luminance defined as candela divided by square metre.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>cd/m2</om:symbol> + <om:alternativeSymbol>cd m-2</om:alternativeSymbol> + <om:alternativeSymbol>cd·m-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;candela"/> + <om:hasDenominator rdf:resource="&om;squareMetre"/> + <om:hasDimension rdf:resource="&om;luminance-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Luminance"> + <om:commonlyHasUnit rdf:resource="&om;candelaPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;LuminanceUnit"> + <rdfs:label xml:lang="en">luminance unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;footlambert"/> + <om:Unit rdf:about="&om;lambert"/> + <om:Unit rdf:about="&om;stilb"/> + <om:UnitDivision rdf:about="&om;candelaPerSquareMetre"/> + <om:UnitDivision rdf:about="&om;candelaPerSquareCentimetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Luminance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;LuminanceUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Candela Per Square Centimetre Ontology --> + + <om:UnitDivision rdf:about="&om;candelaPerSquareCentimetre"> + <rdfs:label xml:lang="en">candela per square centimetre</rdfs:label> + <rdfs:label xml:lang="nl">candela per vierkante centimeter</rdfs:label> + <om:symbol>cd/cm2</om:symbol> + <om:alternativeSymbol>cd cm-2</om:alternativeSymbol> + <om:alternativeSymbol>cd·cm-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;candela"/> + <om:hasDenominator rdf:resource="&om;squareCentimetre"/> + <om:hasDimension rdf:resource="&om;luminance-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Luminance"> + <om:commonlyHasUnit rdf:resource="&om;candelaPerSquareCentimetre"/> + </owl:Class> + + <!-- Luminance Unit Ontology --> + + <om:Unit rdf:about="&om;footlambert"> + <rdfs:label xml:lang="en">footlambert</rdfs:label> + <rdfs:comment xml:lang="en">The footlambert is a unit of luminance defined as 3.426259 candela per square metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">3.426259</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;candelaPerSquareMetre"/> + <om:hasDimension rdf:resource="&om;luminance-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;lambert"> + <rdfs:label xml:lang="en">lambert</rdfs:label> + <rdfs:label xml:lang="nl">lambert</rdfs:label> + <rdfs:comment xml:lang="en">The lambert is a unit of luminance defined as 3.183099e3 candela per square metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">3183.099</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;candelaPerSquareMetre"/> + <om:hasDimension rdf:resource="&om;luminance-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;stilb"> + <rdfs:label xml:lang="en">stilb</rdfs:label> + <rdfs:label xml:lang="nl">stilb</rdfs:label> + <rdfs:comment xml:lang="en">The stilb is a unit of luminance defined as 1.0e4 candela per square metre.</rdfs:comment> + <om:symbol>sb</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">10000</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;candelaPerSquareMetre"/> + <om:hasDimension rdf:resource="&om;luminance-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e4CandelaPerSquareMetre"> + <om:hasNumericalValue>1.0e4</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;candelaPerSquareMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_3.183099e3CandelaPerSquareMetre"> + <om:hasNumericalValue>3.183099e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;candelaPerSquareMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_3.426259CandelaPerSquareMetre"> + <om:hasNumericalValue>3.426259</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;candelaPerSquareMetre"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Luminance"> + <om:commonlyHasUnit rdf:resource="&om;footlambert"/> + <om:commonlyHasUnit rdf:resource="&om;lambert"/> + <om:commonlyHasUnit rdf:resource="&om;stilb"/> + </owl:Class> + + <!-- Candela Steradian Ontology --> + + <om:UnitMultiplication rdf:about="&om;candelaSteradian"> + <rdfs:label xml:lang="en">candela steradian</rdfs:label> + <rdfs:label xml:lang="nl">candela steradiaal</rdfs:label> + <om:symbol>cd sr</om:symbol> + <om:alternativeSymbol>cd·sr</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;candela"/> + <hasTerm2 rdf:resource="&om;steradian"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:UnitMultiplication> + + <owl:Class rdf:about="&om;LuminousFlux"> + <om:commonlyHasUnit rdf:resource="&om;candelaSteradian"/> + </owl:Class> + + <owl:Class rdf:about="&om;LuminousFluxUnit"> + <rdfs:label xml:lang="en">luminous flux unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;lumen"/> + <om:UnitMultiplication rdf:about="&om;candelaSteradian"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedLumen"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;LuminousFlux"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;LuminousFluxUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Lumen Ontology --> + + <om:Unit rdf:about="&om;lumen"> + <rdfs:label xml:lang="en">lumen</rdfs:label> + <rdfs:label xml:lang="nl">lumen</rdfs:label> + <rdfs:comment xml:lang="en">The lumen is a unit of luminous flux defined as candela times steradian = lux times square metre.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>lm</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;candelaSteradian"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;LuminousFlux"> + <om:commonlyHasUnit rdf:resource="&om;lumen"/> + </owl:Class> + + <!-- Lumen Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctolumen"> + <rdfs:label xml:lang="en">yoctolumen</rdfs:label> + <rdfs:label xml:lang="nl">yoctolumen</rdfs:label> + <om:symbol>ylm</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptolumen"> + <rdfs:label xml:lang="en">zeptolumen</rdfs:label> + <rdfs:label xml:lang="nl">zeptolumen</rdfs:label> + <om:symbol>zlm</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attolumen"> + <rdfs:label xml:lang="en">attolumen</rdfs:label> + <rdfs:label xml:lang="nl">attolumen</rdfs:label> + <om:symbol>alm</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtolumen"> + <rdfs:label xml:lang="en">femtolumen</rdfs:label> + <rdfs:label xml:lang="nl">femtolumen</rdfs:label> + <om:symbol>flm</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picolumen"> + <rdfs:label xml:lang="en">picolumen</rdfs:label> + <rdfs:label xml:lang="nl">picolumen</rdfs:label> + <om:symbol>plm</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanolumen"> + <rdfs:label xml:lang="en">nanolumen</rdfs:label> + <rdfs:label xml:lang="nl">nanolumen</rdfs:label> + <om:symbol>nlm</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microlumen"> + <rdfs:label xml:lang="en">microlumen</rdfs:label> + <rdfs:label xml:lang="nl">microlumen</rdfs:label> + <om:symbol>μlm</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millilumen"> + <rdfs:label xml:lang="en">millilumen</rdfs:label> + <rdfs:label xml:lang="nl">millilumen</rdfs:label> + <om:symbol>mlm</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centilumen"> + <rdfs:label xml:lang="en">centilumen</rdfs:label> + <rdfs:label xml:lang="nl">centilumen</rdfs:label> + <om:symbol>clm</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decilumen"> + <rdfs:label xml:lang="en">decilumen</rdfs:label> + <rdfs:label xml:lang="nl">decilumen</rdfs:label> + <om:symbol>dlm</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decalumen"> + <rdfs:label xml:lang="en">decalumen</rdfs:label> + <rdfs:label xml:lang="nl">decalumen</rdfs:label> + <om:symbol>dalm</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectolumen"> + <rdfs:label xml:lang="en">hectolumen</rdfs:label> + <rdfs:label xml:lang="nl">hectolumen</rdfs:label> + <om:symbol>hlm</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilolumen"> + <rdfs:label xml:lang="en">kilolumen</rdfs:label> + <rdfs:label xml:lang="nl">kilolumen</rdfs:label> + <om:symbol>klm</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megalumen"> + <rdfs:label xml:lang="en">megalumen</rdfs:label> + <rdfs:label xml:lang="nl">megalumen</rdfs:label> + <om:symbol>Mlm</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigalumen"> + <rdfs:label xml:lang="en">gigalumen</rdfs:label> + <rdfs:label xml:lang="nl">gigalumen</rdfs:label> + <om:symbol>Glm</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;teralumen"> + <rdfs:label xml:lang="en">teralumen</rdfs:label> + <rdfs:label xml:lang="nl">teralumen</rdfs:label> + <om:symbol>Tlm</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petalumen"> + <rdfs:label xml:lang="en">petalumen</rdfs:label> + <rdfs:label xml:lang="nl">petalumen</rdfs:label> + <om:symbol>Plm</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exalumen"> + <rdfs:label xml:lang="en">exalumen</rdfs:label> + <rdfs:label xml:lang="nl">exalumen</rdfs:label> + <om:symbol>Elm</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettalumen"> + <rdfs:label xml:lang="en">zettalumen</rdfs:label> + <rdfs:label xml:lang="nl">zettalumen</rdfs:label> + <om:symbol>Zlm</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottalumen"> + <rdfs:label xml:lang="en">yottalumen</rdfs:label> + <rdfs:label xml:lang="nl">yottalumen</rdfs:label> + <om:symbol>Ylm</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lumen"/> + <om:hasDimension rdf:resource="&om;luminousFlux-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedLumen"> + <rdfs:label xml:lang="en">prefixed lumen</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;lumen"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;LuminousFlux"> + <om:commonlyHasUnit rdf:resource="&om;attolumen"/> + <om:commonlyHasUnit rdf:resource="&om;centilumen"/> + <om:commonlyHasUnit rdf:resource="&om;decalumen"/> + <om:commonlyHasUnit rdf:resource="&om;decilumen"/> + <om:commonlyHasUnit rdf:resource="&om;exalumen"/> + <om:commonlyHasUnit rdf:resource="&om;femtolumen"/> + <om:commonlyHasUnit rdf:resource="&om;gigalumen"/> + <om:commonlyHasUnit rdf:resource="&om;hectolumen"/> + <om:commonlyHasUnit rdf:resource="&om;kilolumen"/> + <om:commonlyHasUnit rdf:resource="&om;megalumen"/> + <om:commonlyHasUnit rdf:resource="&om;microlumen"/> + <om:commonlyHasUnit rdf:resource="&om;millilumen"/> + <om:commonlyHasUnit rdf:resource="&om;nanolumen"/> + <om:commonlyHasUnit rdf:resource="&om;petalumen"/> + <om:commonlyHasUnit rdf:resource="&om;picolumen"/> + <om:commonlyHasUnit rdf:resource="&om;teralumen"/> + </owl:Class> + + <!-- Lumen Second Ontology --> + + <om:UnitMultiplication rdf:about="&om;lumenSecond-Time"> + <rdfs:label xml:lang="en">lumen second</rdfs:label> + <rdfs:label xml:lang="nl">lumen seconde</rdfs:label> + <om:symbol>lm s</om:symbol> + <om:alternativeSymbol>lm·s</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;lumen"/> + <hasTerm2 rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;luminousEnergy-Dimension"/> + </om:UnitMultiplication> + + <owl:Class rdf:about="&om;LuminousEnergy"> + <om:commonlyHasUnit rdf:resource="&om;lumenSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;LuminousEnergyUnit"> + <rdfs:label xml:lang="en">luminous energy unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitMultiplication rdf:about="&om;lumenSecond-Time"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;LuminousEnergy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;LuminousEnergyUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Lumen Per Square Metre Ontology --> + + <om:UnitDivision rdf:about="&om;lumenPerSquareMetre"> + <rdfs:label xml:lang="en">lumen per square metre</rdfs:label> + <rdfs:label xml:lang="nl">lumen per vierkante meter</rdfs:label> + <om:symbol>lm/m2</om:symbol> + <om:alternativeSymbol>lm m-2</om:alternativeSymbol> + <om:alternativeSymbol>lm·m-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;lumen"/> + <om:hasDenominator rdf:resource="&om;squareMetre"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Illuminance"> + <om:commonlyHasUnit rdf:resource="&om;lumenPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;IlluminanceUnit"> + <rdfs:label xml:lang="en">illuminance unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;footcandle"/> + <om:Unit rdf:about="&om;lux"/> + <om:Unit rdf:about="&om;phot"/> + <om:UnitDivision rdf:about="&om;lumenPerSquareMetre"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedLux"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Illuminance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;IlluminanceUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Lux Ontology --> + + <om:Unit rdf:about="&om;lux"> + <rdfs:label xml:lang="en">lux</rdfs:label> + <rdfs:label xml:lang="nl">lux</rdfs:label> + <rdfs:comment xml:lang="en">The lux is a unit of illuminance defined as lumen divided by square metre = candela times steradian divided by square metre.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>lx</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;lumenPerSquareMetre"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;Illuminance"> + <om:commonlyHasUnit rdf:resource="&om;lux"/> + </owl:Class> + + <!-- Lux Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctolux"> + <rdfs:label xml:lang="en">yoctolux</rdfs:label> + <rdfs:label xml:lang="nl">yoctolux</rdfs:label> + <om:symbol>ylx</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptolux"> + <rdfs:label xml:lang="nl">zeptolux</rdfs:label> + <rdfs:label xml:lang="en">zeptolux</rdfs:label> + <om:symbol>zlx</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attolux"> + <rdfs:label xml:lang="en">attolux</rdfs:label> + <rdfs:label xml:lang="nl">attolux</rdfs:label> + <om:symbol>alx</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtolux"> + <rdfs:label xml:lang="en">femtolux</rdfs:label> + <rdfs:label xml:lang="nl">femtolux</rdfs:label> + <om:symbol>flx</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picolux"> + <rdfs:label xml:lang="en">picolux</rdfs:label> + <rdfs:label xml:lang="nl">picolux</rdfs:label> + <om:symbol>plx</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanolux"> + <rdfs:label xml:lang="en">nanolux</rdfs:label> + <rdfs:label xml:lang="nl">nanolux</rdfs:label> + <om:symbol>nlx</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microlux"> + <rdfs:label xml:lang="en">microlux</rdfs:label> + <rdfs:label xml:lang="nl">microlux</rdfs:label> + <om:symbol>μlx</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millilux"> + <rdfs:label xml:lang="en">millilux</rdfs:label> + <rdfs:label xml:lang="nl">millilux</rdfs:label> + <om:symbol>mlx</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centilux"> + <rdfs:label xml:lang="en">centilux</rdfs:label> + <rdfs:label xml:lang="nl">centilux</rdfs:label> + <om:symbol>clx</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decilux"> + <rdfs:label xml:lang="en">decilux</rdfs:label> + <rdfs:label xml:lang="nl">decilux</rdfs:label> + <om:symbol>dlx</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decalux"> + <rdfs:label xml:lang="en">decalux</rdfs:label> + <rdfs:label xml:lang="nl">decalux</rdfs:label> + <om:symbol>dalx</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectolux"> + <rdfs:label xml:lang="en">hectolux</rdfs:label> + <rdfs:label xml:lang="nl">hectolux</rdfs:label> + <om:symbol>hlx</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilolux"> + <rdfs:label xml:lang="en">kilolux</rdfs:label> + <rdfs:label xml:lang="nl">kilolux</rdfs:label> + <om:symbol>klx</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megalux"> + <rdfs:label xml:lang="en">megalux</rdfs:label> + <rdfs:label xml:lang="nl">megalux</rdfs:label> + <om:symbol>Mlx</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigalux"> + <rdfs:label xml:lang="en">gigalux</rdfs:label> + <rdfs:label xml:lang="nl">gigalux</rdfs:label> + <om:symbol>Glx</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;teralux"> + <rdfs:label xml:lang="en">teralux</rdfs:label> + <rdfs:label xml:lang="nl">teralux</rdfs:label> + <om:symbol>Tlx</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petalux"> + <rdfs:label xml:lang="en">petalux</rdfs:label> + <rdfs:label xml:lang="nl">petalux</rdfs:label> + <om:symbol>Plx</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exalux"> + <rdfs:label xml:lang="en">exalux</rdfs:label> + <rdfs:label xml:lang="nl">exalux</rdfs:label> + <om:symbol>Elx</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettalux"> + <rdfs:label xml:lang="en">zettalux</rdfs:label> + <rdfs:label xml:lang="nl">zettalux</rdfs:label> + <om:symbol>Zlx</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottalux"> + <rdfs:label xml:lang="en">yottalux</rdfs:label> + <rdfs:label xml:lang="nl">yottalux</rdfs:label> + <om:symbol>Ylx</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedLux"> + <rdfs:label xml:lang="en">prefixed lux</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;lux"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Illuminance"> + <om:commonlyHasUnit rdf:resource="&om;attolux"/> + <om:commonlyHasUnit rdf:resource="&om;centilux"/> + <om:commonlyHasUnit rdf:resource="&om;decalux"/> + <om:commonlyHasUnit rdf:resource="&om;decilux"/> + <om:commonlyHasUnit rdf:resource="&om;exalux"/> + <om:commonlyHasUnit rdf:resource="&om;femtolux"/> + <om:commonlyHasUnit rdf:resource="&om;gigalux"/> + <om:commonlyHasUnit rdf:resource="&om;hectolux"/> + <om:commonlyHasUnit rdf:resource="&om;kilolux"/> + <om:commonlyHasUnit rdf:resource="&om;megalux"/> + <om:commonlyHasUnit rdf:resource="&om;microlux"/> + <om:commonlyHasUnit rdf:resource="&om;millilux"/> + <om:commonlyHasUnit rdf:resource="&om;nanolux"/> + <om:commonlyHasUnit rdf:resource="&om;petalux"/> + <om:commonlyHasUnit rdf:resource="&om;picolux"/> + <om:commonlyHasUnit rdf:resource="&om;teralux"/> + </owl:Class> + + <!-- Illuminance Unit Ontology --> + + <om:Unit rdf:about="&om;footcandle"> + <rdfs:label xml:lang="en">footcandle</rdfs:label> + <rdfs:comment xml:lang="en">The footcandle is a unit of illuminance defined as 1.076391e1 lux.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">10.76391</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;phot"> + <rdfs:label xml:lang="en">phot</rdfs:label> + <rdfs:label xml:lang="nl">phot</rdfs:label> + <rdfs:comment xml:lang="en">The phot is a unit of illuminance defined as 1.0e4 lux.</rdfs:comment> + <om:symbol>ph</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">10000</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;lux"/> + <om:hasDimension rdf:resource="&om;illuminance-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e4Lux"> + <om:hasNumericalValue>1.0e4</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;lux"/> + </om:Measure> + + <om:Measure rdf:about="&om;_1.076391e1Lux"> + <om:hasNumericalValue>1.076391e1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;lux"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Illuminance"> + <om:commonlyHasUnit rdf:resource="&om;footcandle"/> + <om:commonlyHasUnit rdf:resource="&om;phot"/> + </owl:Class> + + <!-- Lux Second Ontology --> + + <om:UnitMultiplication rdf:about="&om;luxSecond-Time"> + <rdfs:label xml:lang="en">lux second</rdfs:label> + <rdfs:label xml:lang="nl">lux seconde</rdfs:label> + <om:symbol>lx s</om:symbol> + <om:alternativeSymbol>lx·s</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;lux"/> + <hasTerm2 rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;exposure-Dimension"/> + </om:UnitMultiplication> + + <owl:Class rdf:about="&om;Exposure"> + <om:commonlyHasUnit rdf:resource="&om;luxSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;ExposureUnit"> + <rdfs:label xml:lang="en">exposure unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitMultiplication rdf:about="&om;luxSecond-Time"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Exposure"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ExposureUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Lumen Per Watt Ontology --> + + <om:UnitDivision rdf:about="&om;lumenPerWatt"> + <rdfs:label xml:lang="en">lumen per watt</rdfs:label> + <rdfs:label xml:lang="nl">lumen per watt</rdfs:label> + <om:symbol>lm/W</om:symbol> + <om:alternativeSymbol>lm W-1</om:alternativeSymbol> + <om:alternativeSymbol>lm·W-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;lumen"/> + <om:hasDenominator rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;luminousEfficacy-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;LuminousEfficacy"> + <om:commonlyHasUnit rdf:resource="&om;lumenPerWatt"/> + </owl:Class> + + <owl:Class rdf:about="&om;LuminousEfficacyUnit"> + <rdfs:label xml:lang="en">luminous efficacy unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;lumenPerWatt"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;LuminousEfficacy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;LuminousEfficacyUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Dimension Ontologies --> + + <!-- Contents --> + + <!-- Luminous Intensity Dimension Ontology --> + <!-- Luminance Dimension Ontology --> + <!-- Luminous Flux Dimension Ontology --> + <!-- Luminous Energy Dimension Ontology --> + <!-- Illuminance Dimension Ontology --> + <!-- Exposure Dimension Ontology --> + <!-- Luminous Efficacy Dimension Ontology --> + + <!-- Luminous Intensity Dimension Ontology --> + + <om:Dimension rdf:about="&om;luminousIntensity-Dimension"> + <rdfs:label xml:lang="en">luminous intensity dimension</rdfs:label> + <rdfs:label xml:lang="nl">lichtsterktedimensie</rdfs:label> + <om:symbol>J</om:symbol> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;LuminousIntensity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;luminousIntensity-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Luminance Dimension Ontology --> + + <om:Dimension rdf:about="&om;luminance-Dimension"> + <rdfs:label xml:lang="en">luminance dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Luminance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;luminance-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Luminous Flux Dimension Ontology --> + + <om:Dimension rdf:about="&om;luminousFlux-Dimension"> + <rdfs:label xml:lang="en">luminous flux dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;LuminousEnergy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;luminousEnergy-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Luminous Energy Dimension Ontology --> + + <om:Dimension rdf:about="&om;luminousEnergy-Dimension"> + <rdfs:label xml:lang="en">luminous energy dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;LuminousFlux"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;luminousFlux-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Illuminance Dimension Ontology --> + + <om:Dimension rdf:about="&om;illuminance-Dimension"> + <rdfs:label xml:lang="en">illuminance dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Illuminance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;illuminance-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Exposure Dimension Ontology --> + + <om:Dimension rdf:about="&om;exposure-Dimension"> + <rdfs:label xml:lang="en">exposure dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Exposure"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;exposure-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Luminous Efficacy Dimension Ontology --> + + <om:Dimension rdf:about="&om;luminousEfficacy-Dimension"> + <rdfs:label xml:lang="en">luminous efficacy dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">3</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;LuminousEfficacy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;luminousEfficacy-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Radiometry and Radiobiology Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Unit of Measure Ontologies --> + <!-- Dimension Ontologies --> + + <om:ApplicationArea rdf:about="&om;radiometryAndRadiobiology"> + <rdfs:label xml:lang="en">radiometry and radiobiology</rdfs:label> + <rdfs:label xml:lang="nl">radiometrie en radiobiologie</rdfs:label> + <!-- <om:uses_application_area rdf:resource="&om;space_and_time"/> --> + <om:usesQuantity rdf:resource="&om;AbsorbedDose"/> + <om:usesQuantity rdf:resource="&om;Kerma"/> + <om:usesQuantity rdf:resource="&om;SpecificEnergyImparted"/> + <om:usesQuantity rdf:resource="&om;DoseEquivalent"/> + <om:usesQuantity rdf:resource="&om;AmbientDoseEquivalent"/> + <om:usesQuantity rdf:resource="&om;DirectionalDoseEquivalent"/> + <om:usesQuantity rdf:resource="&om;OrganDoseEquivalent"/> + <om:usesQuantity rdf:resource="&om;PersonalDoseEquivalent"/> + <om:usesQuantity rdf:resource="&om;Activity"/> + <om:usesQuantity rdf:resource="&om;RadiantFlux"/> + <om:usesQuantity rdf:resource="&om;Irradiance"/> + <om:usesQuantity rdf:resource="&om;RadiantIntensity"/> + <om:usesQuantity rdf:resource="&om;Radiance"/> + <om:usesQuantity rdf:resource="&om;ExposureToXAndGammaRays"/> + <om:usesQuantity rdf:resource="&om;AbsorbedDoseRate"/> + <om:usesQuantity rdf:resource="&om;RadiantEnergy"/> + <om:usesUnit rdf:resource="&om;gray"/> + <om:usesUnit rdf:resource="&om;attogray"/> + <om:usesUnit rdf:resource="&om;centigray"/> + <om:usesUnit rdf:resource="&om;decagray"/> + <om:usesUnit rdf:resource="&om;decigray"/> + <om:usesUnit rdf:resource="&om;exagray"/> + <om:usesUnit rdf:resource="&om;femtogray"/> + <om:usesUnit rdf:resource="&om;gigagray"/> + <om:usesUnit rdf:resource="&om;hectogray"/> + <om:usesUnit rdf:resource="&om;kilogray"/> + <om:usesUnit rdf:resource="&om;megagray"/> + <om:usesUnit rdf:resource="&om;microgray"/> + <om:usesUnit rdf:resource="&om;milligray"/> + <om:usesUnit rdf:resource="&om;nanogray"/> + <om:usesUnit rdf:resource="&om;petagray"/> + <om:usesUnit rdf:resource="&om;picogray"/> + <om:usesUnit rdf:resource="&om;teragray"/> + <om:usesUnit rdf:resource="&om;rad"/> + <om:usesUnit rdf:resource="&om;sievert"/> + <om:usesUnit rdf:resource="&om;attosievert"/> + <om:usesUnit rdf:resource="&om;centisievert"/> + <om:usesUnit rdf:resource="&om;decasievert"/> + <om:usesUnit rdf:resource="&om;decisievert"/> + <om:usesUnit rdf:resource="&om;exasievert"/> + <om:usesUnit rdf:resource="&om;femtosievert"/> + <om:usesUnit rdf:resource="&om;gigasievert"/> + <om:usesUnit rdf:resource="&om;hectosievert"/> + <om:usesUnit rdf:resource="&om;kilosievert"/> + <om:usesUnit rdf:resource="&om;megasievert"/> + <om:usesUnit rdf:resource="&om;microsievert"/> + <om:usesUnit rdf:resource="&om;millisievert"/> + <om:usesUnit rdf:resource="&om;nanosievert"/> + <om:usesUnit rdf:resource="&om;petasievert"/> + <om:usesUnit rdf:resource="&om;picosievert"/> + <om:usesUnit rdf:resource="&om;terasievert"/> + <om:usesUnit rdf:resource="&om;rem"/> + <om:usesUnit rdf:resource="&om;becquerel"/> + <om:usesUnit rdf:resource="&om;attobecquerel"/> + <om:usesUnit rdf:resource="&om;centibecquerel"/> + <om:usesUnit rdf:resource="&om;decabecquerel"/> + <om:usesUnit rdf:resource="&om;decibecquerel"/> + <om:usesUnit rdf:resource="&om;exabecquerel"/> + <om:usesUnit rdf:resource="&om;femtobecquerel"/> + <om:usesUnit rdf:resource="&om;gigabecquerel"/> + <om:usesUnit rdf:resource="&om;hectobecquerel"/> + <om:usesUnit rdf:resource="&om;kilobecquerel"/> + <om:usesUnit rdf:resource="&om;megabecquerel"/> + <om:usesUnit rdf:resource="&om;microbecquerel"/> + <om:usesUnit rdf:resource="&om;millibecquerel"/> + <om:usesUnit rdf:resource="&om;nanobecquerel"/> + <om:usesUnit rdf:resource="&om;petabecquerel"/> + <om:usesUnit rdf:resource="&om;picobecquerel"/> + <om:usesUnit rdf:resource="&om;terabecquerel"/> + <om:usesUnit rdf:resource="&om;curie"/> + <om:usesUnit rdf:resource="&om;coulombPerKilogram"/> + <om:usesUnit rdf:resource="&om;röntgen"/> + <om:usesUnit rdf:resource="&om;grayPerSecond-Time"/> + <om:usesUnit rdf:resource="&om;milligrayPerSecond-Time"/> + </om:ApplicationArea> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Absorbed Dose Upper Ontology --> + <!-- Absorbed Dose Subclass Upper Ontology --> + <!-- Dose Equivalent Upper Ontology --> + <!-- Dose Equivalent Subclass Upper Ontology --> + <!-- Activity Upper Ontology --> + <!-- Power Subclass Upper Ontology --> + <!-- Irradiance Upper Ontology --> + <!-- Radiant Intensity Upper Ontology --> + <!-- Radiance Upper Ontology --> + <!-- Exposure To X and Γ Rays Upper Ontology --> + <!-- Absorbed Dose Rate Upper Ontology --> + <!-- Energy Subclass Upper Ontology --> + + <!-- Absorbed Dose Upper Ontology --> + + <owl:Class rdf:about="&om;AbsorbedDose"> + <rdfs:label xml:lang="en">absorbed dose</rdfs:label> + <om:alternativeLabel xml:lang="en">total ionizing dose</om:alternativeLabel> + <rdfs:comment xml:lang="en">Absorbed dose is the energy deposited in a medium by ionizing radiation. It is a derived quantity in the International System of Units. Absorbed dose is energy divided by mass.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <owl:Class rdf:about="&om;AbsorbedDose"> + <om:commonlyHasUnit rdf:resource="&om;joulePerKilogram"/> + </owl:Class> + + <owl:Class rdf:about="&om;AbsorbedDoseUnit"> + <rdfs:label xml:lang="en">absorbed dose unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;gray"/> + <om:Unit rdf:about="&om;rad"/> + <om:UnitDivision rdf:about="&om;joulePerKilogram"/> + <om:UnitDivision rdf:about="&om;kilojoulePerHectogram"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedGray"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AbsorbedDose"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;AbsorbedDoseUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;AbsorbedDose"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Absorbed Dose Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;Kerma"> + <rdfs:label xml:lang="en">kerma</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;AbsorbedDose"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificEnergyImparted"> + <rdfs:label xml:lang="en">specific energy imparted</rdfs:label> + <om:alternativeLabel xml:lang="en">specific energy (imparted)</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;AbsorbedDose"/> + </owl:Class> + + <owl:Class rdf:about="&om;Kerma"> + <om:commonlyHasUnit rdf:resource="&om;joulePerKilogram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificEnergyImparted"> + <om:commonlyHasUnit rdf:resource="&om;joulePerKilogram"/> + </owl:Class> + + <!-- Dose Equivalent Upper Ontology --> + + <owl:Class rdf:about="&om;DoseEquivalent"> + <rdfs:label xml:lang="en">dose equivalent</rdfs:label> + <rdfs:comment xml:lang="en">Dose equivalent is a measure of the radiation dose to tissue where an attempt has been made to allow for the different relative biological effects of different types of ionizing radiation.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <owl:Class rdf:about="&om;DoseEquivalent"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Dose Equivalent Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;AmbientDoseEquivalent"> + <rdfs:label xml:lang="en">ambient dose equivalent</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;DoseEquivalent"/> + </owl:Class> + + <owl:Class rdf:about="&om;DirectionalDoseEquivalent"> + <rdfs:label xml:lang="en">directional dose equivalent</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;DoseEquivalent"/> + </owl:Class> + + <owl:Class rdf:about="&om;OrganDoseEquivalent"> + <rdfs:label xml:lang="en">organ dose equivalent</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;DoseEquivalent"/> + </owl:Class> + + <owl:Class rdf:about="&om;PersonalDoseEquivalent"> + <rdfs:label xml:lang="en">personal dose equivalent</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;DoseEquivalent"/> + </owl:Class> + + <!-- Activity Upper Ontology --> + + <owl:Class rdf:about="&om;Activity"> + <rdfs:label xml:lang="en">activity</rdfs:label> + <rdfs:label xml:lang="nl">activiteit</rdfs:label> + <om:alternativeLabel xml:lang="en">activity (of a radionuclide)</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">activity of a radionuclide</om:alternativeLabel> + <rdfs:comment xml:lang="en">Activity is the decay rate of a radioactive substance. It is a derived quantity in the International System of Units. Activity is 1 divided by time.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>A</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Activity"> + <om:commonlyHasUnit rdf:resource="&om;reciprocalSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;Activity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;frequency-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Power Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;RadiantFlux"> + <rdfs:label xml:lang="en">radiant flux</rdfs:label> + <om:alternativeLabel xml:lang="en">radiant energy flux</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">radiant power</om:alternativeLabel> + <rdfs:comment xml:lang="en">Radiant flux is the measure of the total power of electromagnetic radiation.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Power"/> + <om:symbol>Φ</om:symbol> + <om:alternativeSymbol>Φ_e</om:alternativeSymbol> + <om:alternativeSymbol>P</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;RadiantFlux"> + <om:commonlyHasUnit rdf:resource="&om;joulePerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;RadiantFlux"> + <om:commonlyHasUnit rdf:resource="&om;watt"/> + </owl:Class> + + <owl:Class rdf:about="&om;RadiantFlux"> + <om:commonlyHasUnit rdf:resource="&om;attowatt"/> + <om:commonlyHasUnit rdf:resource="&om;centiwatt"/> + <om:commonlyHasUnit rdf:resource="&om;decawatt"/> + <om:commonlyHasUnit rdf:resource="&om;deciwatt"/> + <om:commonlyHasUnit rdf:resource="&om;exawatt"/> + <om:commonlyHasUnit rdf:resource="&om;femtowatt"/> + <om:commonlyHasUnit rdf:resource="&om;gigawatt"/> + <om:commonlyHasUnit rdf:resource="&om;hectowatt"/> + <om:commonlyHasUnit rdf:resource="&om;kilowatt"/> + <om:commonlyHasUnit rdf:resource="&om;megawatt"/> + <om:commonlyHasUnit rdf:resource="&om;microwatt"/> + <om:commonlyHasUnit rdf:resource="&om;milliwatt"/> + <om:commonlyHasUnit rdf:resource="&om;nanowatt"/> + <om:commonlyHasUnit rdf:resource="&om;petawatt"/> + <om:commonlyHasUnit rdf:resource="&om;picowatt"/> + <om:commonlyHasUnit rdf:resource="&om;terawatt"/> + </owl:Class> + + <owl:Class rdf:about="&om;RadiantFlux"> + <om:commonlyHasUnit rdf:resource="&om;horsepower-Boiler"/> + <om:commonlyHasUnit rdf:resource="&om;horsepower-British"/> + <om:commonlyHasUnit rdf:resource="&om;horsepower-Electric"/> + <om:commonlyHasUnit rdf:resource="&om;horsepower-Metric"/> + <om:commonlyHasUnit rdf:resource="&om;horsepower-Water"/> + <om:commonlyHasUnit rdf:resource="&om;tonOfRefrigeration"/> + </owl:Class> + + <!-- Irradiance Upper Ontology --> + + <owl:Class rdf:about="&om;Irradiance"> + <rdfs:label xml:lang="en">irradiance</rdfs:label> + <rdfs:comment xml:lang="en">Irradiance is the power of electromagnetic radiation at a surface per unit area.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;PowerDensity"/> + <om:symbol>E</om:symbol> + <om:alternativeSymbol>E_e</om:alternativeSymbol> + </owl:Class> + + <!-- Radiant Intensity Upper Ontology --> + + <owl:Class rdf:about="&om;RadiantIntensity"> + <rdfs:label xml:lang="en">radiant intensity</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>I</om:symbol> + <om:alternativeSymbol>I_e</om:alternativeSymbol> + </owl:Class> + + <!-- Radiance Upper Ontology --> + + <owl:Class rdf:about="&om;Radiance"> + <rdfs:label xml:lang="en">radiance</rdfs:label> + <rdfs:comment xml:lang="en">Radiance is a radiometric measure that describes the amount of light that passes through or is emitted from a particular area and falls within a given solid angle in a specified direction.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>L</om:symbol> + <om:alternativeSymbol>L_e</om:alternativeSymbol> + </owl:Class> + + <!-- Exposure To X and Γ Rays Upper Ontology --> + + <owl:Class rdf:about="&om;ExposureToXAndGammaRays"> + <rdfs:label xml:lang="en">exposure to x and γ rays</rdfs:label> + <om:alternativeLabel xml:lang="en">exposure to x and gamma rays</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">exposure (to x and γ rays)</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">exposure (to x and gamma rays)</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">exposure</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Absorbed Dose Rate Upper Ontology --> + + <owl:Class rdf:about="&om;AbsorbedDoseRate"> + <rdfs:label xml:lang="en">absorbed dose rate</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Energy Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;RadiantEnergy"> + <rdfs:label xml:lang="en">radiant energy</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Energy"/> + <om:symbol>Q</om:symbol> + <om:alternativeSymbol>Q_e</om:alternativeSymbol> + <om:alternativeSymbol>W</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;RadiantEnergy"> + <om:commonlyHasUnit rdf:resource="&om;newtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;RadiantEnergy"> + <om:commonlyHasUnit rdf:resource="&om;micronewtonMetre"/> + <om:commonlyHasUnit rdf:resource="&om;millinewtonMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;RadiantEnergy"> + <om:commonlyHasUnit rdf:resource="&om;joule"/> + </owl:Class> + + <owl:Class rdf:about="&om;RadiantEnergy"> + <om:commonlyHasUnit rdf:resource="&om;attojoule"/> + <om:commonlyHasUnit rdf:resource="&om;centijoule"/> + <om:commonlyHasUnit rdf:resource="&om;decajoule"/> + <om:commonlyHasUnit rdf:resource="&om;decijoule"/> + <om:commonlyHasUnit rdf:resource="&om;exajoule"/> + <om:commonlyHasUnit rdf:resource="&om;femtojoule"/> + <om:commonlyHasUnit rdf:resource="&om;gigajoule"/> + <om:commonlyHasUnit rdf:resource="&om;hectojoule"/> + <om:commonlyHasUnit rdf:resource="&om;kilojoule"/> + <om:commonlyHasUnit rdf:resource="&om;megajoule"/> + <om:commonlyHasUnit rdf:resource="&om;microjoule"/> + <om:commonlyHasUnit rdf:resource="&om;millijoule"/> + <om:commonlyHasUnit rdf:resource="&om;nanojoule"/> + <om:commonlyHasUnit rdf:resource="&om;petajoule"/> + <om:commonlyHasUnit rdf:resource="&om;picojoule"/> + <om:commonlyHasUnit rdf:resource="&om;terajoule"/> + </owl:Class> + + <owl:Class rdf:about="&om;RadiantEnergy"> + <om:commonlyHasUnit rdf:resource="&om;electronvolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;RadiantEnergy"> + <om:commonlyHasUnit rdf:resource="&om;gigaelectronvolt"/> + <om:commonlyHasUnit rdf:resource="&om;kiloelectronvolt"/> + <om:commonlyHasUnit rdf:resource="&om;megaelectronvolt"/> + </owl:Class> + + <owl:Class rdf:about="&om;RadiantEnergy"> + <om:commonlyHasUnit rdf:resource="&om;calorie-Mean"/> + </owl:Class> + + <owl:Class rdf:about="&om;RadiantEnergy"> + <om:commonlyHasUnit rdf:resource="&om;kilocalorie-Mean"/> + </owl:Class> + + <owl:Class rdf:about="&om;RadiantEnergy"> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-39F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-59F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-60F"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-InternationalTable"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-Mean"/> + <om:commonlyHasUnit rdf:resource="&om;BritishThermalUnit-Thermochemical"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-15C"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-20C"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-InternationalTable"/> + <om:commonlyHasUnit rdf:resource="&om;calorie-Thermochemical"/> + <om:commonlyHasUnit rdf:resource="&om;erg"/> + <om:commonlyHasUnit rdf:resource="&om;footPoundal"/> + <om:commonlyHasUnit rdf:resource="&om;quad"/> + <om:commonlyHasUnit rdf:resource="&om;wattHour"/> + <om:commonlyHasUnit rdf:resource="&om;kilowattHour"/> + <om:commonlyHasUnit rdf:resource="&om;megawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;gigawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;terawattHour"/> + <om:commonlyHasUnit rdf:resource="&om;therm-EC"/> + <om:commonlyHasUnit rdf:resource="&om;therm-US"/> + <om:commonlyHasUnit rdf:resource="&om;tonOfTNT"/> + <om:commonlyHasUnit rdf:resource="&om;megaerg"/> + </owl:Class> + + <!-- Unit of Measure Ontologies --> + + <!-- Contents --> + + <!-- Gray Ontology --> + <!-- Gray Multiples and Submultiples Ontology --> + <!-- Absorbed Dose Unit Ontology --> + <!-- Sievert Ontology --> + <!-- Sievert Multiples and Submultiples Ontology --> + <!-- Dose Equivalent Unit Ontology --> + <!-- Becquerel Ontology --> + <!-- Becquerel Multiples and Submultiples Ontology --> + <!-- Activity Unit Ontology --> + <!-- Coulomb Per Kilogram Ontology --> + <!-- Röntgen Ontology --> + <!-- Gray Per Second Ontology --> + + <!-- Gray Ontology --> + + <om:Unit rdf:about="&om;gray"> + <rdfs:label xml:lang="en">gray</rdfs:label> + <rdfs:label xml:lang="nl">gray</rdfs:label> + <rdfs:comment xml:lang="en">The gray is a unit of absorbed dose defined as joule divided by kilogram = square metre divided by second squared.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>Gy</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;joulePerKilogram"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;AbsorbedDose"> + <om:commonlyHasUnit rdf:resource="&om;gray"/> + </owl:Class> + + <owl:Class rdf:about="&om;Kerma"> + <om:commonlyHasUnit rdf:resource="&om;gray"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificEnergyImparted"> + <om:commonlyHasUnit rdf:resource="&om;gray"/> + </owl:Class> + + <!-- Gray Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctogray"> + <rdfs:label xml:lang="en">yoctogray</rdfs:label> + <rdfs:label xml:lang="nl">yoctogray</rdfs:label> + <rdfs:comment xml:lang="en">The yoctogray is a unit of absorbed dose defined as 1.0e-24 gray.</rdfs:comment> + <om:symbol>yGy</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptogray"> + <rdfs:label xml:lang="en">zeptogray</rdfs:label> + <rdfs:label xml:lang="nl">zeptogray</rdfs:label> + <rdfs:comment xml:lang="en">The zeptgray is a unit of absorbed dose defined as 1.0e-21 gray.</rdfs:comment> + <om:symbol>zGy</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attogray"> + <rdfs:label xml:lang="en">attogray</rdfs:label> + <rdfs:label xml:lang="nl">attogray</rdfs:label> + <rdfs:comment xml:lang="en">The attogray is a unit of absorbed dose defined as 1.0e-18 gray.</rdfs:comment> + <om:symbol>aGy</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtogray"> + <rdfs:label xml:lang="en">femtogray</rdfs:label> + <rdfs:label xml:lang="nl">femtogray</rdfs:label> + <rdfs:comment xml:lang="en">The femtogray is a unit of absorbed dose defined as 1.0e-15 gray.</rdfs:comment> + <om:symbol>fGy</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picogray"> + <rdfs:label xml:lang="en">picogray</rdfs:label> + <rdfs:label xml:lang="nl">picogray</rdfs:label> + <rdfs:comment xml:lang="en">The picogray is a unit of absorbed dose defined as 1.0e-12 gray.</rdfs:comment> + <om:symbol>pGy</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanogray"> + <rdfs:label xml:lang="en">nanogray</rdfs:label> + <rdfs:label xml:lang="nl">nanogray</rdfs:label> + <rdfs:comment xml:lang="en">The nanogray is a unit of absorbed dose defined as 1.0e-9 gray.</rdfs:comment> + <om:symbol>nGy</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microgray"> + <rdfs:label xml:lang="en">microgray</rdfs:label> + <rdfs:label xml:lang="nl">microgray</rdfs:label> + <rdfs:comment xml:lang="en">The microgray is a unit of absorbed dose defined as 1.0e-6 gray.</rdfs:comment> + <om:symbol>μGy</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;milligray"> + <rdfs:label xml:lang="en">milligray</rdfs:label> + <rdfs:label xml:lang="nl">milligray</rdfs:label> + <rdfs:comment xml:lang="en">The milligray is a unit of absorbed dose defined as 1.0e-3 gray.</rdfs:comment> + <om:symbol>mGy</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centigray"> + <rdfs:label xml:lang="en">centigray</rdfs:label> + <rdfs:label xml:lang="nl">centigray</rdfs:label> + <rdfs:comment xml:lang="en">The centigray is a unit of absorbed dose defined as 1.0e-2 gray.</rdfs:comment> + <om:symbol>cGy</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decigray"> + <rdfs:label xml:lang="en">decigray</rdfs:label> + <rdfs:label xml:lang="nl">decigray</rdfs:label> + <rdfs:comment xml:lang="en">The decigray is a unit of absorbed dose defined as 1.0e-1 gray.</rdfs:comment> + <om:symbol>dGy</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decagray"> + <rdfs:label xml:lang="en">decagray</rdfs:label> + <rdfs:label xml:lang="nl">decagray</rdfs:label> + <rdfs:comment xml:lang="en">The decagray is a unit of absorbed dose defined as 1.0e1 gray.</rdfs:comment> + <om:symbol>daGy</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectogray"> + <rdfs:label xml:lang="en">hectogray</rdfs:label> + <rdfs:label xml:lang="nl">hectogray</rdfs:label> + <rdfs:comment xml:lang="en">The hectogray is a unit of absorbed dose defined as 1.0e2 gray.</rdfs:comment> + <om:symbol>hGy</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilogray"> + <rdfs:label xml:lang="en">kilogray</rdfs:label> + <rdfs:label xml:lang="nl">kilogray</rdfs:label> + <rdfs:comment xml:lang="en">The kilogray is a unit of absorbed dose defined as 1.0e3 gray.</rdfs:comment> + <om:symbol>kGy</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megagray"> + <rdfs:label xml:lang="en">megagray</rdfs:label> + <rdfs:label xml:lang="nl">megagray</rdfs:label> + <rdfs:comment xml:lang="en">The megagray is a unit of absorbed dose defined as 1.0e6 gray.</rdfs:comment> + <om:symbol>MGy</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigagray"> + <rdfs:label xml:lang="en">gigagray</rdfs:label> + <rdfs:label xml:lang="nl">gigagray</rdfs:label> + <rdfs:comment xml:lang="en">The gigagray is a unit of absorbed dose defined as 1.0e9 gray.</rdfs:comment> + <om:symbol>GGy</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;teragray"> + <rdfs:label xml:lang="en">teragray</rdfs:label> + <rdfs:label xml:lang="nl">teragray</rdfs:label> + <rdfs:comment xml:lang="en">The teragray is a unit of absorbed dose defined as 1.0e12 gray.</rdfs:comment> + <om:symbol>TGy</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petagray"> + <rdfs:label xml:lang="en">petagray</rdfs:label> + <rdfs:label xml:lang="nl">petagray</rdfs:label> + <rdfs:comment xml:lang="en">The petagray is a unit of absorbed dose defined as 1.0e15 gray.</rdfs:comment> + <om:symbol>PGy</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exagray"> + <rdfs:label xml:lang="en">exagray</rdfs:label> + <rdfs:label xml:lang="nl">exagray</rdfs:label> + <rdfs:comment xml:lang="en">The exagray is a unit of absorbed dose defined as 1.0e18 gray.</rdfs:comment> + <om:symbol>EGy</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettagray"> + <rdfs:label xml:lang="en">zettagray</rdfs:label> + <rdfs:label xml:lang="nl">zettagray</rdfs:label> + <rdfs:comment xml:lang="en">The zettagray is a unit of absorbed dose defined as 1.0e21 gray.</rdfs:comment> + <om:symbol>ZGy</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottagray"> + <rdfs:label xml:lang="en">yottagray</rdfs:label> + <rdfs:label xml:lang="nl">yottagray</rdfs:label> + <rdfs:comment xml:lang="en">The yottagray is a unit of absorbed dose defined as 1.0e24 gray.</rdfs:comment> + <om:symbol>YGy</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedGray"> + <rdfs:label xml:lang="en">prefixed gray</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;gray"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AbsorbedDose"> + <om:commonlyHasUnit rdf:resource="&om;attogray"/> + <om:commonlyHasUnit rdf:resource="&om;centigray"/> + <om:commonlyHasUnit rdf:resource="&om;decagray"/> + <om:commonlyHasUnit rdf:resource="&om;decigray"/> + <om:commonlyHasUnit rdf:resource="&om;exagray"/> + <om:commonlyHasUnit rdf:resource="&om;femtogray"/> + <om:commonlyHasUnit rdf:resource="&om;gigagray"/> + <om:commonlyHasUnit rdf:resource="&om;hectogray"/> + <om:commonlyHasUnit rdf:resource="&om;kilogray"/> + <om:commonlyHasUnit rdf:resource="&om;megagray"/> + <om:commonlyHasUnit rdf:resource="&om;microgray"/> + <om:commonlyHasUnit rdf:resource="&om;milligray"/> + <om:commonlyHasUnit rdf:resource="&om;nanogray"/> + <om:commonlyHasUnit rdf:resource="&om;petagray"/> + <om:commonlyHasUnit rdf:resource="&om;picogray"/> + <om:commonlyHasUnit rdf:resource="&om;teragray"/> + </owl:Class> + + <owl:Class rdf:about="&om;Kerma"> + <om:commonlyHasUnit rdf:resource="&om;attogray"/> + <om:commonlyHasUnit rdf:resource="&om;centigray"/> + <om:commonlyHasUnit rdf:resource="&om;decagray"/> + <om:commonlyHasUnit rdf:resource="&om;decigray"/> + <om:commonlyHasUnit rdf:resource="&om;exagray"/> + <om:commonlyHasUnit rdf:resource="&om;femtogray"/> + <om:commonlyHasUnit rdf:resource="&om;gigagray"/> + <om:commonlyHasUnit rdf:resource="&om;hectogray"/> + <om:commonlyHasUnit rdf:resource="&om;kilogray"/> + <om:commonlyHasUnit rdf:resource="&om;megagray"/> + <om:commonlyHasUnit rdf:resource="&om;microgray"/> + <om:commonlyHasUnit rdf:resource="&om;milligray"/> + <om:commonlyHasUnit rdf:resource="&om;nanogray"/> + <om:commonlyHasUnit rdf:resource="&om;petagray"/> + <om:commonlyHasUnit rdf:resource="&om;picogray"/> + <om:commonlyHasUnit rdf:resource="&om;teragray"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificEnergyImparted"> + <om:commonlyHasUnit rdf:resource="&om;attogray"/> + <om:commonlyHasUnit rdf:resource="&om;centigray"/> + <om:commonlyHasUnit rdf:resource="&om;decagray"/> + <om:commonlyHasUnit rdf:resource="&om;decigray"/> + <om:commonlyHasUnit rdf:resource="&om;exagray"/> + <om:commonlyHasUnit rdf:resource="&om;femtogray"/> + <om:commonlyHasUnit rdf:resource="&om;gigagray"/> + <om:commonlyHasUnit rdf:resource="&om;hectogray"/> + <om:commonlyHasUnit rdf:resource="&om;kilogray"/> + <om:commonlyHasUnit rdf:resource="&om;megagray"/> + <om:commonlyHasUnit rdf:resource="&om;microgray"/> + <om:commonlyHasUnit rdf:resource="&om;milligray"/> + <om:commonlyHasUnit rdf:resource="&om;nanogray"/> + <om:commonlyHasUnit rdf:resource="&om;petagray"/> + <om:commonlyHasUnit rdf:resource="&om;picogray"/> + <om:commonlyHasUnit rdf:resource="&om;teragray"/> + </owl:Class> + + <!-- Absorbed Dose Unit Ontology --> + + <om:Unit rdf:about="&om;rad"> + <rdfs:label xml:lang="en">rad</rdfs:label> + <rdfs:label xml:lang="nl">rad</rdfs:label> + <rdfs:comment xml:lang="en">The rad is a unit of absorbed dose defined as 1.0e-2 gray.</rdfs:comment> + <om:symbol>rad</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;gray"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e-2Gray"> + <om:hasNumericalValue>1.0e-2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;gray"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;AbsorbedDose"> + <om:commonlyHasUnit rdf:resource="&om;rad"/> + </owl:Class> + + <owl:Class rdf:about="&om;Kerma"> + <om:commonlyHasUnit rdf:resource="&om;rad"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificEnergyImparted"> + <om:commonlyHasUnit rdf:resource="&om;rad"/> + </owl:Class> + + <!-- Sievert Ontology --> + + <om:Unit rdf:about="&om;sievert"> + <rdfs:label xml:lang="en">sievert</rdfs:label> + <rdfs:label xml:lang="nl">sievert</rdfs:label> + <rdfs:comment xml:lang="en">The sievert is a unit of dose equivalent defined as joule divided by kilogram = square metre divided by second squared.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>Sv</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;joulePerKilogram"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;DoseEquivalent"> + <om:commonlyHasUnit rdf:resource="&om;sievert"/> + </owl:Class> + + <owl:Class rdf:about="&om;AmbientDoseEquivalent"> + <om:commonlyHasUnit rdf:resource="&om;sievert"/> + </owl:Class> + + <owl:Class rdf:about="&om;DirectionalDoseEquivalent"> + <om:commonlyHasUnit rdf:resource="&om;sievert"/> + </owl:Class> + + <owl:Class rdf:about="&om;OrganDoseEquivalent"> + <om:commonlyHasUnit rdf:resource="&om;sievert"/> + </owl:Class> + + <owl:Class rdf:about="&om;PersonalDoseEquivalent"> + <om:commonlyHasUnit rdf:resource="&om;sievert"/> + </owl:Class> + + <owl:Class rdf:about="&om;DoseEquivalentUnit"> + <rdfs:label xml:lang="en">dose equivalent unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;rem"/> + <om:Unit rdf:about="&om;sievert"/> + <om:UnitDivision rdf:about="&om;joulePerKilogram"/> + <om:UnitDivision rdf:about="&om;kilojoulePerHectogram"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedSievert"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;DoseEquivalent"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;DoseEquivalentUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Sievert Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctosievert"> + <rdfs:label xml:lang="en">yoctosievert</rdfs:label> + <rdfs:label xml:lang="nl">yoctosievert</rdfs:label> + <om:symbol>ySv</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptosievert"> + <rdfs:label xml:lang="en">zeptosievert</rdfs:label> + <rdfs:label xml:lang="nl">zeptosievert</rdfs:label> + <om:symbol>zSv</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attosievert"> + <rdfs:label xml:lang="en">attosievert</rdfs:label> + <rdfs:label xml:lang="nl">attosievert</rdfs:label> + <om:symbol>aSv</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtosievert"> + <rdfs:label xml:lang="en">femtosievert</rdfs:label> + <rdfs:label xml:lang="nl">femtosievert</rdfs:label> + <om:symbol>fSv</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picosievert"> + <rdfs:label xml:lang="en">picosievert</rdfs:label> + <rdfs:label xml:lang="nl">picosievert</rdfs:label> + <om:symbol>pSv</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanosievert"> + <rdfs:label xml:lang="en">nanosievert</rdfs:label> + <rdfs:label xml:lang="nl">nanosievert</rdfs:label> + <om:symbol>nSv</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microsievert"> + <rdfs:label xml:lang="en">microsievert</rdfs:label> + <rdfs:label xml:lang="nl">microsievert</rdfs:label> + <om:symbol>μSv</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millisievert"> + <rdfs:label xml:lang="en">millisievert</rdfs:label> + <rdfs:label xml:lang="nl">millisievert</rdfs:label> + <om:symbol>mSv</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centisievert"> + <rdfs:label xml:lang="en">centisievert</rdfs:label> + <rdfs:label xml:lang="nl">centisievert</rdfs:label> + <om:symbol>cSv</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decisievert"> + <rdfs:label xml:lang="en">decisievert</rdfs:label> + <rdfs:label xml:lang="nl">decisievert</rdfs:label> + <om:symbol>dSv</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decasievert"> + <rdfs:label xml:lang="en">decasievert</rdfs:label> + <rdfs:label xml:lang="nl">decasievert</rdfs:label> + <om:symbol>daSv</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectosievert"> + <rdfs:label xml:lang="en">hectosievert</rdfs:label> + <rdfs:label xml:lang="nl">hectosievert</rdfs:label> + <om:symbol>hSv</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilosievert"> + <rdfs:label xml:lang="en">kilosievert</rdfs:label> + <rdfs:label xml:lang="nl">kilosievert</rdfs:label> + <om:symbol>kSv</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megasievert"> + <rdfs:label xml:lang="en">megasievert</rdfs:label> + <rdfs:label xml:lang="nl">megasievert</rdfs:label> + <om:symbol>MSv</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigasievert"> + <rdfs:label xml:lang="en">gigasievert</rdfs:label> + <rdfs:label xml:lang="nl">gigasievert</rdfs:label> + <om:symbol>GSv</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;terasievert"> + <rdfs:label xml:lang="en">terasievert</rdfs:label> + <rdfs:label xml:lang="nl">terasievert</rdfs:label> + <om:symbol>TSv</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petasievert"> + <rdfs:label xml:lang="en">petasievert</rdfs:label> + <rdfs:label xml:lang="nl">petasievert</rdfs:label> + <om:symbol>PSv</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exasievert"> + <rdfs:label xml:lang="en">exasievert</rdfs:label> + <rdfs:label xml:lang="nl">exasievert</rdfs:label> + <om:symbol>ESv</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettasievert"> + <rdfs:label xml:lang="en">zettasievert</rdfs:label> + <rdfs:label xml:lang="nl">zettasievert</rdfs:label> + <om:symbol>ZSv</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottasievert"> + <rdfs:label xml:lang="en">yottasievert</rdfs:label> + <rdfs:label xml:lang="nl">yottasievert</rdfs:label> + <om:symbol>YSv</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedSievert"> + <rdfs:label xml:lang="en">prefixed sievert</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;sievert"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;DoseEquivalent"> + <om:commonlyHasUnit rdf:resource="&om;attosievert"/> + <om:commonlyHasUnit rdf:resource="&om;centisievert"/> + <om:commonlyHasUnit rdf:resource="&om;decasievert"/> + <om:commonlyHasUnit rdf:resource="&om;decisievert"/> + <om:commonlyHasUnit rdf:resource="&om;exasievert"/> + <om:commonlyHasUnit rdf:resource="&om;femtosievert"/> + <om:commonlyHasUnit rdf:resource="&om;gigasievert"/> + <om:commonlyHasUnit rdf:resource="&om;hectosievert"/> + <om:commonlyHasUnit rdf:resource="&om;kilosievert"/> + <om:commonlyHasUnit rdf:resource="&om;megasievert"/> + <om:commonlyHasUnit rdf:resource="&om;microsievert"/> + <om:commonlyHasUnit rdf:resource="&om;millisievert"/> + <om:commonlyHasUnit rdf:resource="&om;nanosievert"/> + <om:commonlyHasUnit rdf:resource="&om;petasievert"/> + <om:commonlyHasUnit rdf:resource="&om;picosievert"/> + <om:commonlyHasUnit rdf:resource="&om;terasievert"/> + </owl:Class> + + <owl:Class rdf:about="&om;AmbientDoseEquivalent"> + <om:commonlyHasUnit rdf:resource="&om;attosievert"/> + <om:commonlyHasUnit rdf:resource="&om;centisievert"/> + <om:commonlyHasUnit rdf:resource="&om;decasievert"/> + <om:commonlyHasUnit rdf:resource="&om;decisievert"/> + <om:commonlyHasUnit rdf:resource="&om;exasievert"/> + <om:commonlyHasUnit rdf:resource="&om;femtosievert"/> + <om:commonlyHasUnit rdf:resource="&om;gigasievert"/> + <om:commonlyHasUnit rdf:resource="&om;hectosievert"/> + <om:commonlyHasUnit rdf:resource="&om;kilosievert"/> + <om:commonlyHasUnit rdf:resource="&om;megasievert"/> + <om:commonlyHasUnit rdf:resource="&om;microsievert"/> + <om:commonlyHasUnit rdf:resource="&om;millisievert"/> + <om:commonlyHasUnit rdf:resource="&om;nanosievert"/> + <om:commonlyHasUnit rdf:resource="&om;petasievert"/> + <om:commonlyHasUnit rdf:resource="&om;picosievert"/> + <om:commonlyHasUnit rdf:resource="&om;terasievert"/> + </owl:Class> + + <owl:Class rdf:about="&om;DirectionalDoseEquivalent"> + <om:commonlyHasUnit rdf:resource="&om;attosievert"/> + <om:commonlyHasUnit rdf:resource="&om;centisievert"/> + <om:commonlyHasUnit rdf:resource="&om;decasievert"/> + <om:commonlyHasUnit rdf:resource="&om;decisievert"/> + <om:commonlyHasUnit rdf:resource="&om;exasievert"/> + <om:commonlyHasUnit rdf:resource="&om;femtosievert"/> + <om:commonlyHasUnit rdf:resource="&om;gigasievert"/> + <om:commonlyHasUnit rdf:resource="&om;hectosievert"/> + <om:commonlyHasUnit rdf:resource="&om;kilosievert"/> + <om:commonlyHasUnit rdf:resource="&om;megasievert"/> + <om:commonlyHasUnit rdf:resource="&om;microsievert"/> + <om:commonlyHasUnit rdf:resource="&om;millisievert"/> + <om:commonlyHasUnit rdf:resource="&om;nanosievert"/> + <om:commonlyHasUnit rdf:resource="&om;petasievert"/> + <om:commonlyHasUnit rdf:resource="&om;picosievert"/> + <om:commonlyHasUnit rdf:resource="&om;terasievert"/> + </owl:Class> + + <owl:Class rdf:about="&om;OrganDoseEquivalent"> + <om:commonlyHasUnit rdf:resource="&om;attosievert"/> + <om:commonlyHasUnit rdf:resource="&om;centisievert"/> + <om:commonlyHasUnit rdf:resource="&om;decasievert"/> + <om:commonlyHasUnit rdf:resource="&om;decisievert"/> + <om:commonlyHasUnit rdf:resource="&om;exasievert"/> + <om:commonlyHasUnit rdf:resource="&om;femtosievert"/> + <om:commonlyHasUnit rdf:resource="&om;gigasievert"/> + <om:commonlyHasUnit rdf:resource="&om;hectosievert"/> + <om:commonlyHasUnit rdf:resource="&om;kilosievert"/> + <om:commonlyHasUnit rdf:resource="&om;megasievert"/> + <om:commonlyHasUnit rdf:resource="&om;microsievert"/> + <om:commonlyHasUnit rdf:resource="&om;millisievert"/> + <om:commonlyHasUnit rdf:resource="&om;nanosievert"/> + <om:commonlyHasUnit rdf:resource="&om;petasievert"/> + <om:commonlyHasUnit rdf:resource="&om;picosievert"/> + <om:commonlyHasUnit rdf:resource="&om;terasievert"/> + </owl:Class> + + <owl:Class rdf:about="&om;PersonalDoseEquivalent"> + <om:commonlyHasUnit rdf:resource="&om;attosievert"/> + <om:commonlyHasUnit rdf:resource="&om;centisievert"/> + <om:commonlyHasUnit rdf:resource="&om;decasievert"/> + <om:commonlyHasUnit rdf:resource="&om;decisievert"/> + <om:commonlyHasUnit rdf:resource="&om;exasievert"/> + <om:commonlyHasUnit rdf:resource="&om;femtosievert"/> + <om:commonlyHasUnit rdf:resource="&om;gigasievert"/> + <om:commonlyHasUnit rdf:resource="&om;hectosievert"/> + <om:commonlyHasUnit rdf:resource="&om;kilosievert"/> + <om:commonlyHasUnit rdf:resource="&om;megasievert"/> + <om:commonlyHasUnit rdf:resource="&om;microsievert"/> + <om:commonlyHasUnit rdf:resource="&om;millisievert"/> + <om:commonlyHasUnit rdf:resource="&om;nanosievert"/> + <om:commonlyHasUnit rdf:resource="&om;petasievert"/> + <om:commonlyHasUnit rdf:resource="&om;picosievert"/> + <om:commonlyHasUnit rdf:resource="&om;terasievert"/> + </owl:Class> + + <!-- Dose Equivalent Unit Ontology --> + + <om:Unit rdf:about="&om;rem"> + <rdfs:label xml:lang="en">rem</rdfs:label> + <rdfs:label xml:lang="nl">rem</rdfs:label> + <rdfs:comment xml:lang="en">The rem is a unit of dose equivalent defined as 1.0e-2 sievert.</rdfs:comment> + <om:symbol>rem</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.010</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;sievert"/> + <om:hasDimension rdf:resource="&om;specificEnergyOrAbsorbedDoseOrDoseEquivalent-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.0e-2Sievert"> + <om:hasNumericalValue>1.0e-2</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;sievert"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;DoseEquivalent"> + <om:commonlyHasUnit rdf:resource="&om;rem"/> + </owl:Class> + + <owl:Class rdf:about="&om;AmbientDoseEquivalent"> + <om:commonlyHasUnit rdf:resource="&om;rem"/> + </owl:Class> + + <owl:Class rdf:about="&om;DirectionalDoseEquivalent"> + <om:commonlyHasUnit rdf:resource="&om;rem"/> + </owl:Class> + + <owl:Class rdf:about="&om;OrganDoseEquivalent"> + <om:commonlyHasUnit rdf:resource="&om;rem"/> + </owl:Class> + + <owl:Class rdf:about="&om;PersonalDoseEquivalent"> + <om:commonlyHasUnit rdf:resource="&om;rem"/> + </owl:Class> + + <!-- Becquerel Ontology --> + + <om:Unit rdf:about="&om;becquerel"> + <rdfs:label xml:lang="en">becquerel</rdfs:label> + <rdfs:label xml:lang="nl">becquerel</rdfs:label> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:longcomment xml:lang="en">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.</om:longcomment> + <om:symbol>Bq</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;reciprocalSecond-Time"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;Activity"> + <om:commonlyHasUnit rdf:resource="&om;becquerel"/> + </owl:Class> + + <owl:Class rdf:about="&om;ActivityUnit"> + <rdfs:label xml:lang="en">activity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;becquerel"/> + <om:Unit rdf:about="&om;curie"/> + <om:UnitExponentiation rdf:about="&om;reciprocalSecond-Time"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedBecquerel"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Activity"> + <om:commonlyHasUnit rdf:resource="&om;curie"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ActivityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Becquerel Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;yoctobecquerel"> + <rdfs:label xml:lang="en">yoctobecquerel</rdfs:label> + <rdfs:label xml:lang="nl">yoctobecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The yoctobecquerel is a unit of activity defined as 1.0e-24 becquerel.</rdfs:comment> + <om:symbol>yBq</om:symbol> + <om:hasPrefix rdf:resource="&om;yocto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zeptobecquerel"> + <rdfs:label xml:lang="en">zeptobecquerel</rdfs:label> + <rdfs:label xml:lang="nl">zeptobecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The zeptbecquerel is a unit of activity defined as 1.0e-21 becquerel.</rdfs:comment> + <om:symbol>zBq</om:symbol> + <om:hasPrefix rdf:resource="&om;zepto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;attobecquerel"> + <rdfs:label xml:lang="en">attobecquerel</rdfs:label> + <rdfs:label xml:lang="nl">attobecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The attobecquerel is a unit of activity defined as 1.0e-18 becquerel.</rdfs:comment> + <om:symbol>aBq</om:symbol> + <om:hasPrefix rdf:resource="&om;atto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;femtobecquerel"> + <rdfs:label xml:lang="en">femtobecquerel</rdfs:label> + <rdfs:label xml:lang="nl">femtobecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The femtobecquerel is a unit of activity defined as 1.0e-15 becquerel.</rdfs:comment> + <om:symbol>fBq</om:symbol> + <om:hasPrefix rdf:resource="&om;femto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;picobecquerel"> + <rdfs:label xml:lang="en">picobecquerel</rdfs:label> + <rdfs:label xml:lang="nl">picobecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The picobecquerel is a unit of activity defined as 1.0e-12 becquerel.</rdfs:comment> + <om:symbol>pBq</om:symbol> + <om:hasPrefix rdf:resource="&om;pico"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;nanobecquerel"> + <rdfs:label xml:lang="en">nanobecquerel</rdfs:label> + <rdfs:label xml:lang="nl">nanobecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The nanobecquerel is a unit of activity defined as 1.0e-9 becquerel.</rdfs:comment> + <om:symbol>nBq</om:symbol> + <om:hasPrefix rdf:resource="&om;nano"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;microbecquerel"> + <rdfs:label xml:lang="en">microbecquerel</rdfs:label> + <rdfs:label xml:lang="nl">microbecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The microbecquerel is a unit of activity defined as 1.0e-6 becquerel.</rdfs:comment> + <om:symbol>μBq</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;millibecquerel"> + <rdfs:label xml:lang="en">millibecquerel</rdfs:label> + <rdfs:label xml:lang="nl">millibecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The millibecquerel is a unit of activity defined as 1.0e-3 becquerel.</rdfs:comment> + <om:symbol>mBq</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;centibecquerel"> + <rdfs:label xml:lang="en">centibecquerel</rdfs:label> + <rdfs:label xml:lang="nl">centibecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The centibecquerel is a unit of activity defined as 1.0e-2 becquerel.</rdfs:comment> + <om:symbol>cBq</om:symbol> + <om:hasPrefix rdf:resource="&om;centi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decibecquerel"> + <rdfs:label xml:lang="en">decibecquerel</rdfs:label> + <rdfs:label xml:lang="nl">decibecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The decibecquerel is a unit of activity defined as 1.0e-1 becquerel.</rdfs:comment> + <om:symbol>dBq</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;decabecquerel"> + <rdfs:label xml:lang="en">decabecquerel</rdfs:label> + <rdfs:label xml:lang="nl">decabecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The decabecquerel is a unit of activity defined as 1.0e1 becquerel.</rdfs:comment> + <om:symbol>daBq</om:symbol> + <om:hasPrefix rdf:resource="&om;deca"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;hectobecquerel"> + <rdfs:label xml:lang="en">hectobecquerel</rdfs:label> + <rdfs:label xml:lang="nl">hectobecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The hectobecquerel is a unit of activity defined as 1.0e2 becquerel.</rdfs:comment> + <om:symbol>hBq</om:symbol> + <om:hasPrefix rdf:resource="&om;hecto"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilobecquerel"> + <rdfs:label xml:lang="en">kilobecquerel</rdfs:label> + <rdfs:label xml:lang="nl">kilobecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The kilobecquerel is a unit of activity defined as 1.0e3 becquerel.</rdfs:comment> + <om:symbol>kBq</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megabecquerel"> + <rdfs:label xml:lang="en">megabecquerel</rdfs:label> + <rdfs:label xml:lang="nl">megabecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The megabecquerel is a unit of activity defined as 1.0e6 becquerel.</rdfs:comment> + <om:symbol>MBq</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigabecquerel"> + <rdfs:label xml:lang="en">gigabecquerel</rdfs:label> + <rdfs:label xml:lang="nl">gigabecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The gigabecquerel is a unit of activity defined as 1.0e9 becquerel.</rdfs:comment> + <om:symbol>GBq</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;terabecquerel"> + <rdfs:label xml:lang="en">terabecquerel</rdfs:label> + <rdfs:label xml:lang="nl">terabecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The terabecquerel is a unit of activity defined as 1.0e12 becquerel.</rdfs:comment> + <om:symbol>TBq</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petabecquerel"> + <rdfs:label xml:lang="en">petabecquerel</rdfs:label> + <rdfs:label xml:lang="nl">petabecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The petabecquerel is a unit of activity defined as 1.0e15 becquerel.</rdfs:comment> + <om:symbol>PBq</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exabecquerel"> + <rdfs:label xml:lang="en">exabecquerel</rdfs:label> + <rdfs:label xml:lang="nl">exabecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The exabecquerel is a unit of activity defined as 1.0e18 becquerel.</rdfs:comment> + <om:symbol>EBq</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettabecquerel"> + <rdfs:label xml:lang="en">zettabecquerel</rdfs:label> + <rdfs:label xml:lang="nl">zettabecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The zettabecquerel is a unit of activity defined as 1.0e21 becquerel.</rdfs:comment> + <om:symbol>ZBq</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottabecquerel"> + <rdfs:label xml:lang="en">yottabecquerel</rdfs:label> + <rdfs:label xml:lang="nl">yottabecquerel</rdfs:label> + <rdfs:comment xml:lang="en">The yottabecquerel is a unit of activity defined as 1.0e24 becquerel.</rdfs:comment> + <om:symbol>YBq</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedBecquerel"> + <rdfs:label xml:lang="en">prefixed becquerel</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;becquerel"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;SIPrefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Activity"> + <om:commonlyHasUnit rdf:resource="&om;attobecquerel"/> + <om:commonlyHasUnit rdf:resource="&om;centibecquerel"/> + <om:commonlyHasUnit rdf:resource="&om;decabecquerel"/> + <om:commonlyHasUnit rdf:resource="&om;decibecquerel"/> + <om:commonlyHasUnit rdf:resource="&om;exabecquerel"/> + <om:commonlyHasUnit rdf:resource="&om;femtobecquerel"/> + <om:commonlyHasUnit rdf:resource="&om;gigabecquerel"/> + <om:commonlyHasUnit rdf:resource="&om;hectobecquerel"/> + <om:commonlyHasUnit rdf:resource="&om;kilobecquerel"/> + <om:commonlyHasUnit rdf:resource="&om;megabecquerel"/> + <om:commonlyHasUnit rdf:resource="&om;microbecquerel"/> + <om:commonlyHasUnit rdf:resource="&om;millibecquerel"/> + <om:commonlyHasUnit rdf:resource="&om;nanobecquerel"/> + <om:commonlyHasUnit rdf:resource="&om;petabecquerel"/> + <om:commonlyHasUnit rdf:resource="&om;picobecquerel"/> + <om:commonlyHasUnit rdf:resource="&om;terabecquerel"/> + </owl:Class> + + <!-- Activity Unit Ontology --> + + <om:Unit rdf:about="&om;curie"> + <rdfs:label xml:lang="en">curie</rdfs:label> + <rdfs:label xml:lang="nl">curie</rdfs:label> + <rdfs:comment xml:lang="en">The curie is a unit of activity defined as 3.7e10 becquerel.</rdfs:comment> + <om:symbol>Ci</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">37000000000</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;becquerel"/> + <om:hasDimension rdf:resource="&om;frequency-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_3.7e10Becquerel"> + <om:hasNumericalValue>3.7e10</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;becquerel"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Activity"> + <om:commonlyHasUnit rdf:resource="&om;curie"/> + </owl:Class> + + <!-- Coulomb Per Kilogram Ontology --> + + <om:UnitDivision rdf:about="&om;coulombPerKilogram"> + <rdfs:label xml:lang="en">coulomb per kilogram</rdfs:label> + <rdfs:label xml:lang="nl">coulomb per kilogram</rdfs:label> + <om:symbol>C/kg</om:symbol> + <om:alternativeSymbol>C kg-1</om:alternativeSymbol> + <om:alternativeSymbol>C·kg-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;coulomb"/> + <om:hasDenominator rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;exposureToXAndGammaRays-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;ExposureToXAndGammaRays"> + <om:commonlyHasUnit rdf:resource="&om;coulombPerKilogram"/> + </owl:Class> + + <!-- Röntgen Ontology --> + + <om:Unit rdf:about="&om;röntgen"> + <rdfs:label xml:lang="en">röntgen</rdfs:label> + <rdfs:label xml:lang="nl">röntgen</rdfs:label> + <rdfs:comment xml:lang="en">The röntgen is a unit of exposure to x and γ rays defined as 2.58e-4 coulomb per kilogram.</rdfs:comment> + <om:symbol>R</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.000258</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;coulombPerKilogram"/> + <om:hasDimension rdf:resource="&om;exposureToXAndGammaRays-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_2.58e-4CoulombPerKilogram"> + <om:hasNumericalValue>2.58e-4</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;coulombPerKilogram"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;ExposureToXAndGammaRays"> + <om:commonlyHasUnit rdf:resource="&om;röntgen"/> + </owl:Class> + + <owl:Class rdf:about="&om;ExposureToXAndGammaRaysUnit"> + <rdfs:label xml:lang="en">exposure to x and γ rays unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:SingularUnit rdf:about="&om;röntgen"/> + <om:UnitDivision rdf:about="&om;coulombPerKilogram"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ExposureToXAndGammaRays"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ExposureToXAndGammaRaysUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Gray Per Second Ontology --> + + <om:UnitDivision rdf:about="&om;grayPerSecond-Time"> + <rdfs:label xml:lang="en">gray per second</rdfs:label> + <rdfs:label xml:lang="nl">gray per seconde</rdfs:label> + <om:symbol>Gy/s</om:symbol> + <om:alternativeSymbol>Gy s-1</om:alternativeSymbol> + <om:alternativeSymbol>Gy·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;gray"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;absorbedDoseRate-Dimension"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;milligrayPerSecond-Time"> + <rdfs:label xml:lang="en">milligray per second</rdfs:label> + <rdfs:label xml:lang="nl">milligray per seconde</rdfs:label> + <om:symbol>mGy/s</om:symbol> + <om:alternativeSymbol>mGy s-1</om:alternativeSymbol> + <om:alternativeSymbol>mGy·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;milligray"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;absorbedDoseRate-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;AbsorbedDoseRate"> + <om:commonlyHasUnit rdf:resource="&om;grayPerSecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;milligrayPerSecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;AbsorbedDoseRateUnit"> + <rdfs:label xml:lang="en">absorbed dose rate unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;grayPerSecond-Time"/> + <om:UnitDivision rdf:about="&om;milligrayPerSecond-Time"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AbsorbedDoseRate"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;AbsorbedDoseRateUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Dimension Ontologies --> + + <!-- Contents --> + + <!-- Exposure To X and Γ Rays Dimension Ontology --> + <!-- Absorbed Dose Rate Dimension Ontology --> + <!-- Radiance Dimension Ontology --> + + <!-- Exposure To X and Γ Rays Dimension Ontology --> + + <om:Dimension rdf:about="&om;exposureToXAndGammaRays-Dimension"> + <rdfs:label xml:lang="en">exposure to x and γ rays dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;ExposureToXAndGammaRays"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;exposureToXAndGammaRays-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Absorbed Dose Rate Dimension Ontology --> + + <om:Dimension rdf:about="&om;absorbedDoseRate-Dimension"> + <rdfs:label xml:lang="en">absorbed dose rate dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">2</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-3</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;AbsorbedDoseRate"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;absorbedDoseRate-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Radiance Dimension Ontology --> + + <om:Dimension rdf:about="&om;radiance-Dimension"> + <rdfs:label xml:lang="en">radiance dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">-3</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Radiance"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;radiance-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Nuclear Physics Ontology --> + + <!-- Contents --> + + <!-- Time Subclass Upper Ontology --> + + <!-- <om:ApplicationArea rdf:about="&om;nuclearPhysics"> --> + <!-- <rdfs:label xml:lang="en">nuclear physics</rdfs:label> --> + <!-- <rdfs:label xml:lang="nl">kernfysica</rdfs:label> --> + <!-- <om:uses_application_area rdf:resource="&om;space_and_time"/> --> + <!-- <om:usesQuantity rdf:resource="&om;Half-Life"/> --> + <!-- <om:usesUnit rdf:resource="&om;second-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;attosecond-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;centisecond-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;decasecond-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;decisecond-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;exasecond-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;femtosecond-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;gigasecond-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;hectosecond-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;kilosecond-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;megasecond-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;microsecond-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;millisecond-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;nanosecond-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;petasecond-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;picosecond-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;terasecond-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;day"/> --> + <!-- <om:usesUnit rdf:resource="&om;hour"/> --> + <!-- <om:usesUnit rdf:resource="&om;minute-Time"/> --> + <!-- <om:usesUnit rdf:resource="&om;shake"/> --> + <!-- <om:usesUnit rdf:resource="&om;year"/> --> + <!-- </om:ApplicationArea> --> + + <!-- Time Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;Half-Life"> + <rdfs:label xml:lang="en">half-life</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Time"/> + <om:symbol>t_½</om:symbol> + <om:LaTeXSymbol>T_{\frac{1}{2}}</om:LaTeXSymbol> + <om:LaTeXCommand>\Halflife</om:LaTeXCommand> + <om:alternativeSymbol>t_1/2</om:alternativeSymbol> + <om:alternativeSymbol>T_½</om:alternativeSymbol> + <om:alternativeSymbol>τ_½</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;Half-Life"> + <om:commonlyHasUnit rdf:resource="&om;second-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;Half-Life"> + <om:commonlyHasUnit rdf:resource="&om;attosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;centisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;exasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;femtosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;gigasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;hectosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;kilosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;megasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;nanosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;petasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;picosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;terasecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;Half-Life"> + <om:commonlyHasUnit rdf:resource="&om;day"/> + <om:commonlyHasUnit rdf:resource="&om;hour"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;shake"/> + <om:commonlyHasUnit rdf:resource="&om;year"/> + </owl:Class> + + <!-- Astronomy and Astrophysics Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Unit of Measure Ontologies --> + + <om:ApplicationArea rdf:about="&om;astronomyAndAstrophysics"> + <rdfs:label xml:lang="en">astronomy and astrophysics</rdfs:label> + <rdfs:label xml:lang="nl">astronomie en astrofysica</rdfs:label> + <!-- <om:uses_application_area rdf:resource="&om;space_and_time"/> --> + <om:usesQuantity rdf:resource="&om;Aberration"/> + <om:usesQuantity rdf:resource="&om;AberrationInLatitude"/> + <om:usesQuantity rdf:resource="&om;AberrationInLongitude"/> + <om:usesQuantity rdf:resource="&om;AbsoluteMagnitude"/> + <om:usesQuantity rdf:resource="&om;AbsoluteBolometricMagnitude"/> + <om:usesQuantity rdf:resource="&om;Albedo"/> + <om:usesQuantity rdf:resource="&om;Altitude"/> + <om:usesQuantity rdf:resource="&om;Amplitude"/> + <om:usesQuantity rdf:resource="&om;VAmplitude"/> + <om:usesQuantity rdf:resource="&om;PhotographicAmplitude"/> + <om:usesQuantity rdf:resource="&om;AngularSize"/> + <om:usesQuantity rdf:resource="&om;AnnualAberration"/> + <om:usesQuantity rdf:resource="&om;ApparentDiameter"/> + <om:usesQuantity rdf:resource="&om;ApparentDistanceModulus"/> + <om:usesQuantity rdf:resource="&om;ApparentMagnitude"/> + <om:usesQuantity rdf:resource="&om;Azimuth"/> + <om:usesQuantity rdf:resource="&om;BMagnitude"/> + <om:usesQuantity rdf:resource="&om;BMagnitudeAtMaximumBrightness"/> + <om:usesQuantity rdf:resource="&om;BMagnitudeAtMinimumBrightness"/> + <om:usesQuantity rdf:resource="&om;BolometricCorrection"/> + <om:usesQuantity rdf:resource="&om;BolometricMagnitude"/> + <om:usesQuantity rdf:resource="&om;BondAlbedo"/> + <om:usesQuantity rdf:resource="&om;BrightnessTemperature"/> + <om:usesQuantity rdf:resource="&om;Co-RotationRadius"/> + <om:usesQuantity rdf:resource="&om;ColdGasMassFraction"/> + <om:usesQuantity rdf:resource="&om;ColourIndex"/> + <om:usesQuantity rdf:resource="&om;ColourTemperature"/> + <om:usesQuantity rdf:resource="&om;Cut-OffWavelength"/> + <om:usesQuantity rdf:resource="&om;DarkNoise"/> + <om:usesQuantity rdf:resource="&om;Declination"/> + <om:usesQuantity rdf:resource="&om;DetectiveQuantumEfficiency"/> + <om:usesQuantity rdf:resource="&om;Detectivity"/> + <om:usesQuantity rdf:resource="&om;Diameter-Angle"/> + <om:usesQuantity rdf:resource="&om;DistanceModulus"/> + <om:usesQuantity rdf:resource="&om;DiurnalAberration"/> + <om:usesQuantity rdf:resource="&om;DynamicRange"/> + <om:usesQuantity rdf:resource="&om;Eccentricity"/> + <om:usesQuantity rdf:resource="&om;EclipticLatitude"/> + <om:usesQuantity rdf:resource="&om;EclipticLongitude"/> + <om:usesQuantity rdf:resource="&om;ElectronTemperature"/> + <om:usesQuantity rdf:resource="&om;Ellipticity"/> + <om:usesQuantity rdf:resource="&om;Extinction"/> + <om:usesQuantity rdf:resource="&om;GalacticCylindricalPolarAngleCoordinate"/> + <om:usesQuantity rdf:resource="&om;GalacticLatitude"/> + <om:usesQuantity rdf:resource="&om;GalacticLongitude"/> + <om:usesQuantity rdf:resource="&om;GeometricalAlbedo"/> + <om:usesQuantity rdf:resource="&om;HourAngle"/> + <om:usesQuantity rdf:resource="&om;InitialMassFunction"/> + <om:usesQuantity rdf:resource="&om;IntegratedMagnitude"/> + <om:usesQuantity rdf:resource="&om;IntrinsicColourIndex"/> + <om:usesQuantity rdf:resource="&om;IonizationTemperature"/> + <om:usesQuantity rdf:resource="&om;JeansMass"/> + <om:usesQuantity rdf:resource="&om;LightTime"/> + <om:usesQuantity rdf:resource="&om;LimitingMagnitude"/> + <om:usesQuantity rdf:resource="&om;LuminosityFunction"/> + <om:usesQuantity rdf:resource="&om;Epoch"/> + <om:usesQuantity rdf:resource="&om;EpochAtMaximumBrightness"/> + <om:usesQuantity rdf:resource="&om;ExtinctionAtWavelength"/> + <om:usesQuantity rdf:resource="&om;ExtinctionAtWaveband"/> + <om:usesQuantity rdf:resource="&om;ExtinctionInV"/> + <om:usesQuantity rdf:resource="&om;ExtinctionInB"/> + <om:usesQuantity rdf:resource="&om;ExtinctionInU"/> + <om:usesQuantity rdf:resource="&om;Magnitude"/> + <om:usesQuantity rdf:resource="&om;MagnitudeAtMaximumBrightness"/> + <om:usesQuantity rdf:resource="&om;MagnitudeAtMinimumBrightness"/> + <om:usesQuantity rdf:resource="&om;Metallicity"/> + <om:usesQuantity rdf:resource="&om;NoiseEquivalentPower"/> + <om:usesQuantity rdf:resource="&om;NormalAlbedo"/> + <om:usesQuantity rdf:resource="&om;NormalisedDetectivity"/> + <om:usesQuantity rdf:resource="&om;PeakWavelength"/> + <om:usesQuantity rdf:resource="&om;PhotographicMagnitude"/> + <om:usesQuantity rdf:resource="&om;PhotographicMagnitudeAtMaximumBrightness"/> + <om:usesQuantity rdf:resource="&om;PhotographicMagnitudeAtMinimumBrightness"/> + <om:usesQuantity rdf:resource="&om;PlanetaryAberration"/> + <om:usesQuantity rdf:resource="&om;QuantumEfficiency"/> + <om:usesQuantity rdf:resource="&om;Radius-Angle"/> + <om:usesQuantity rdf:resource="&om;RedMagnitude"/> + <om:usesQuantity rdf:resource="&om;Reddening"/> + <om:usesQuantity rdf:resource="&om;ReddeningB-V"/> + <om:usesQuantity rdf:resource="&om;ReddeningU-B"/> + <om:usesQuantity rdf:resource="&om;Responsivity"/> + <om:usesQuantity rdf:resource="&om;RightAscension"/> + <om:usesQuantity rdf:resource="&om;ScaleHeight"/> + <om:usesQuantity rdf:resource="&om;ScaleLength"/> + <om:usesQuantity rdf:resource="&om;SecularAberration"/> + <om:usesQuantity rdf:resource="&om;SpectralResponse"/> + <om:usesQuantity rdf:resource="&om;StellarAberration"/> + <om:usesQuantity rdf:resource="&om;SupergalacticLatitude"/> + <om:usesQuantity rdf:resource="&om;SupergalacticLongitude"/> + <om:usesQuantity rdf:resource="&om;TimeConstant"/> + <om:usesQuantity rdf:resource="&om;TrueDistanceModulus"/> + <om:usesQuantity rdf:resource="&om;TychoBroadbandMagnitude"/> + + <om:usesQuantity rdf:resource="&om;JohnsonMagnitude"/> + + <om:usesQuantity rdf:resource="&om;StroemgrenMagnitude"/> + + <om:usesQuantity rdf:resource="&om;CousinsMagnitude"/> + + <om:usesQuantity rdf:resource="&om;ThuanAndGunnMagnitude"/> + + <om:usesQuantity rdf:resource="&om;UMagnitude"/> + <om:usesQuantity rdf:resource="&om;VMagnitude"/> + <om:usesQuantity rdf:resource="&om;VMagnitudeAtMaximumBrightness"/> + <om:usesQuantity rdf:resource="&om;VMagnitudeAtMinimumBrightness"/> + <om:usesQuantity rdf:resource="&om;VisualAlbedo"/> + <om:usesQuantity rdf:resource="&om;WhiteLightMagnitude"/> + <om:usesQuantity rdf:resource="&om;WhiteLightMagnitudeAtMaximumBrightness"/> + <om:usesQuantity rdf:resource="&om;WhiteLightMagnitudeAtMinimumBrightness"/> + <om:usesQuantity rdf:resource="&om;ZenithDistance"/> + <om:usesQuantity rdf:resource="&om;_1040NanometreLockwoodMagnitude"/> + <om:usesQuantity rdf:resource="&om;uMagnitude"/> + <om:usesQuantity rdf:resource="&om;vMagnitude"/> + <om:usesQuantity rdf:resource="&om;bMagnitude"/> + <om:usesQuantity rdf:resource="&om;yMagnitude"/> + + <om:usesQuantity rdf:resource="&om;BetaNarrowMagnitude"/> + + <om:usesQuantity rdf:resource="&om;BetaWideMagnitude"/> + <om:usesQuantity rdf:resource="&om;IMagnitude"/> + <om:usesQuantity rdf:resource="&om;RMagnitude"/> + <om:usesQuantity rdf:resource="&om;gMagnitude"/> + <om:usesUnit rdf:resource="&om;amperePerWatt"/> + <om:usesUnit rdf:resource="&om;angstrom"/> + <om:usesUnit rdf:resource="&om;bitPerSecond-Time"/> + <om:usesUnit rdf:resource="&om;candelaPerSquareMetre"/> + <om:usesUnit rdf:resource="&om;centimetre"/> + <om:usesUnit rdf:resource="&om;cubicParsec"/> + <om:usesUnit rdf:resource="&om;day"/> + <om:usesUnit rdf:resource="&om;degreeSquared"/> + <om:usesUnit rdf:resource="&om;gigaelectronvolt"/> + <om:usesUnit rdf:resource="&om;gigaparsec"/> + <om:usesUnit rdf:resource="&om;hour-HourAngle"/> + <om:usesUnit rdf:resource="&om;jansky"/> + <om:usesUnit rdf:resource="&om;kelvin"/> + <om:usesUnit rdf:resource="&om;kiloelectronvolt"/> + <om:usesUnit rdf:resource="&om;kiloparsec"/> + <om:usesUnit rdf:resource="&om;kilometrePerSecond-TimePerMegaparsec"/> + <om:usesUnit rdf:resource="&om;lightYear"/> + <om:usesUnit rdf:resource="&om;magnitude"/> + <om:usesUnit rdf:resource="&om;magnitudePerSecond-AngleSquared"/> + <om:usesUnit rdf:resource="&om;megaelectronvolt"/> + <om:usesUnit rdf:resource="&om;megaparsec"/> + <om:usesUnit rdf:resource="&om;metreKilogramPerSecond-Time"/> + <om:usesUnit rdf:resource="&om;metrePerSecond-TimePerMetre"/> + <om:usesUnit rdf:resource="&om;micromagnitude"/> + <om:usesUnit rdf:resource="&om;microsecond-Angle"/> + <om:usesUnit rdf:resource="&om;millimagnitude"/> + <om:usesUnit rdf:resource="&om;millisecond-Angle"/> + <om:usesUnit rdf:resource="&om;millisecond-AnglePerYear"/> + <om:usesUnit rdf:resource="&om;minute-HourAngle"/> + <om:usesUnit rdf:resource="&om;minute-Angle"/> + <om:usesUnit rdf:resource="&om;nanometre"/> + <om:usesUnit rdf:resource="&om;one"/> + <om:usesUnit rdf:resource="&om;percent"/> + <om:usesUnit rdf:resource="&om;radian"/> + <om:usesUnit rdf:resource="&om;reciprocalCubicMetre"/> + <om:usesUnit rdf:resource="&om;reciprocalCubicParsec"/> + <om:usesUnit rdf:resource="&om;second-HourAngle"/> + <om:usesUnit rdf:resource="&om;second-Angle"/> + <om:usesUnit rdf:resource="&om;second-AngleSquared"/> + <om:usesUnit rdf:resource="&om;second-Time"/> + <om:usesUnit rdf:resource="&om;solarMass"/> + <om:usesUnit rdf:resource="&om;solarMassPerCubicParsec"/> + <om:usesUnit rdf:resource="&om;solarMassPerGigayearCubicKiloparsec"/> + <om:usesUnit rdf:resource="&om;solarMassPerGigayearCubicParsec"/> + <om:usesUnit rdf:resource="&om;solarLuminosity"/> + <om:usesUnit rdf:resource="&om;solarRadius"/> + <om:usesUnit rdf:resource="&om;voltPerWatt"/> + <om:usesUnit rdf:resource="&om;watt"/> + <om:usesUnit rdf:resource="&om;wattPerCubicmetre"/> + <om:usesUnit rdf:resource="&om;wattPerHertz"/> + <om:usesUnit rdf:resource="&om;wattPerNanometre"/> + <om:usesUnit rdf:resource="&om;wattPerSecond-AngleSquared"/> + <om:usesUnit rdf:resource="&om;wattPerSquareMetreHertz"/> + <om:usesUnit rdf:resource="&om;wattPerSquareMetreNanometre"/> + <om:usesUnit rdf:resource="&om;wattPerSteradianSquareMetre"/> + <om:usesUnit rdf:resource="&om;wattPerSteradianSquareMetreHertz"/> + <om:usesUnit rdf:resource="&om;year"/> + </om:ApplicationArea> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Length Subclass Upper Ontology --> + <!-- Time Subclass Upper Ontology --> + <!-- Mass Subclass Upper Ontology --> + <!-- Thermodynamic Temperature Subclass Upper Ontology --> + <!-- Quantity of Dimension One Subclass Upper Ontology --> + <!-- Angle Subclass Upper Ontology --> + <!-- Number Density Subclass Upper Ontology --> + <!-- Power Subclass Upper Ontology --> + <!-- Mass Fraction Subclass Upper Ontology --> + <!-- Detectivity Upper Ontology --> + <!-- Dynamic Range Upper Ontology --> + <!-- Spectral Response Upper Ontology --> + <!-- Magnitude Upper Ontology --> + <!-- Magnitude Subclass Upper Ontology --> + <!-- Quantum Efficiency Upper Ontology --> + <!-- Quantum Efficiency Subclass Upper Ontology --> + <!-- Dark Noise Upper Ontology --> + <!-- Normalised Detectivity Upper Ontology --> + <!-- Responsivity Upper Ontology --> + <!-- Angle Unit Ontology --> + <!-- Watt Ontology --> + + <!-- Length Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;Co-RotationRadius"> + <rdfs:label xml:lang="en">co-rotation radius</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Radius"/> + <rdfs:comment xml:lang="en">The radius (distance from the galaxy's centre) at which the stars move at the same speed as the spiral pattern or bar in a galaxy.</rdfs:comment> + <om:symbol>r_c</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Co-RotationRadius"> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;Cut-OffWavelength"> + <rdfs:label xml:lang="en">cut-off wavelength</rdfs:label> + <rdfs:comment xml:lang="en">Either: wavelengths at which the detectivity (D) falls to 0, or the wavelengths at which the detectivity falls to 1% of the peak value, or the wavelengths at which the normalised detectivity (D*) has fallen to half its peak value.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Wavelength"/> + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter1"/> + <om:symbol>λ_c</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Cut-OffWavelength"> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Cut-OffWavelength"> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Cut-OffWavelength"> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + </owl:Class> + + <owl:Class rdf:about="&om;PeakWavelength"> + <rdfs:label xml:lang="en">peak wavelength</rdfs:label> + <rdfs:comment xml:lang="en">Wavelength for which the detectivity is at a maximum.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Wavelength"/> + <om:symbol>λ_m</om:symbol> + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter1"/> + </owl:Class> + + <owl:Class rdf:about="&om;PeakWavelength"> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + </owl:Class> + + <owl:Class rdf:about="&om;PeakWavelength"> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + </owl:Class> + + <owl:Class rdf:about="&om;PeakWavelength"> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + </owl:Class> + + <owl:Class rdf:about="&om;ScaleHeight"> + <rdfs:label xml:lang="en">scale height</rdfs:label> + <rdfs:comment xml:lang="en">The scale height of a feature (such as the thin galactic disk) is the height (or position) at which the number density of the feature (for instance of the number of Population II stars) is equal to 1/e times the number density at the origin (for instance the Galactic Plane).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Length"/> + <om:symbol>h_z</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;ScaleHeight"> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;ScaleLength"> + <rdfs:label xml:lang="en">scale length</rdfs:label> + <om:alternativeLabel xml:lang="en">scale radius</om:alternativeLabel> + <rdfs:comment xml:lang="en">The radial distance from a galaxy's core at which the average intensity has fallen to 1/e of the intensity at the centre of the galaxy.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Length"/> + <om:symbol>r</om:symbol> + </owl:Class> + + <!-- Time Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;Epoch"> + <rdfs:label xml:lang="en">epoch</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Date"/> + </owl:Class> + + <owl:Class rdf:about="&om;Epoch"> + <om:commonlyHasUnit rdf:resource="&om;second-Time"/> + <om:commonlyHasUnit rdf:resource="&om;year"/> + </owl:Class> + + <owl:Class rdf:about="&om;EpochAtMaximumBrightness"> + <rdfs:label xml:lang="en">epoch at maximum brightness</rdfs:label> + <rdfs:comment xml:lang="en">A moment when the object (i.e. a variable star) was at maximum brightness.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Epoch"/> + </owl:Class> + + <owl:Class rdf:about="&om;EpochAtMaximumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;second-Time"/> + <om:commonlyHasUnit rdf:resource="&om;year"/> + </owl:Class> + + <owl:Class rdf:about="&om;PeriodOfVariability"> + <rdfs:label xml:lang="en">period of variability</rdfs:label> + <rdfs:comment xml:lang="en">The duration of one cycle in a (semi) periodical star.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Time"/> + <om:symbol>P</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;PeriodOfVariability"> + <om:commonlyHasUnit rdf:resource="&om;second-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;PeriodOfVariability"> + <om:commonlyHasUnit rdf:resource="&om;attosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;centisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;decisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;exasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;femtosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;gigasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;hectosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;kilosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;megasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;nanosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;petasecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;picosecond-Time"/> + <om:commonlyHasUnit rdf:resource="&om;terasecond-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;PeriodOfVariability"> + <om:commonlyHasUnit rdf:resource="&om;day"/> + <om:commonlyHasUnit rdf:resource="&om;hour"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Time"/> + <om:commonlyHasUnit rdf:resource="&om;shake"/> + <om:commonlyHasUnit rdf:resource="&om;year"/> + </owl:Class> + + <owl:Class rdf:about="&om;PeriodOfVariability"> + <om:commonlyHasUnit rdf:resource="&om;day-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;gigayear"/> + <om:commonlyHasUnit rdf:resource="&om;hour-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;second-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;year-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;year-Tropical"/> + </owl:Class> + + <owl:Class rdf:about="&om;LightTime"> + <rdfs:label xml:lang="en">light time</rdfs:label> + <rdfs:comment xml:lang="en">The time electromagnetic radiation takes to reach Earth from a distant source. Often the correction in light time is needed to accurately calculate the apparent position of solar system objects or to calculate the period of variable stars (different times are observed when the Earth is at a different position in its orbit).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Time"/> + <om:symbol>τ</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;LightTime"> + <om:commonlyHasUnit rdf:resource="&om;second-Time"/> + </owl:Class> + + <owl:Class rdf:about="&om;TimeConstant"> + <rdfs:label xml:lang="en">time constant</rdfs:label> + <rdfs:comment xml:lang="en">Time required to approach (1-1/e) of the final output value of a detector (about 63%) (Kitchin, Astrophysical Techniques, IoP, Table 1.1.2).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Time"/> + <om:symbol>τ</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;TimeConstant"> + <om:commonlyHasUnit rdf:resource="&om;second-Time"/> + </owl:Class> + + <!-- Mass Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;JeansMass"> + <rdfs:label xml:lang="en">Jeans mass</rdfs:label> + <rdfs:comment xml:lang="en">The critical mass of a molecular cloud, above which it will be unstable to collapse.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Mass"/> + <om:symbol>M_J</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;JeansMass"> + <om:commonlyHasUnit rdf:resource="&om;kilogram"/> + </owl:Class> + + <!-- Thermodynamic Temperature Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;BrightnessTemperature"> + <rdfs:label xml:lang="en">brightness temperature</rdfs:label> + <rdfs:comment xml:lang="en">The temperature that a blackbody would need to have in order to emit radiation of the observed intensity at a given wavelength (mostly used in radio astronomy).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;ThermodynamicTemperature"/> + </owl:Class> + + <owl:Class rdf:about="&om;ColourTemperature"> + <rdfs:label xml:lang="en">colour temperature</rdfs:label> + <rdfs:comment xml:lang="en">The temperature of a blackbody that has the same colour index as a given star.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;ThermodynamicTemperature"/> + </owl:Class> + + <owl:Class rdf:about="&om;ElectronTemperature"> + <rdfs:label xml:lang="en">electron temperature</rdfs:label> + <om:alternativeLabel xml:lang="en">kinetic temperature</om:alternativeLabel> + <rdfs:comment xml:lang="en">The temperature determined by the mean kinetic energy of free electrons in a plasma; also known as kinetic temperature.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;ThermodynamicTemperature"/> + <om:symbol>T_e</om:symbol> + <om:alternativeSymbol>T_k</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;IonizationTemperature"> + <rdfs:label xml:lang="en">ionization temperature</rdfs:label> + <rdfs:comment xml:lang="en">The temperature of a gas or plasma derived from the relative numbers of neutral atoms and ions. Specifically, it is the temperature for which the Saha equations would predict these relative numbers, assuming the atoms and ions are in thermodynamic equilibrium.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;ThermodynamicTemperature"/> + <om:symbol>T_ion</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;ElectronTemperature"> + <om:commonlyHasUnit rdf:resource="&om;kelvin"/> + </owl:Class> + + <owl:Class rdf:about="&om;IonizationTemperature"> + <om:commonlyHasUnit rdf:resource="&om;kelvin"/> + </owl:Class> + + <owl:Class rdf:about="&om;BrightnessTemperature"> + <om:commonlyHasUnit rdf:resource="&om;kelvin"/> + </owl:Class> + + <owl:Class rdf:about="&om;ColourTemperature"> + <om:commonlyHasUnit rdf:resource="&om;kelvin"/> + </owl:Class> + + <!-- Quantity of Dimension One Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;Albedo"> + <rdfs:label xml:lang="en">albedo</rdfs:label> + <rdfs:label xml:lang="nl">albedo</rdfs:label> + <rdfs:comment xml:lang="en">Ratio between radiation falling onto an object and the radiation reflected or scattered back. Or the ratio between the illumination and observed brightness.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;QuantityOfDimensionOne"/> + <om:symbol>α</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;NormalAlbedo"> + <rdfs:label xml:lang="en">normal albedo</rdfs:label> + <rdfs:comment xml:lang="en">Ratio between radiation falling vertically onto an object and the radiation radiated back vertically.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Albedo"/> + </owl:Class> + + <owl:Class rdf:about="&om;VisualAlbedo"> + <rdfs:label xml:lang="en">visual albedo</rdfs:label> + <rdfs:comment xml:lang="en">The albedo only for radiation in the visual part of the spectrum.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Albedo"/> + </owl:Class> + + <owl:Class rdf:about="&om;GeometricalAlbedo"> + <rdfs:label xml:lang="en">geometrical albedo</rdfs:label> + <om:alternativeLabel xml:lang="en">astronomical albedo</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">physical albedo</om:alternativeLabel> + <rdfs:comment xml:lang="en">Ratio between the brightness of an object as seen from the direction of a hypothetical white, diffusely reflecting sphere of the same size and at the same distance.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Albedo"/> + <om:symbol>A</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;BondAlbedo"> + <rdfs:label xml:lang="en">bond albedo</rdfs:label> + <om:alternativeLabel xml:lang="en">spherical albedo</om:alternativeLabel> + <rdfs:comment xml:lang="en">Is the fraction of the total incident solar radiation - the radiation at all wavelengths - that is reflected or scattered by an object in all directions.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Albedo"/> + </owl:Class> + + <owl:Class rdf:about="&om;Ellipticity"> + <rdfs:label xml:lang="en">ellipticity</rdfs:label> + <om:alternativeLabel xml:lang="en">oblateness</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">flattening</om:alternativeLabel> + <rdfs:comment xml:lang="en">A measure of the amount by which an object, such as a planet or a galaxy, deviates from a perfect sphere.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;QuantityOfDimensionOne"/> + <om:symbol>f</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Eccentricity"> + <rdfs:label xml:lang="en">eccentricity</rdfs:label> + <rdfs:label xml:lang="nl">eccentriciteit</rdfs:label> + <rdfs:comment xml:lang="en">A measure of the deviation from a circle for an orbit.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;QuantityOfDimensionOne"/> + <om:symbol>e</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Metallicity"> + <rdfs:label xml:lang="en">metallicity</rdfs:label> + <rdfs:comment xml:lang="en">The log of the ratio between the ratios of the observed Fe and H quantities in a star and the same ratio in the Sun. This is a very important quantity that is often used in astronomy as an indicator of the age of a star.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;QuantityOfDimensionOne"/> + </owl:Class> + + <owl:Class rdf:about="&om;Albedo"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NormalAlbedo"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;VisualAlbedo"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;GeometricalAlbedo"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;BondAlbedo"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicRange"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;Ellipticity"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;Eccentricity"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;Metallicity"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;QuantumEfficiency"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;TotalDensityParameter"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;Magnitude"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;AbsoluteMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;ApparentMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;BMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;BMagnitudeAtMaximumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;BMagnitudeAtMinimumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;MagnitudeAtMaximumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;MagnitudeAtMinimumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;PhotographicMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;PhotographicMagnitudeAtMaximumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;PhotographicMagnitudeAtMinimumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;UMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;VMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;VMagnitudeAtMaximumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;VMagnitudeAtMinimumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;WhiteLightMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;WhiteLightMagnitudeAtMaximumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;WhiteLightMagnitudeAtMinimumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;DetectiveQuantumEfficiency"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicRangeUnit"> + <rdfs:label xml:lang="en">dynamic range unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;QuantumEfficiencyUnit"> + <rdfs:label xml:lang="en">quantum efficiency unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicRange"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;DynamicRangeUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;QuantumEfficiency"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;QuantumEfficiencyUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Angle Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;Radius-Angle"> + <rdfs:label xml:lang="en">radius (angle)</rdfs:label> + <rdfs:label xml:lang="nl">radius (hoek)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;Diameter-Angle"> + <rdfs:label xml:lang="en">diameter (angle)</rdfs:label> + <rdfs:label xml:lang="nl">diameter (hoek)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;Altitude"> + <rdfs:label xml:lang="en">altitude</rdfs:label> + <om:alternativeLabel xml:lang="en">elevation</om:alternativeLabel> + <rdfs:comment xml:lang="en">The angular distance of a celestial body above or below the horizon, measured along the great circle passing through the body and the zenith.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + <om:symbol>h</om:symbol> + <om:alternativeSymbol>Alt</om:alternativeSymbol> + <ombibo:reference rdf:resource="&ombibo;Glossary_Astronomical_Almanac"/> + </owl:Class> + + <owl:Class rdf:about="&om;ApparentDiameter"> + <rdfs:label xml:lang="en">apparent diameter</rdfs:label> + <rdfs:comment xml:lang="en">The angle that the actual diameter of an object makes in the sky; also known as angular size. Most often small, so units are mostly arcminutes, arcseconds, or even milli- or microarcseconds.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;Azimuth"> + <rdfs:label xml:lang="en">azimuth</rdfs:label> + <rdfs:label xml:lang="nl">azimut</rdfs:label> + <rdfs:comment xml:lang="en">The angular distance measured clockwise along the horizon from a specified reference point (usually north) to the intersection with the great circle drawn from the zenith through a body on the celestial sphere.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + <om:symbol>A</om:symbol> + <om:alternativeSymbol>Az</om:alternativeSymbol> + <ombibo:reference rdf:resource="&ombibo;Glossary_Astronomical_Almanac"/> + </owl:Class> + + <owl:Class rdf:about="&om;Declination"> + <rdfs:label xml:lang="en">declination</rdfs:label> + <rdfs:label xml:lang="nl">declinatie</rdfs:label> + <rdfs:comment xml:lang="en">The angular distance on the celestial sphere north or south of the celestial equator. It is measured along the hour circle passing through the celestial object. Declination is usually given in combination with right ascension or hour angle.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + <om:symbol>δ</om:symbol> + <om:alternativeSymbol>dec</om:alternativeSymbol> + <ombibo:reference rdf:resource="&ombibo;Glossary_Astronomical_Almanac"/> + </owl:Class> + + <owl:Class rdf:about="&om;EclipticLatitude"> + <rdfs:label xml:lang="en">ecliptic latitude</rdfs:label> + <rdfs:comment xml:lang="en">The angular distance on the celestial sphere north or south of the ecliptic (the path of the Sun on the celestial sphere during one year). It is measured along the great circle passing through the object and the ecliptic poles and perpendicular to the ecliptic.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + <om:symbol>β</om:symbol> + <ombibo:reference rdf:resource="&ombibo;chapter13_Astronomical_Algorithms"/> + </owl:Class> + + <owl:Class rdf:about="&om;EclipticLongitude"> + <rdfs:label xml:lang="en">ecliptic longitude</rdfs:label> + <rdfs:comment xml:lang="en">The angular distance on the celestial sphere measured clockwise from the vernal equinox along the ecliptic (the path of the Sun on the celestial sphere during one year) to the intersection with the great circle drawn from the ecliptical north pole through the object.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + <om:symbol>λ</om:symbol> + <ombibo:reference rdf:resource="&ombibo;chapter13_Astronomical_Algorithms"/> + </owl:Class> + + <owl:Class rdf:about="&om;GalacticCylindricalPolarAngleCoordinate"> + <rdfs:label xml:lang="en">galactic cylindrical polar angle coordinate</rdfs:label> + <rdfs:comment xml:lang="en">The angle from the Galactic centre between the perpendicular projection of the Sun on the Galactic plane and the projection of the object. This is one of the three Galactic Cylindrical Polar Coordinates.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + <om:symbol>φ</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;GalacticLatitude"> + <rdfs:label xml:lang="en">galactic latitude</rdfs:label> + <rdfs:comment xml:lang="en">The angular distance on the celestial sphere north or south of the galactic equator. It is measured along the great circle passing through the object and the galactic poles and perpendicular to the galactic equator.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + <om:symbol>b</om:symbol> + <ombibo:reference rdf:resource="&ombibo;chapter13_Astronomical_Algorithms"/> + </owl:Class> + + <owl:Class rdf:about="&om;GalacticLongitude"> + <rdfs:label xml:lang="en">galactic longitude</rdfs:label> + <rdfs:comment xml:lang="en">The angular distance on the celestial sphere measured clockwise from the galactic centre (as defined by the International Astronomical Union (IAU)) along the galactic equator to the intersection with the great circle drawn from the galactic north pole through the object.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + <om:symbol>l</om:symbol> + <ombibo:reference rdf:resource="&ombibo;chapter13_Astronomical_Algorithms"/> + </owl:Class> + + <owl:Class rdf:about="&om;HourAngle"> + <rdfs:label xml:lang="en">hour angle</rdfs:label> + <rdfs:label xml:lang="nl">uurhoek</rdfs:label> + <rdfs:comment xml:lang="en">The angular distance on the celestial sphere measured westward along the celestial equator from the meridian to the hour circle that passes through the celestial object.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + <om:symbol>H</om:symbol> + <ombibo:reference rdf:resource="&ombibo;Glossary_Astronomical_Almanac"/> + </owl:Class> + + <owl:Class rdf:about="&om;RightAscension"> + <rdfs:label xml:lang="en">right ascension</rdfs:label> + <rdfs:label xml:lang="nl">rechte klimming</rdfs:label> + <rdfs:comment xml:lang="en">The angular distance on the celestial sphere measured eastward along the celestial equator from the equinox to the great circle passing through the celestial object and the celestial north pole.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + <om:symbol>α</om:symbol> + <om:alternativeSymbol>ra</om:alternativeSymbol> + <ombibo:reference rdf:resource="&ombibo;Glossary_Astronomical_Almanac"/> + </owl:Class> + + <owl:Class rdf:about="&om;SupergalacticLatitude"> + <rdfs:label xml:lang="en">supergalactic latitude</rdfs:label> + <rdfs:comment xml:lang="en">The angular distance on the celestial sphere north or south of the supergalactic equator. It is measured along the great circle passing through the object and the supergalactic poles and perpendicular to the supergalactic equator.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + <om:symbol>SGB</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;SupergalacticLongitude"> + <rdfs:label xml:lang="en">supergalactic longitude</rdfs:label> + <rdfs:comment xml:lang="en">The angular distance on the celestial sphere measured clockwise from the supergalactic centre (as defined by the International Astronomical Union (IAU)) along the supergalactic equator to the intersection with the great circle drawn from the supergalactic north pole through the object.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + <om:symbol>SGL</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;ZenithDistance"> + <rdfs:label xml:lang="en">zenith distance</rdfs:label> + <rdfs:label xml:lang="nl">zenitafstand</rdfs:label> + <om:alternativeLabel xml:lang="en">zenith angle</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">zenithoek</om:alternativeLabel> + <rdfs:comment xml:lang="en">The angular distance on the celestial sphere measured along the great circle from the zenith to the celestial object. z = 90° - h.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Angle"/> + <om:symbol>z</om:symbol> + <ombibo:reference rdf:resource="&ombibo;Glossary_Astronomical_Almanac"/> + </owl:Class> + + <owl:Class rdf:about="&om;Aberration"> + <rdfs:label xml:lang="en">aberration</rdfs:label> + <rdfs:comment xml:lang="en">The apparent angular displacement of the observed position of a celestial object from its geometric position, caused by the finite velocity of light in combination with the motions of the observer and of the observed object.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;AngularDisplacement"/> + <ombibo:reference rdf:resource="&ombibo;Glossary_Astronomical_Almanac"/> + </owl:Class> + + <owl:Class rdf:about="&om;PlanetaryAberration"> + <rdfs:label xml:lang="en">planetary aberration</rdfs:label> + <rdfs:comment xml:lang="en">The apparent angular displacement of the observed position of a celestial object produced by the motion of the observer and the actual motion of the observed object.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Aberration"/> + <ombibo:reference rdf:resource="&ombibo;Glossary_Astronomical_Almanac"/> + </owl:Class> + + <owl:Class rdf:about="&om;StellarAberration"> + <rdfs:label xml:lang="en">stellar aberration</rdfs:label> + <rdfs:comment xml:lang="en">The apparent angular displacement of the observed position of a celestial object resulting from the motion of the observer. Stellar aberration is divided into diurnal, annual, and secular components.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Aberration"/> + <ombibo:reference rdf:resource="&ombibo;Glossary_Astronomical_Almanac"/> + </owl:Class> + + <owl:Class rdf:about="&om;AnnualAberration"> + <rdfs:label xml:lang="en">annual aberration</rdfs:label> + <rdfs:comment xml:lang="en">The component of the stellar abberation resulting from the motion of the Earth about the Sun. The abberation is the apparent angular displacement of the observed position of a celestial object from its geometric position, caused by the finite velocity of light in combination with the motions of the observer and of the observed object.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;AngularDisplacement"/> + <ombibo:reference rdf:resource="&ombibo;Glossary_Astronomical_Almanac"/> + </owl:Class> + + <owl:Class rdf:about="&om;DiurnalAberration"> + <rdfs:label xml:lang="en">diurnal aberration</rdfs:label> + <rdfs:comment xml:lang="en">The component of the stellar abberation resulting from the diurnal motion of the observer around the centre of the Earth. The abberation is the apparent angular displacement of the observed position of a celestial object from its geometric position, caused by the finite velocity of light in combination with the motions of the observer and of the observed object.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;AngularDisplacement"/> + <ombibo:reference rdf:resource="&ombibo;Glossary_Astronomical_Almanac"/> + </owl:Class> + + <owl:Class rdf:about="&om;SecularAberration"> + <rdfs:label xml:lang="en">secular aberration</rdfs:label> + <rdfs:comment xml:lang="en">The component of the stellar abberation resulting from the motion of the solar system in space. This component is usually ignored. The abberation is the apparent angular displacement of the observed position of a celestial object from its geometric position, caused by the finite velocity of light in combination with the motions of the observer and of the observed object.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;AngularDisplacement"/> + <ombibo:reference rdf:resource="&ombibo;Glossary_Astronomical_Almanac"/> + </owl:Class> + + <owl:Class rdf:about="&om;AberrationInLongitude"> + <rdfs:label xml:lang="en">aberration in longitude</rdfs:label> + <rdfs:comment xml:lang="en">The apparent angular displacement in ecliptical longitude of the observed position of a celestial object from its geometric position, caused by the finite velocity of light in combination with the motions of the observer and of the observed object.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;AngularDisplacement"/> + <om:symbol>Δλ</om:symbol> + <ombibo:reference rdf:resource="&ombibo;chapter23_Astronomical_Algorithms"/> + </owl:Class> + + <owl:Class rdf:about="&om;AberrationInLatitude"> + <rdfs:label xml:lang="en">aberration in latitude</rdfs:label> + <rdfs:comment xml:lang="en">The apparent angular displacement in ecliptical latitude of the observed position of a celestial object from its geometric position, caused by the finite velocity of light in combination with the motions of the observer and of the observed object.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;AngularDisplacement"/> + <om:symbol>Δβ</om:symbol> + <ombibo:reference rdf:resource="&ombibo;chapter23_Astronomical_Algorithms"/> + </owl:Class> + + <!-- Number Density Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;InitialMassFunction"> + <rdfs:label xml:lang="en">initial mass function</rdfs:label> + <rdfs:comment xml:lang="en">The number of stars in mass fraction dM around mass M. Used in Salpeter's Initial Mass Function (IMF).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberDensity"/> + <om:symbol>IMF</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;LuminosityFunction"> + <rdfs:label xml:lang="en">luminosity function</rdfs:label> + <rdfs:comment xml:lang="en">The number of stars of absolute magnitudes between Mv and Mv+ΔMv per cubic parsec.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberDensity"/> + </owl:Class> + + <!-- Power Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;NoiseEquivalentPower"> + <rdfs:label xml:lang="en">noise equivalent power</rdfs:label> + <rdfs:comment xml:lang="en">Radiative flux on a detector needed for a signal/noise ratio of 1 (Kitchin, Astrophysical Techniques, IoP, Table 1.1.2).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Power"/> + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter1"/> + <om:symbol>NEP</om:symbol> + </owl:Class> + + <!-- Mass Fraction Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;ColdGasMassFraction"> + <rdfs:label xml:lang="en">cold gas mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of a galaxy that is in the form of cold gas ~10s K.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;ColdGasMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <!-- Detectivity Upper Ontology --> + + <owl:Class rdf:about="&om;Detectivity"> + <rdfs:label xml:lang="en">detectivity</rdfs:label> + <rdfs:comment xml:lang="en">Reciprocal of Noise equivalent power. The signal-to-noise ratio for incident radiation of unit intensity.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter1"/> + <om:symbol>D</om:symbol> + </owl:Class> + + <!-- Dynamic Range Upper Ontology --> + + <owl:Class rdf:about="&om;DynamicRange"> + <rdfs:label xml:lang="en">dynamic range</rdfs:label> + <rdfs:comment xml:lang="en">Ratio between the saturation output and the dark signal, sometimes only over the region of linearity.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter1"/> + </owl:Class> + + <owl:Class rdf:about="&om;DynamicRange"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Spectral Response Upper Ontology --> + + <owl:Class rdf:about="&om;SpectralResponse"> + <rdfs:label xml:lang="en">spectral response</rdfs:label> + <rdfs:comment xml:lang="en">The change in output signal as a function of changes in the wavelength of the input signal.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter1"/> + </owl:Class> + + <!-- Magnitude Upper Ontology --> + + <owl:Class rdf:about="&om;Magnitude"> + <rdfs:label xml:lang="en">magnitude</rdfs:label> + <rdfs:label xml:lang="nl">magnitude</rdfs:label> + <rdfs:comment xml:lang="en">Reverse logarithmic measure of the brightness of an object.</rdfs:comment> + + <om:longcomment xml:lang="en">The magnitude scale was originally created by Hipparchos of Nicea (160-127 BCE) and was measured by comparing the brightness between stars. Initially this was done inaccurately by eye but is currently done by using photoelectric photometers or even more recently by CCDs. Hipparchos divided the stars into six magnitude (brightness classes), the brightest stars being assigned to the first class and the faintest to the sixth class. By about the middle 1800s it became apparent that the traditional magnitude scale is close to a logarithmic scale with base 2.5. This is due to the fact that the response of the eye is nearly logarithmic. N.R. Pogson formalised the magnitude scale to closely match the traditional (visual) scale. It is now defined as: + m₁ - m₂ = - 2.5 log (f₁ / f₂) + where m₁ - m₂ is the magnitude difference between two objects, and f₁ and f₂ are the luminous fluxes of the two objects. The magnitude of Vega (α Lyrae, HD 172167) is defined to be 0 in all wavelengths and passbands, although in practice this can only be an approximation. The zero point is now defined using multiple standard stars from the north polar sequence (non-variable stars within 2 degrees of the north celestial pole) or secondary standard stars from other parts of the sky. Please note that the scale is inverted, objects of magnitude 1 have a higher luminous flux than objects of magnitude 5. Stars of magnitude 6 are just visible to the naked eye under good observing conditions. + The units of magnitude, also called magnitude, are usually not indicated except when indicating small magnitude differences when milli- or micromagnitudes are used.</om:longcomment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>m</om:symbol> + + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter3"></ombibo:reference> + + <ombibo:reference rdf:resource="&ombibo;IntroAstronomicalPhotometry_chapter_2"></ombibo:reference> + </owl:Class> + + <owl:Class rdf:about="&om;Magnitude"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Magnitude Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;ApparentDistanceModulus"> + <rdfs:label xml:lang="en">apparent distance modulus</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;DistanceModulus"/> + </owl:Class> + + <owl:Class rdf:about="&om;AbsoluteMagnitude"> + <rdfs:label xml:lang="en">absolute magnitude</rdfs:label> + <rdfs:label xml:lang="nl">absolute magnitude</rdfs:label> + <rdfs:comment xml:lang="en">Logarithmic measure of the brightness of an object as seen from a standard distance of 10 pc. Units usually not indicated (http://en.wikipedia.org/wiki/Magnitude_(astronomy).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Magnitude"/> + <om:symbol>M</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Amplitude"> + <rdfs:label xml:lang="en">amplitude</rdfs:label> + <rdfs:comment xml:lang="en">The difference between the maximum and minimum magnitudes of a variable star, i.e., the total range of its brightness.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <owl:Class rdf:about="&om;ApparentMagnitude"> + <rdfs:label xml:lang="en">apparent magnitude</rdfs:label> + <rdfs:label xml:lang="nl">schijnbare magnitude</rdfs:label> + <rdfs:comment xml:lang="en">Logarithmic measure of the apparent brightness of an object. Units usually not indicated(http://en.wikipedia.org/wiki/Magnitude_(astronomy).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Magnitude"/> + <om:symbol>m</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;BMagnitude"> + <rdfs:label xml:lang="en">B magnitude</rdfs:label> + <rdfs:comment xml:lang="en">Johnson B magnitude. The Johnson B band is a standard filter in the blue area. The central wavelength is 440nm and the bandwidth is 100nm. The filter to be used is the Corning 5030 filter plus the Schott GG13 filter.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;JohnsonMagnitude"/> + <om:symbol>B</om:symbol> + <om:alternativeSymbol>m_B</om:alternativeSymbol> + + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter3"></ombibo:reference> + </owl:Class> + + <owl:Class rdf:about="&om;BMagnitudeAtMaximumBrightness"> + <rdfs:label xml:lang="en">B magnitude at maximum brightness</rdfs:label> + <rdfs:comment xml:lang="en">Johnson B magnitude at maximum brightness (i.e. for a variable star). The Johnson B band is a standard filter in the blue area. The central wavelength is 440nm and the bandwidth is 100nm. The filter to be used is the Corning 5030 filter plus the Schott GG13 filter.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;BMagnitude"/> + <rdfs:subClassOf rdf:resource="&om;MagnitudeAtMaximumBrightness"/> + <om:symbol>B_max</om:symbol> + + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter3"></ombibo:reference> + </owl:Class> + + <owl:Class rdf:about="&om;BMagnitudeAtMinimumBrightness"> + <rdfs:label xml:lang="en">B magnitude at minimum brightness</rdfs:label> + <rdfs:comment xml:lang="en">Johnson B magnitude at minimum brightness (i.e. for a variable star). The Johnson B band is a standard filter in the blue area. The central wavelength is 440nm and the bandwidth is 100nm. The filter to be used is the Corning 5030 filter plus the Schott GG13 filter.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;BMagnitude"/> + <rdfs:subClassOf rdf:resource="&om;MagnitudeAtMinimumBrightness"/> + <om:symbol>B_min</om:symbol> + + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter3"></ombibo:reference> + </owl:Class> + + <owl:Class rdf:about="&om;BolometricMagnitude"> + <rdfs:label xml:lang="en">bolometric magnitude</rdfs:label> + <rdfs:comment xml:lang="en">The magnitude of a star measured across all wavelengths, so that it takes into account the total amount of energy radiated. If a star is a strong infrared or ultraviolet emitter, its bolometric magnitude will differ greatly from its visual magnitude.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Magnitude"/> + <om:symbol>m_bol</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;AbsoluteBolometricMagnitude"> + <rdfs:label xml:lang="en">absolute bolometric magnitude</rdfs:label> + <rdfs:comment xml:lang="en">The absolute magnitude (see absolute magnitude) of a star is a measure of its total energy emission per second, or luminosity, i.e., the bolometric magnitude from a standard distance (10 pc).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;BolometricMagnitude"/> + <om:symbol>M_bol</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;BolometricCorrection"> + <rdfs:label xml:lang="en">bolometric correction</rdfs:label> + <rdfs:comment xml:lang="en">The visual magnitude of an object minus its bolometric magnitude.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>BC</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;ColourIndex"> + <rdfs:label xml:lang="en">colour index</rdfs:label> + <rdfs:label xml:lang="nl">kleurindex</rdfs:label> + <rdfs:comment xml:lang="en">The difference between the apparent magnitude of a star at two different wavelengths (always the shorter-wavelength magnitude minus the longer-wavelength magnitude) to give a quantification of the star's colour. The magnitude of an object at different wavelengths are measured by using different filters before the detector. Often the Johnson system with UBV passbands are used. Other passbands may also be used (for instance g-r).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <owl:Class rdf:about="&om;IntrinsicColourIndex"> + <rdfs:label xml:lang="en">intrinsic colour index</rdfs:label> + <rdfs:comment xml:lang="en">The colour index a star would have in the absence of interstellar extinction (reddening). It is assumed that all stars of the same spectral type and luminosity class have the same colour index.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;ColourIndex"/> + </owl:Class> + + <owl:Class rdf:about="&om;DistanceModulus"> + + <rdfs:label xml:lang="en">distance modulus</rdfs:label> + + <rdfs:comment xml:lang="en">The difference between the apparent magnitude (m) of an astronomical object, such as a star, and its absolute magnitude (M), used as a distance measurement. Distances can be expressed in distance modulii as $$m-M = 5\log d + 10 = 10-5 log \varpi$$ where \(d\) is the distance in kiloparsec and \(\varpi\) is the parallax in milliarcseconds. + </rdfs:comment> + + <rdfs:subClassOf rdf:resource="&om;Distance"/> <!-- Eigenlijk is dit een maat voor de afstand --> + + <om:symbol>m-M</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;Extinction"> + <rdfs:label xml:lang="en">extinction</rdfs:label> + <rdfs:label xml:lang="nl">extinctie</rdfs:label> + <rdfs:comment xml:lang="en">Total extinction at a specific wavelength. The extinction is caused by dust and gas between a star and the observer. It is the difference between the observed magnitude and the magnitude the source would have had if no extinction had taken place.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>A</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;ExtinctionAtWavelength"> + <rdfs:label xml:lang="en">extinction at wavelength</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Extinction"/> + <om:symbol>A_λ</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;ExtinctionAtWaveband"> + <rdfs:label xml:lang="en">extinction at waveband</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Extinction"/> + <om:symbol>A_X</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;ExtinctionInV"> + <rdfs:label xml:lang="en">extinction in V</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;ExtinctionAtWaveband"/> + <om:symbol>A_V</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;ExtinctionInB"> + <rdfs:label xml:lang="en">extinction in B</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;ExtinctionAtWaveband"/> + <om:symbol>A_B</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;ExtinctionInU"> + <rdfs:label xml:lang="en">extinction in U</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;ExtinctionAtWaveband"/> + <om:symbol>A_U</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;IntegratedMagnitude"> + <rdfs:label xml:lang="en">integrated magnitude</rdfs:label> + <rdfs:comment xml:lang="en">The apparent magnitude that an extended object, such as a nebula or galaxy, would have if all its light were concentrated at a starlike point.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;LimitingMagnitude"> + <rdfs:label xml:lang="en">limiting magnitude</rdfs:label> + <rdfs:comment xml:lang="en">The magnitude of the faintest object (star) that can be detected by a telescope or other instrument. Depends not only on the telescope but also on the detector and on the observing method.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;MagnitudeAtMaximumBrightness"> + <rdfs:label xml:lang="en">magnitude at maximum brightness</rdfs:label> + <rdfs:comment xml:lang="en">The magnitude at maximum brightness of a variable star.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Magnitude"/> + <om:symbol>m_max</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;MagnitudeAtMinimumBrightness"> + <rdfs:label xml:lang="en">magnitude at minimum brightness</rdfs:label> + <rdfs:comment xml:lang="en">The magnitude at minimum brightness of a variable star.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Magnitude"/> + <om:symbol>m_min</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;PhotographicAmplitude"> + <rdfs:label xml:lang="en">photographic amplitude</rdfs:label> + <rdfs:comment xml:lang="en">Amplitude of the light variation in photographic magnitude.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Amplitude"/> + <om:symbol>A_V</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;PhotographicMagnitude"> + <rdfs:label xml:lang="en">photographic magnitude</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Magnitude"/> + <om:symbol>m_photo</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;PhotographicMagnitudeAtMaximumBrightness"> + <rdfs:label xml:lang="en">photographic magnitude at maximum brightness</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PhotographicMagnitude"/> + <rdfs:subClassOf rdf:resource="&om;MagnitudeAtMaximumBrightness"/> + <om:symbol>m_p,max</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;PhotographicMagnitudeAtMinimumBrightness"> + <rdfs:label xml:lang="en">photographic magnitude at minimum brightness</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PhotographicMagnitude"/> + <rdfs:subClassOf rdf:resource="&om;MagnitudeAtMinimumBrightness"/> + <om:symbol>m_p,min</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;RedMagnitude"> + <rdfs:label xml:lang="en">red magnitude</rdfs:label> + <rdfs:comment xml:lang="en">A red magnitude not specified for a specific photometric system.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Magnitude"/> + <om:symbol>r</om:symbol> + <om:alternativeSymbol>m_r</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;Reddening"> + <rdfs:label xml:lang="en">reddening</rdfs:label> + <om:alternativeLabel xml:lang="en">colour excess</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">wavelength-selective extinction</om:alternativeLabel> + <rdfs:comment xml:lang="en">Reddening causes the star to appear redder if more dust or gas is between the star and the observer.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>E</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;ReddeningB-V"> + <rdfs:label xml:lang="en">reddening (B-V)</rdfs:label> + <om:alternativeLabel xml:lang="en">colour excess (B-V)</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">wavelength-selective extinction (B-V)</om:alternativeLabel> + <rdfs:comment xml:lang="en">Reddening causes the star to appear redder if more dust or gas is between the star and the observer. The standard reddening is measured using the B and V passbands.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Reddening"/> + <om:symbol>E_B-V</om:symbol> + <om:LaTeXSymbol>E_{\mathit{B-V}}</om:LaTeXSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;ReddeningU-B"> + <rdfs:label xml:lang="en">reddening (U-B)</rdfs:label> + <om:alternativeLabel xml:lang="en">colour excess (U-B)</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">wavelength-selective extinction (U-B)</om:alternativeLabel> + <rdfs:comment xml:lang="en">Reddening measured with the U and B passbands.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Reddening"/> + <om:symbol>E_U-B</om:symbol> + <om:LaTeXSymbol>E_{\mathit{U-B}}</om:LaTeXSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;TrueDistanceModulus"> + <rdfs:label xml:lang="en">true distance modulus</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;DistanceModulus"/> + </owl:Class> + + <owl:Class rdf:about="&om;TychoBroadbandMagnitude"> + <rdfs:label xml:lang="en">Tycho broadband magnitude</rdfs:label> + <rdfs:comment xml:lang="en">Broadband Tycho magnitude (formed from B and V magintude measurements.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Magnitude"/> + <om:symbol>T</om:symbol> + <om:alternativeSymbol>m_T</om:alternativeSymbol> + </owl:Class> + + + + <owl:Class rdf:about="&om;JohnsonMagnitude"> + + <rdfs:label xml:lang="en">Johnson magnitude</rdfs:label> + + <rdfs:comment xml:lang="en">A magnitude measured in one of Johnson's standard passbands (using a standard filter, i.e. U, B, or V).</rdfs:comment> + + <om:longcomment xml:lang="en">For accurate photometry the magnitude needs to be determined over well-defined spectral regions as the spectrum of to objects may be quite different. These magnitudes are measured using filters that allows only radiation within specific spectral regions (passbands) to pass through to the detector. These filters have accurately defined transmission curves characterised by a central wavelength and a bandwidth. The UBV system devised by Harold Johnson and William Morgan has been the most important general system until recently. The precise definition requires a reflecting telescope with aluminised mirrors fitted with an RCA 1P21 photomultiplier. The U region corresponds to a region in the violet and ultraviolet, the B region corresponds to typical photographic response and the V region to the visual response region (approximating the eye's response curve).</om:longcomment> + + <rdfs:subClassOf rdf:resource="&om;Magnitude"/> + + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter3"></ombibo:reference> + + </owl:Class> + + + <owl:Class rdf:about="&om;StroemgrenMagnitude"> + + <rdfs:label xml:lang="en">Strömgren magnitude</rdfs:label> + + <rdfs:comment xml:lang="en">A magnitude measured in one of Strömgren's standard passbands (using a standard filter, u, b, v, or y) or in the passbands defined by Crawford (β_narrow or β_wide).</rdfs:comment> + + <rdfs:subClassOf rdf:resource="&om;Magnitude"/> + + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter3"></ombibo:reference> + + <ombibo:reference rdf:resource="&ombibo;Stroemgren1956"></ombibo:reference> + + <ombibo:reference rdf:resource="&ombibo;Crawford1958"></ombibo:reference> + + </owl:Class> + + + <owl:Class rdf:about="&om;CousinsMagnitude"> + + <rdfs:label xml:lang="en">Cousins magnitude</rdfs:label> + + <rdfs:comment xml:lang="en">A magnitude measured in one of Cousins standard passbands (using a standard filter, i.e. I or R).</rdfs:comment> + + <rdfs:subClassOf rdf:resource="&om;Magnitude"/> + + </owl:Class> + + + <owl:Class rdf:about="&om;ThuanAndGunnMagnitude"> + + <rdfs:label xml:lang="en">Thuan and Gunn magnitude</rdfs:label> + + <rdfs:comment xml:lang="en">A magnitude measured in one of Thuan and Gunn's standard passbands (using a standard filter, i.e. g).</rdfs:comment> + + <rdfs:subClassOf rdf:resource="&om;Magnitude"/> + + </owl:Class> + + <owl:Class rdf:about="&om;UMagnitude"> + <rdfs:label xml:lang="en">U magnitude</rdfs:label> + <rdfs:comment xml:lang="en">Johnson U magnitude. The Johnson U band is a standard passband in the ultraviolet area. The central wavelength is 365nm and the bandwidth is 70nm. The filter to be used is the Corning 9863 filter.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;JohnsonMagnitude"/> + <om:symbol>U</om:symbol> + <om:alternativeSymbol>m_U</om:alternativeSymbol> + + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter3"></ombibo:reference> + </owl:Class> + + <owl:Class rdf:about="&om;VAmplitude"> + <rdfs:label xml:lang="en">V amplitude</rdfs:label> + <rdfs:comment xml:lang="en">Amplitude of the light variation in Johnson V magnitude. The Johnson V band is a standard passband in the visual area, matching the response curve of the human eye. The central wavelength is 550nm and the bandwidth is 90nm. The filter to be used is the Corning 3384 filter.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Amplitude"/> + + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter3"></ombibo:reference> + <om:symbol>A_V</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;VMagnitude"> + <rdfs:label xml:lang="en">V magnitude</rdfs:label> + <rdfs:comment xml:lang="en">Johnson V magnitude. The Johnson V band is a standard passband in the visual area, matching the response curve of the human eye. The central wavelength is 550nm and the bandwidth is 90nm. The filter to be used is the Corning 3384 filter.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;JohnsonMagnitude"/> + <om:symbol>V</om:symbol> + <om:alternativeSymbol>m_V</om:alternativeSymbol> + + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter3"></ombibo:reference> + </owl:Class> + + <owl:Class rdf:about="&om;VMagnitudeAtMaximumBrightness"> + <rdfs:label xml:lang="en">V magnitude at maximum brightness</rdfs:label> + <rdfs:comment xml:lang="en">Johnson V magnitude (apparent) at maximum brightness (i.e. for a variable star). The Johnson V band is a standard filter in the visual area, matching the response curve of the human eye. The central wavelength is 550nm and the bandwidth is 90nm. The filter to be used is the Corning 3384 filter.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;VMagnitude"/> + <rdfs:subClassOf rdf:resource="&om;MagnitudeAtMaximumBrightness"/> + <om:symbol>V_max</om:symbol> + + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter3"></ombibo:reference> + </owl:Class> + + <owl:Class rdf:about="&om;VMagnitudeAtMinimumBrightness"> + <rdfs:label xml:lang="en">V magnitude at minimum brightness</rdfs:label> + <rdfs:comment xml:lang="en">Johnson V magnitude (apparent) at minimum brightness (i.e. for a variable star). The Johnson V band is a standard filter in the visual area, matching the response curve of the human eye. The central wavelength is 550nm and the bandwidth is 90nm. The filter to be used is the Corning 3384 filter.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;VMagnitude"/> + <rdfs:subClassOf rdf:resource="&om;MagnitudeAtMinimumBrightness"/> + <om:symbol>V_min</om:symbol> + + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter3"></ombibo:reference> + </owl:Class> + + <owl:Class rdf:about="&om;WhiteLightMagnitude"> + <rdfs:label xml:lang="en">white light magnitude</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Magnitude"/> + <om:symbol>m</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;WhiteLightMagnitudeAtMaximumBrightness"> + <rdfs:label xml:lang="en">white light magnitude at maximum brightness</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;WhiteLightMagnitude"/> + <rdfs:subClassOf rdf:resource="&om;MagnitudeAtMaximumBrightness"/> + <om:symbol>m_max</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;WhiteLightMagnitudeAtMinimumBrightness"> + <rdfs:label xml:lang="en">white light magnitude at minimum brightness</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;WhiteLightMagnitude"/> + <rdfs:subClassOf rdf:resource="&om;MagnitudeAtMinimumBrightness"/> + <om:symbol>m_min</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;_1040NanometreLockwoodMagnitude"> + <rdfs:label xml:lang="en">1040 nm Lockwood magnitude</rdfs:label> + <rdfs:comment xml:lang="en">A magnitude in the 1.04 micrometre band of the photometric system introduced by G.W. Lockwood.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Magnitude"/> + <om:symbol>m_L1040</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;uMagnitude"> + <rdfs:label xml:lang="en">u magnitude</rdfs:label> + <rdfs:comment xml:lang="en">u Magnitude in the Strömgren photometric system with a peak wavelength at 350 nm and a peak-half-width of 30 nm.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;StroemgrenMagnitude"/> + <om:symbol>u</om:symbol> + <om:alternativeSymbol>m_u</om:alternativeSymbol> + + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter3"></ombibo:reference> + + <ombibo:reference rdf:resource="&ombibo;Stroemgren1956"></ombibo:reference> + + <ombibo:reference rdf:resource="&ombibo;Crawford1958"></ombibo:reference> + </owl:Class> + + <owl:Class rdf:about="&om;vMagnitude"> + <rdfs:label xml:lang="en">v magnitude</rdfs:label> + <rdfs:comment xml:lang="en">v Magnitude in the Strömgren photometric system with a peak wavelength at 411 nm and a peak-half-width of 19 nm.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;StroemgrenMagnitude"/> + <om:symbol>v</om:symbol> + <om:alternativeSymbol>m_v</om:alternativeSymbol> + + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter3"></ombibo:reference> + + <ombibo:reference rdf:resource="&ombibo;Stroemgren1956"></ombibo:reference> + + <ombibo:reference rdf:resource="&ombibo;Crawford1958"></ombibo:reference> + </owl:Class> + + <owl:Class rdf:about="&om;bMagnitude"> + <rdfs:label xml:lang="en">b magnitude</rdfs:label> + <rdfs:comment xml:lang="en">b Magnitude in the Strömgren photometric system with a peak wavelength at 467 nm and a peak-half-width of 18 nm.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;StroemgrenMagnitude"/> + <om:symbol>b</om:symbol> + <om:alternativeSymbol>m_b</om:alternativeSymbol> + + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter3"></ombibo:reference> + + <ombibo:reference rdf:resource="&ombibo;Stroemgren1956"></ombibo:reference> + + <ombibo:reference rdf:resource="&ombibo;Crawford1958"></ombibo:reference> + </owl:Class> + + <owl:Class rdf:about="&om;yMagnitude"> + <rdfs:label xml:lang="en">y magnitude</rdfs:label> + <rdfs:comment xml:lang="en">y Magnitude in the Strömgren photometric system with a peak wavelength at 547 nm and a peak-half-width of 23 nm.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;StroemgrenMagnitude"/> + <om:symbol>y</om:symbol> + <om:alternativeSymbol>m_y</om:alternativeSymbol> + + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter3"></ombibo:reference> + + <ombibo:reference rdf:resource="&ombibo;Stroemgren1956"></ombibo:reference> + + <ombibo:reference rdf:resource="&ombibo;Crawford1958"></ombibo:reference> + </owl:Class> + + + <owl:Class rdf:about="&om;BetaNarrowMagnitude"> + + <rdfs:label xml:lang="en">β_narrow magnitude</rdfs:label> + + <rdfs:comment xml:lang="en">β_narrow Magnitude in the Strömgren-Crawford photometric system with a peak wavelength at 485.8 nm and a peak-half-width of 2.9 nm.</rdfs:comment> + + <rdfs:subClassOf rdf:resource="&om;StroemgrenMagnitude"/> + + <om:symbol>β_n</om:symbol> + + <om:alternativeSymbol>β_narrow</om:alternativeSymbol> + + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter3"></ombibo:reference> + + <ombibo:reference rdf:resource="&ombibo;Crawford1958"></ombibo:reference> + </owl:Class> + + + <owl:Class rdf:about="&om;BetaWideMagnitude"> + + <rdfs:label xml:lang="en">β_wide magnitude</rdfs:label> + + <rdfs:comment xml:lang="en">β_wide Magnitude in the Strömgren-Crawford photometric system with a peak wavelength at 485 nm and a peak-half-width of 12.9 nm.</rdfs:comment> + + <rdfs:subClassOf rdf:resource="&om;StroemgrenMagnitude"/> + + <om:symbol>β_w</om:symbol> + + <om:alternativeSymbol>β_wide</om:alternativeSymbol> + + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter3"></ombibo:reference> + + <ombibo:reference rdf:resource="&ombibo;Crawford1958"></ombibo:reference> + + </owl:Class> + + <owl:Class rdf:about="&om;IMagnitude"> + <rdfs:label xml:lang="en">I magnitude</rdfs:label> + <rdfs:comment xml:lang="en">I magnitude in the Cousins photometric system.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;CousinsMagnitude"/> + <om:symbol>I</om:symbol> + <om:alternativeSymbol>m_I</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;RMagnitude"> + <rdfs:label xml:lang="en">R magnitude</rdfs:label> + <rdfs:comment xml:lang="en">R magnitude in the Cousins photometric system.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;CousinsMagnitude"/> + <om:symbol>R</om:symbol> + <om:alternativeSymbol>m_R</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;gMagnitude"> + <rdfs:label xml:lang="en">g magnitude</rdfs:label> + <rdfs:comment xml:lang="en">g Magnitude in the Thuan and Gunn photometric system.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;ThuanAndGunnMagnitude"/> + <om:symbol>g</om:symbol> + <om:alternativeSymbol>m_g</om:alternativeSymbol> + </owl:Class> + + <!-- Quantum Efficiency Upper Ontology --> + + <owl:Class rdf:about="&om;QuantumEfficiency"> + <rdfs:label xml:lang="en">quantum efficiency</rdfs:label> + <rdfs:comment xml:lang="en">Ratio (of a detector such as a CCD) of actual number of detected photons and the number of incident photons.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>QE</om:symbol> + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter1"/> + </owl:Class> + + <owl:Class rdf:about="&om;QuantumEfficiency"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Quantum Efficiency Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;DetectiveQuantumEfficiency"> + <rdfs:label xml:lang="en">detective quantum efficiency</rdfs:label> + <rdfs:comment xml:lang="en">Square of ratio between the output signal noise ratio and the input signal noise ratio.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;QuantumEfficiency"/> + <om:symbol>DQE</om:symbol> + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter1"/> + </owl:Class> + + <!-- Dark Noise Upper Ontology --> + + <owl:Class rdf:about="&om;DarkNoise"> + <rdfs:label xml:lang="en">dark noise</rdfs:label> + <rdfs:comment xml:lang="en">Output from a detector when unilluminated - usually as RMS voltage or current (Kitchin, Astrophysical Techniques, IoP, Table 1.1.2).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter1"/> + </owl:Class> + + <!-- Normalised Detectivity Upper Ontology --> + + <owl:Class rdf:about="&om;NormalisedDetectivity"> + <rdfs:label xml:lang="en">normalised detectivity</rdfs:label> + <rdfs:comment xml:lang="en">The detectivity normalised by multiplying by the square root of the detector area, and by the electrical bandwidth. The units cm Hz(1/2)/W are commonly used and it then represents the signal-to-noise ratio when 1 W of radiation is incident on a detector with an area of 1 cm2, and the electrical bandwidth is 1 Hz.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter1"/> + <om:symbol>D*</om:symbol> + </owl:Class> + + <!-- Responsivity Upper Ontology --> + + <owl:Class rdf:about="&om;Responsivity"> + <rdfs:label xml:lang="en">responsivity</rdfs:label> + <rdfs:comment xml:lang="en">Detector output for unit intensity input. Units are usually volts per watt or amps per watt.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter1"/> + <om:symbol>R</om:symbol> + </owl:Class> + + <!-- Angle Unit Ontology --> + + <om:Unit rdf:about="&om;hour-HourAngle"> + <rdfs:label xml:lang="en">hour (hour angle)</rdfs:label> + <rdfs:label xml:lang="nl">uur (uurhoek)</rdfs:label> + <rdfs:comment xml:lang="nl">Wordt gebruikt als hoek (360°=24) voor o.a. rechte klimming. De h wordt meestal als superscript achter de waarde gezet gevolgd door de verdere opdeling naar minuten en seconden. Zoals in 5h34m12s09. Vaak wordt de fractie in seconden zonder punt geschreven, de s wordt als afscheiding gebruikt (http://en.wikipedia.org/wiki/Right_ascension).</rdfs:comment> + <om:symbol>h</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">15</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;degree"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <om:Unit rdf:about="&om;minute-HourAngle"> + <rdfs:label xml:lang="en">minute (hour angle)</rdfs:label> + <rdfs:label xml:lang="nl">minuut (uurhoek)</rdfs:label> + <rdfs:comment xml:lang="nl">Wordt gebruikt als hoek (360°=1440) voor o.a. rechte klimming. De m wordt meestal als superscript achter de waarde gezet gevolgd door de verdere opdeling naar seconden. Zoals in 5h34m12s09. Vaak wordt de fractie in seconden zonder punt geschreven, de s wordt als afscheiding gebruikt (http://en.wikipedia.org/wiki/Right_ascension).</rdfs:comment> + <om:symbol>m</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.25</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;degree"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <om:Unit rdf:about="&om;second-HourAngle"> + <rdfs:label xml:lang="en">second (hour angle)</rdfs:label> + <rdfs:label xml:lang="nl">seconde (uurhoek)</rdfs:label> + <rdfs:comment xml:lang="nl">Wordt gebruikt als hoek (360°=864000) voor o.a. rechte klimming. De s wordt meestal als superscript achter de waarde gezet. Zoals in 5h34m12s09. Vaak wordt de fractie in seconden zonder punt geschreven, de s wordt als afscheiding gebruikt (http://en.wikipedia.org/wiki/Right_ascension).</rdfs:comment> + <om:symbol>s</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0041666667</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;degree"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_15Degree"> + <om:hasNumericalValue>15</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;degree"/> + </om:Measure> + + <om:Measure rdf:about="&om;_0.25Degree"> + <om:hasNumericalValue>0.25</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;degree"/> + </om:Measure> + + <om:Measure rdf:about="&om;_4.1666667e-3Degree"> + <om:hasNumericalValue>4.1666667e-3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;degree"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Altitude"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;ApparentDiameter"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;radian"/> + </owl:Class> + + <owl:Class rdf:about="&om;Azimuth"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;Declination"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;Diameter-Angle"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;EclipticLatitude"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;EclipticLongitude"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;GalacticCylindricalPolarAngleCoordinate"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;radian"/> + </owl:Class> + + <owl:Class rdf:about="&om;GalacticLatitude"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;GalacticLongitude"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;HourAngle"> + <om:commonlyHasUnit rdf:resource="&om;hour-HourAngle"/> + <om:commonlyHasUnit rdf:resource="&om;minute-HourAngle"/> + <om:commonlyHasUnit rdf:resource="&om;second-HourAngle"/> + </owl:Class> + + <owl:Class rdf:about="&om;Radius-Angle"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;RightAscension"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;hour-HourAngle"/> + <om:commonlyHasUnit rdf:resource="&om;minute-HourAngle"/> + <om:commonlyHasUnit rdf:resource="&om;second-HourAngle"/> + </owl:Class> + + <owl:Class rdf:about="&om;SupergalacticLatitude"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;SupergalacticLongitude"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;ZenithDistance"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;Aberration"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;PlanetaryAberration"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;StellarAberration"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;AnnualAberration"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;DiurnalAberration"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;SecularAberration"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;second-Anglee"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;AberrationInLongitude"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;second-Anglee"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Angle"/> + </owl:Class> + + <owl:Class rdf:about="&om;AberrationInLatitude"> + <om:commonlyHasUnit rdf:resource="&om;degree"/> + <om:commonlyHasUnit rdf:resource="&om;second-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;millisecond-Angle"/> + <om:commonlyHasUnit rdf:resource="&om;microsecond-Angle"/> + </owl:Class> + + <!-- Solid Angle Unit Ontology --> + + <owl:Class rdf:about="&om;AngularSize"> + <om:commonlyHasUnit rdf:resource="&om;degreeSquared"/> + <om:commonlyHasUnit rdf:resource="&om;second-AngleSquared"/> + </owl:Class> + + <!-- Watt Ontology --> + + <owl:Class rdf:about="&om;NoiseEquivalentPower"> + <om:commonlyHasUnit rdf:resource="&om;watt"/> + </owl:Class> + + <!-- Unit of Measure Ontologies --> + + <!-- Contents --> + + <!-- Length Unit Ontology --> + <!-- Time Unit Ontology --> + <!-- Mass Unit Ontology --> + <!-- Volume Unit Ontology --> + <!-- Magnitude Ontology --> + <!-- Magnitude Multiples and Submultiples Ontology --> + <!-- Density Unit Ontology --> + <!-- Power Unit Ontology --> + <!-- Volt Per Watt Ontology --> + <!-- Ampere Per Watt Ontology --> + <!-- Jansky Ontology --> + <!-- Magnitude Per Second (Angle) Squared Ontology --> + <!-- Watt Per Second (Angle) Squared Ontology --> + <!-- Reciprocal Cubic Parsec Ontology --> + <!-- Gigayear Cubic Parsec Ontology --> + <!-- Gigayear Cubic Kiloparsec Ontology --> + <!-- Solar Mass Per Gigayear Cubic Parsec Ontology --> + <!-- Solar Mass Per Gigayear Cubic Kiloparsec Ontology --> + + <!-- Length Unit Ontology --> + + <om:Unit rdf:about="&om;astronomicalUnit"> + <rdfs:label xml:lang="en">astronomical unit</rdfs:label> + <rdfs:comment xml:lang="en">The atronomical unit is a unit of length defined as 149 597 870 700 metre (IAU 2012 Resolution).</rdfs:comment> + <om:symbol>au</om:symbol> + <om:alternativeSymbol>AU</om:alternativeSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">149597870700</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <ombibo:reference rdf:resource="&ombibo;IAU_2012_Resolution_B2"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;lightYear"> + <rdfs:label xml:lang="en">light year</rdfs:label> + <rdfs:label xml:lang="nl">lichtjaar</rdfs:label> + <om:alternativeLabel xml:lang="en">lightyear</om:alternativeLabel> + <rdfs:comment xml:lang="en">The light year is a unit of length defined as 9.46073e15 metre.</rdfs:comment> + <om:symbol>ly</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">9460730000000000</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;parsec"> + <rdfs:label xml:lang="en">parsec</rdfs:label> + <rdfs:comment xml:lang="en">The parsec is a unit of length defined as 3.08567758149137e16 metre.</rdfs:comment> + <om:symbol>pc</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">30856775814913700</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:PrefixedUnit rdf:about="&om;kiloparsec"> + <rdfs:label xml:lang="en">kiloparsec</rdfs:label> + <rdfs:label xml:lang="nl">kiloparsec</rdfs:label> + <rdfs:comment xml:lang="en">The kiloparsec is a unit of length defined as 1.0e3 parsec. Gebruikt voor afstanden op de schaal van het melkwegstelsel.</rdfs:comment> + <om:symbol>kpc</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;parsec"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megaparsec"> + <rdfs:label xml:lang="en">megaparsec</rdfs:label> + <rdfs:label xml:lang="nl">megaparsec</rdfs:label> + <rdfs:comment xml:lang="en">The megaparsec is a unit of length defined as 1.0e6 parsec. Gebruikt voor afstanden op de schaal van clusters.</rdfs:comment> + <om:symbol>Mpc</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;parsec"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigaparsec"> + <rdfs:label xml:lang="en">gigaparsec</rdfs:label> + <rdfs:label xml:lang="nl">gigaparsec</rdfs:label> + <rdfs:comment xml:lang="en">The gigaparsec is a unit of length defined as 1.0e9 parsec. Gebruikt voor de afstand op de schaal van het heelal.</rdfs:comment> + <om:symbol>Gpc</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;parsec"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:PrefixedUnit> + + <om:Unit rdf:about="&om;solarRadius"> + <rdfs:label xml:lang="en">solar radius</rdfs:label> + <rdfs:comment xml:lang="en">Solar radius is a unit used in astronomy to denote stellar or stellar system radii (http://en.wikipedia.org/wiki/solarRadius).</rdfs:comment> + <om:symbol>R_☉</om:symbol> + <om:LaTeXSymbol>R_{\astrosun}</om:LaTeXSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">695500000</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_6.955e8Metre"> + <om:hasNumericalValue>6.955e8</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Length"> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;solarRadius"/> + <om:commonlyHasUnit rdf:resource="&om;gigaparsec"/> + <om:commonlyHasUnit rdf:resource="&om;kiloparsec"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;Breadth"> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;solarRadius"/> + <om:commonlyHasUnit rdf:resource="&om;gigaparsec"/> + <om:commonlyHasUnit rdf:resource="&om;kiloparsec"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;Circumference"> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;solarRadius"/> + <om:commonlyHasUnit rdf:resource="&om;gigaparsec"/> + <om:commonlyHasUnit rdf:resource="&om;kiloparsec"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;Co-RotationRadius"> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;kiloparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;Cut-OffWavelength"> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;solarRadius"/> + <om:commonlyHasUnit rdf:resource="&om;gigaparsec"/> + <om:commonlyHasUnit rdf:resource="&om;kiloparsec"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;Depth"> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;solarRadius"/> + <om:commonlyHasUnit rdf:resource="&om;gigaparsec"/> + <om:commonlyHasUnit rdf:resource="&om;kiloparsec"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;Diameter"> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;solarRadius"/> + <om:commonlyHasUnit rdf:resource="&om;gigaparsec"/> + <om:commonlyHasUnit rdf:resource="&om;kiloparsec"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;Displacement"> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;solarRadius"/> + <om:commonlyHasUnit rdf:resource="&om;gigaparsec"/> + <om:commonlyHasUnit rdf:resource="&om;kiloparsec"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;Distance"> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;solarRadius"/> + <om:commonlyHasUnit rdf:resource="&om;gigaparsec"/> + <om:commonlyHasUnit rdf:resource="&om;kiloparsec"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;Height"> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;solarRadius"/> + <om:commonlyHasUnit rdf:resource="&om;gigaparsec"/> + <om:commonlyHasUnit rdf:resource="&om;kiloparsec"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;PeakWavelength"> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;solarRadius"/> + <om:commonlyHasUnit rdf:resource="&om;gigaparsec"/> + <om:commonlyHasUnit rdf:resource="&om;kiloparsec"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;Radius"> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;solarRadius"/> + <om:commonlyHasUnit rdf:resource="&om;gigaparsec"/> + <om:commonlyHasUnit rdf:resource="&om;kiloparsec"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;ScaleHeight"> + <om:commonlyHasUnit rdf:resource="&om;kiloparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;ScaleLength"> + <om:commonlyHasUnit rdf:resource="&om;kiloparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;Thickness"> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;solarRadius"/> + <om:commonlyHasUnit rdf:resource="&om;gigaparsec"/> + <om:commonlyHasUnit rdf:resource="&om;kiloparsec"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;Wavelength"> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;solarRadius"/> + <om:commonlyHasUnit rdf:resource="&om;gigaparsec"/> + <om:commonlyHasUnit rdf:resource="&om;kiloparsec"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;Width"> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;solarRadius"/> + <om:commonlyHasUnit rdf:resource="&om;gigaparsec"/> + <om:commonlyHasUnit rdf:resource="&om;kiloparsec"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <!-- Time Unit Ontology --> + + <om:PrefixedUnit rdf:about="&om;gigayear"> + <rdfs:label xml:lang="en">gigayear</rdfs:label> + <rdfs:label xml:lang="nl">gigajaar</rdfs:label> + <om:symbol>Gyr</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;year"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:PrefixedUnit> + + <om:Unit rdf:about="&om;day-Sidereal"> + <rdfs:label xml:lang="en">day (sidereal)</rdfs:label> + <om:alternativeLabel xml:lang="en">sidereal day</om:alternativeLabel> + <rdfs:comment xml:lang="en">The sidereal day is a unit of time defined as 8.616409e4 second.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">86164.09</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;hour-Sidereal"> + <rdfs:label xml:lang="en">hour (sidereal)</rdfs:label> + <om:alternativeLabel xml:lang="en">sidereal hour</om:alternativeLabel> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">3590.170</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;minute-Sidereal"> + <rdfs:label xml:lang="en">minute (sidereal)</rdfs:label> + <om:alternativeLabel xml:lang="en">sidereal minute</om:alternativeLabel> + <rdfs:comment xml:lang="en">The sidereal minute is a unit of time defined as 5.983617e1 second.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">59.83617</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;second-Sidereal"> + <rdfs:label xml:lang="en">second (sidereal)</rdfs:label> + <om:alternativeLabel xml:lang="en">sidereal second</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">second (sidereal)</om:alternativeLabel> + <rdfs:comment xml:lang="en">The sidereal second is a unit of time defined as 9.972696e-1 second.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.9972696</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;year-Sidereal"> + <rdfs:label xml:lang="en">year (sidereal)</rdfs:label> + <om:alternativeLabel xml:lang="en">sidereal year</om:alternativeLabel> + <rdfs:comment xml:lang="en">The sidereal year is a unit of time defined as 3.155815e7 second.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">31558150</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;year-Tropical"> + <rdfs:label xml:lang="en">year (tropical)</rdfs:label> + <om:alternativeLabel xml:lang="en">tropical year</om:alternativeLabel> + <rdfs:comment xml:lang="en">The tropical year is a unit of time defined as 3.155693e7 second.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">31556930</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;second-Time"/> + <om:hasDimension rdf:resource="&om;time-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_3.155693e7Second-Time"> + <om:hasNumericalValue>3.155693e7</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;second-Time"/> + </om:Measure> + + <om:Measure rdf:about="&om;_3.155815e7Second-Time"> + <om:hasNumericalValue>3.155815e7</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;second-Time"/> + </om:Measure> + + <om:Measure rdf:about="&om;_3.590170e3Second-Time"> + <om:hasNumericalValue>3.590170e3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;second-Time"/> + </om:Measure> + + <om:Measure rdf:about="&om;_5.983617e1Second-Time"> + <om:hasNumericalValue>5.983617e1</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;second-Time"/> + </om:Measure> + + <om:Measure rdf:about="&om;_8.616409e4Second-Time"> + <om:hasNumericalValue>8.616409e4</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;second-Time"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Time"> + <om:commonlyHasUnit rdf:resource="&om;day-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;gigayear"/> + <om:commonlyHasUnit rdf:resource="&om;hour-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;second-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;year-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;year-Tropical"/> + </owl:Class> + + <owl:Class rdf:about="&om;Date"> + <om:commonlyHasUnit rdf:resource="&om;day-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;gigayear"/> + <om:commonlyHasUnit rdf:resource="&om;hour-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;second-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;year-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;year-Tropical"/> + </owl:Class> + + <owl:Class rdf:about="&om;Duration"> + <om:commonlyHasUnit rdf:resource="&om;day-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;gigayear"/> + <om:commonlyHasUnit rdf:resource="&om;hour-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;second-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;year-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;year-Tropical"/> + </owl:Class> + + <owl:Class rdf:about="&om;Half-Life"> + <om:commonlyHasUnit rdf:resource="&om;day-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;gigayear"/> + <om:commonlyHasUnit rdf:resource="&om;hour-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;second-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;year-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;year-Tropical"/> + </owl:Class> + + <owl:Class rdf:about="&om;Period"> + <om:commonlyHasUnit rdf:resource="&om;day-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;gigayear"/> + <om:commonlyHasUnit rdf:resource="&om;hour-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;minute-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;second-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;year-Sidereal"/> + <om:commonlyHasUnit rdf:resource="&om;year-Tropical"/> + </owl:Class> + + <!-- Mass Unit Ontology --> + + <om:Unit rdf:about="&om;solarMass"> + <rdfs:label xml:lang="en">solar mass</rdfs:label> + <rdfs:label xml:lang="nl">zonsmassa</rdfs:label> + <rdfs:comment xml:lang="en">Solar mass is a unit used in astronomy to denote stellar or galactic masses (http://en.wikipedia.org/wiki/SolarMass).</rdfs:comment> + <om:symbol>M_☉</om:symbol> + <om:LaTeXSymbol>M_{\astrosun}</om:LaTeXSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">1988920000000000000000000000000</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogram"/> + <om:hasDimension rdf:resource="&om;mass-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_1.98892e30Kilogram"> + <om:hasNumericalValue>1.98892e30</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogram"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Mass"> + <om:commonlyHasUnit rdf:resource="&om;solarMass"/> + </owl:Class> + + <owl:Class rdf:about="&om;JeansMass"> + <om:commonlyHasUnit rdf:resource="&om;solarMass"/> + </owl:Class> + + <!-- Volume Unit Ontology --> + + <om:UnitExponentiation rdf:about="&om;cubicParsec"> + <rdfs:label xml:lang="en">cubic parsec</rdfs:label> + <rdfs:label xml:lang="nl">kubieke parsec</rdfs:label> + <om:symbol>pc3</om:symbol> + <om:hasBase rdf:resource="&om;parsec"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:UnitExponentiation> + + <om:UnitExponentiation rdf:about="&om;cubicKiloparsec"> + <rdfs:label xml:lang="en">cubic kiloparsec</rdfs:label> + <rdfs:label xml:lang="nl">kubieke kiloparsec</rdfs:label> + <om:symbol>kpc3</om:symbol> + <om:hasBase rdf:resource="&om;kiloparsec"/> + <om:hasExponent rdf:datatype="&xsd;integer">3</om:hasExponent> + <om:hasDimension rdf:resource="&om;volume-Dimension"/> + </om:UnitExponentiation> + + <owl:Class rdf:about="&om;Volume"> + <om:commonlyHasUnit rdf:resource="&om;cubicParsec"/> + <om:commonlyHasUnit rdf:resource="&om;cubicKiloparsec"/> + </owl:Class> + + <!-- Magnitude Ontology --> + + <om:Unit rdf:about="&om;magnitude"> + <rdfs:label xml:lang="en">magnitude</rdfs:label> + <rdfs:label xml:lang="nl">magnitude</rdfs:label> + <rdfs:comment xml:lang="en">Eenheid waarmee de helderheid van sterren wordt aangegeven. Meestal wordt het symbool niet aangeduid (http://en.wikipedia.org/wiki/Magnitude_(astronomy)).</rdfs:comment> + <om:symbol>mag</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;one"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <owl:Class rdf:about="&om;Magnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;AbsoluteMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;Amplitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;VAmplitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;PhotographicAmplitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;ApparentDistanceModulus"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;ApparentMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;BMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;BMagnitudeAtMaximumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;BMagnitudeAtMinimumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;BolometricMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;AbsoluteBolometricMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;BolometricCorrection"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;ColourIndex"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;IntrinsicColourIndex"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;DistanceModulus"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;Extinction"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;ExtinctionAtWavelength"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;ExtinctionAtWaveband"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;ExtinctionInV"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;ExtinctionInB"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;ExtinctionInU"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;IntegratedMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;LimitingMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;MagnitudeAtMaximumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;MagnitudeAtMinimumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;PhotographicMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;PhotographicMagnitudeAtMaximumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;PhotographicMagnitudeAtMinimumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;RedMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;Reddening"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;ReddeningB-V"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;ReddeningU-B"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;TrueDistanceModulus"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;TychoBroadbandMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;UMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;VMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;VMagnitudeAtMaximumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;VMagnitudeAtMinimumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;WhiteLightMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;WhiteLightMagnitudeAtMaximumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;WhiteLightMagnitudeAtMinimumBrightness"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;_1040NanometreLockwoodMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;uMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;vMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;bMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;yMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + + + <owl:Class rdf:about="&om;BetaNarrowMagnitude"> + + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + + </owl:Class> + + + <owl:Class rdf:about="&om;BetaWideMagnitude"> + + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + + </owl:Class> + + <owl:Class rdf:about="&om;IMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;RMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;gMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;magnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;MagnitudeUnit"> + <rdfs:label xml:lang="en">magnitude unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + <om:Unit rdf:about="&om;magnitude"/> + <om:PrefixedUnit rdf:about="&om;millimagnitude"/> + <om:PrefixedUnit rdf:about="&om;micromagnitude"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Magnitude"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;MagnitudeUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Magnitude Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;millimagnitude"> + <rdfs:label xml:lang="en">millimagnitude</rdfs:label> + <rdfs:label xml:lang="nl">millimagnitude</rdfs:label> + <rdfs:comment xml:lang="en">The millimagnitude is a unit of magnitude defined as 1.0e-3 magnitude.</rdfs:comment> + <om:symbol>mmag</om:symbol> + <om:hasPrefix rdf:resource="&om;milli"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;magnitude"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;micromagnitude"> + <rdfs:label xml:lang="en">micromagnitude</rdfs:label> + <rdfs:label xml:lang="nl">micromagnitude</rdfs:label> + <rdfs:comment xml:lang="en">The micromagnitude is a unit of magnitude defined as 1.0e-6 magnitude.</rdfs:comment> + <om:symbol>μmag</om:symbol> + <om:hasPrefix rdf:resource="&om;micro"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;magnitude"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;Magnitude"> + <om:commonlyHasUnit rdf:resource="&om;millimagnitude"/> + <om:commonlyHasUnit rdf:resource="&om;micromagnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;AbsoluteMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;millimagnitude"/> + <om:commonlyHasUnit rdf:resource="&om;micromagnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;ApparentMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;millimagnitude"/> + <om:commonlyHasUnit rdf:resource="&om;micromagnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;BMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;millimagnitude"/> + <om:commonlyHasUnit rdf:resource="&om;micromagnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;UMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;millimagnitude"/> + <om:commonlyHasUnit rdf:resource="&om;micromagnitude"/> + </owl:Class> + + <owl:Class rdf:about="&om;VMagnitude"> + <om:commonlyHasUnit rdf:resource="&om;millimagnitude"/> + <om:commonlyHasUnit rdf:resource="&om;micromagnitude"/> + </owl:Class> + + <!-- Density Unit Ontology --> + + <om:UnitDivision rdf:about="&om;solarMassPerCubicParsec"> + <rdfs:label xml:lang="en">solar mass per cubic parsec</rdfs:label> + <rdfs:label xml:lang="nl">zonsmassa per kubieke parsec</rdfs:label> + <rdfs:comment xml:lang="en">The mass (in solar masses) per cubic parsec.</rdfs:comment> + <om:symbol>M_☉/pc3</om:symbol> + <om:alternativeSymbol>M_☉ pc-3</om:alternativeSymbol> + <om:alternativeSymbol>M_☉·pc-3</om:alternativeSymbol> + <om:LaTeXSymbol>M_{\astrosun} pc^{-3}</om:LaTeXSymbol> + <om:hasNumerator rdf:resource="&om;solarMass"/> + <om:hasDenominator rdf:resource="&om;cubicParsec"/> + <om:hasDimension rdf:resource="&om;density-Dimension"/> + </om:UnitDivision> + + <!-- Power Unit Ontology --> + + <om:Unit rdf:about="&om;solarLuminosity"> + <rdfs:label xml:lang="en">solar luminosity</rdfs:label> + <rdfs:comment xml:lang="en">Solar luminosity is a unit used in astronomy to denote stellar or galactic radiant fluxes (http://en.wikipedia.org/wiki/SolarLuminosity).</rdfs:comment> + <om:symbol>L_☉</om:symbol> + <om:LaTeXSymbol>L_{\astrosun}</om:LaTeXSymbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">383900000000000000000000000</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;watt"/> + <om:hasDimension rdf:resource="&om;power-Dimension"/> + </om:Unit> + + <owl:Class rdf:about="&om;Power"> + <om:commonlyHasUnit rdf:resource="&om;solarLuminosity"/> + </owl:Class> + + <owl:Class rdf:about="&om;HeatFlowRate"> + <om:commonlyHasUnit rdf:resource="&om;solarLuminosity"/> + </owl:Class> + + <owl:Class rdf:about="&om;RadiantFlux"> + <om:commonlyHasUnit rdf:resource="&om;solarLuminosity"/> + </owl:Class> + + <!-- Volt Per Watt Ontology --> + + <om:UnitDivision rdf:about="&om;voltPerWatt"> + <rdfs:label xml:lang="en">volt per watt</rdfs:label> + <rdfs:label xml:lang="nl">volt per watt</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Volt per watt is a unit of responsivity.</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Volt per watt is a unit of responsivity defined as volt divided by watt. Volt per watt is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>V/W</om:symbol> + <om:alternativeSymbol>V W-1</om:alternativeSymbol> + <om:alternativeSymbol>V·W-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;volt"/> + <om:hasDenominator rdf:resource="&om;watt"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Responsivity"> + <om:commonlyHasUnit rdf:resource="&om;voltPerWatt"/> + </owl:Class> + + <owl:Class rdf:about="&om;ResponsivityUnit"> + <rdfs:label xml:lang="en">responsivity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;voltPerWatt"/> + <om:UnitDivision rdf:about="&om;amperePerWatt"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + <ombibo:reference rdf:resource="&ombibo;Astrophysical_Techniques_chapter1"/> + </owl:Class> + + <owl:Class rdf:about="&om;Responsivity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ResponsivityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Ampere Per Watt Ontology --> + + <om:UnitDivision rdf:about="&om;amperePerWatt"> + <rdfs:label xml:lang="en">ampere per watt</rdfs:label> + <rdfs:label xml:lang="nl">ampere per watt</rdfs:label> + <!-- <rdfs:comment xml:lang="en">Ampere per watt is a unit of responsivity.</rdfs:comment> --> + <!-- <om:longcomment xml:lang="en">Ampere per watt is a unit of responsivity defined as ampere divided by watt. Ampere per watt is a derived unit in the International System of Units.</om:longcomment> --> + <om:symbol>A/W</om:symbol> + <om:alternativeSymbol>A W-1</om:alternativeSymbol> + <om:alternativeSymbol>A·W-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;ampere"/> + <om:hasDenominator rdf:resource="&om;watt"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Responsivity"> + <om:commonlyHasUnit rdf:resource="&om;amperePerWatt"/> + </owl:Class> + + <!-- Jansky Ontology --> + + <om:Unit rdf:about="&om;jansky"> + <rdfs:label xml:lang="en">jansky</rdfs:label> + <rdfs:label xml:lang="nl">jansky</rdfs:label> + <om:alternativeLabel xml:lang="en">flux unit</om:alternativeLabel> + <om:symbol>Jy</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <!-- Magnitude Per Second (Angle) Squared Ontology --> + + <om:UnitDivision rdf:about="&om;magnitudePerSecond-AngleSquared"> + <rdfs:label xml:lang="en">magnitude per second (angle) squared</rdfs:label> + <rdfs:comment xml:lang="en">The brightness (in magnitudes) of an area on the celestial sphere of 1 arcsecond by 1 arcsecond.</rdfs:comment> + <om:symbol>mag/arcsec2</om:symbol> + <om:alternativeSymbol>mag arcsec-2</om:alternativeSymbol> + <om:alternativeSymbol>mag·arcsec-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;magnitude"/> + <om:hasDenominator rdf:resource="&om;second-AngleSquared"/> + </om:UnitDivision> + + <!-- Watt Per Second (Angle) Squared Ontology --> + + <om:UnitDivision rdf:about="&om;wattPerSecond-AngleSquared"> + <rdfs:label xml:lang="en">watt per second (angle) squared</rdfs:label> + <rdfs:comment xml:lang="en">The radiative intensity (in watts) of an area on the celestial sphere of 1 arcsecond by 1 arcsecond.</rdfs:comment> + <om:symbol>W/arcsec2</om:symbol> + <om:alternativeSymbol>W arcsec-2</om:alternativeSymbol> + <om:alternativeSymbol>W·arcsec-2</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;watt"/> + <om:hasDenominator rdf:resource="&om;second-AngleSquared"/> + </om:UnitDivision> + + <!-- Reciprocal Cubic Parsec Ontology --> + + <om:UnitExponentiation rdf:about="&om;reciprocalCubicParsec"> + <rdfs:label xml:lang="en">reciprocal cubic parsec</rdfs:label> + <rdfs:label xml:lang="nl">omgekeerde kubieke parsec</rdfs:label> + <om:symbol>pc-3</om:symbol> + <om:hasBase rdf:resource="&om;parsec"/> + <om:hasExponent rdf:datatype="&xsd;integer">-3</om:hasExponent> + <om:hasDimension rdf:resource="&om;numberDensity-Dimension"/> + </om:UnitExponentiation> + + <owl:Class rdf:about="&om;NumberDensity"> + <om:commonlyHasUnit rdf:resource="&om;reciprocalCubicParsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;InitialMassFunction"> + <om:commonlyHasUnit rdf:resource="&om;reciprocalCubicParsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;LuminosityFunction"> + <om:commonlyHasUnit rdf:resource="&om;reciprocalCubicParsec"/> + </owl:Class> + + <!-- Gigayear Cubic Parsec Ontology --> + + <om:UnitMultiplication rdf:about="&om;gigayearCubicParsec"> + <rdfs:label xml:lang="en">gigayear cubic parsec</rdfs:label> + <rdfs:label xml:lang="nl">gigajaar kubieke parsec</rdfs:label> + <om:symbol>Gyr pc3</om:symbol> + <om:alternativeSymbol>Gyr·pc3</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;gigayear"/> + <hasTerm2 rdf:resource="&om;cubicParsec"/> + </om:UnitMultiplication> + + <!-- Gigayear Cubic Kiloparsec Ontology --> + + <om:UnitMultiplication rdf:about="&om;gigayearCubicKiloparsec"> + <rdfs:label xml:lang="en">gigayear cubic kiloparsec</rdfs:label> + <rdfs:label xml:lang="nl">gigajaar kubieke kiloparsec</rdfs:label> + <om:symbol>Gyr kpc3</om:symbol> + <om:alternativeSymbol>Gyr·kpc3</om:alternativeSymbol> + <hasTerm1 rdf:resource="&om;gigayear"/> + <hasTerm2 rdf:resource="&om;cubicKiloparsec"/> + </om:UnitMultiplication> + + <!-- Solar Mass Per Gigayear Cubic Parsec Ontology --> + + <om:UnitDivision rdf:about="&om;solarMassPerGigayearCubicParsec"> + <rdfs:label xml:lang="en">solar mass per gigayear cubic parsec</rdfs:label> + <rdfs:comment xml:lang="en">The amount of stellar mass created per cubic parsec in each billion years.</rdfs:comment> + <om:symbol>M_☉/(Gyr pc3)</om:symbol> + <om:alternativeSymbol>M_☉ Gyr-1 pc-3</om:alternativeSymbol> + <om:alternativeSymbol>M_☉·Gyr-1·pc-3</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;solarMass"/> + <om:hasDenominator rdf:resource="&om;gigayearCubicParsec"/> + </om:UnitDivision> + + <!-- Solar Mass Per Gigayear Cubic Kiloparsec Ontology --> + + <om:UnitDivision rdf:about="&om;solarMassPerGigayearCubicKiloparsec"> + <rdfs:label xml:lang="en">solar mass per gigayear cubic kiloparsec</rdfs:label> + <rdfs:comment xml:lang="en">The amount of stellar mass created per cubic kiloparsec in each billion years.</rdfs:comment> + <om:symbol>M_☉/(Gyr kpc3)</om:symbol> + <om:alternativeSymbol>M_☉ Gyr-1 kpc-3</om:alternativeSymbol> + <om:alternativeSymbol>M_☉·Gyr-1·kpc-3</om:alternativeSymbol> + <om:LaTeXSymbol>M_{\astrosun}Gyr^{-1}kpc^{-1}</om:LaTeXSymbol> + <om:hasNumerator rdf:resource="&om;solarMass"/> + <om:hasDenominator rdf:resource="&om;gigayearCubicKiloparsec"/> + </om:UnitDivision> + + <!-- Cosmology Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Unit of Measure Ontologies --> + + <om:ApplicationArea rdf:about="&om;cosmology"> + <rdfs:label xml:lang="en">cosmology</rdfs:label> + <rdfs:label xml:lang="nl">kosmologie</rdfs:label> + <!-- <om:uses_application_area rdf:resource="&om;space_and_time"/> --> + <om:usesQuantity rdf:resource="&om;CosmologicalConstant"/> + <om:usesQuantity rdf:resource="&om;CriticalDensity"/> + <om:usesQuantity rdf:resource="&om;CurvatureConstant"/> + <om:usesQuantity rdf:resource="&om;DecelerationParameter"/> + <om:usesQuantity rdf:resource="&om;DensityParameter"/> + <om:usesQuantity rdf:resource="&om;DensityParameterForMatter"/> + <om:usesQuantity rdf:resource="&om;DensityParameterForBaryonicMatter"/> + <om:usesQuantity rdf:resource="&om;DensityParameterForRadiation"/> + <om:usesQuantity rdf:resource="&om;DensityParameterForVacuum"/> + <om:usesQuantity rdf:resource="&om;HubbleConstant"/> + <om:usesQuantity rdf:resource="&om;HubbleConstantAtPresentEpoch"/> + <om:usesQuantity rdf:resource="&om;ScaleFactor"/> + <om:usesQuantity rdf:resource="&om;TotalDensityParameter"/> + <om:usesUnit rdf:resource="&om;gigaelectronvolt"/> + <om:usesUnit rdf:resource="&om;gigaparsec"/> + <om:usesUnit rdf:resource="&om;kiloelectronvolt"/> + <om:usesUnit rdf:resource="&om;megaelectronvolt"/> + <om:usesUnit rdf:resource="&om;megaparsec"/> + </om:ApplicationArea> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Density Subclass Upper Ontology --> + <!-- Curvature Constant Upper Ontology --> + <!-- Deceleration Parameter Upper Ontology --> + <!-- Density Parameter Upper Ontology --> + <!-- Density Parameter Subclass Upper Ontology --> + <!-- Hubble Constant Upper Ontology --> + <!-- Hubble Constant Subclass Upper Ontology --> + <!-- Cosmological Constant Upper Ontology --> + <!-- Scale Factor Upper Ontology --> + + <!-- Density Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;CriticalDensity"> + <rdfs:label xml:lang="en">critical density</rdfs:label> + <rdfs:label xml:lang="nl">kritieke dichtheid</rdfs:label> + <rdfs:comment xml:lang="en">The density needed for a closed universe.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Density"/> + <om:symbol>ρ_c</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;CriticalDensity"> + <om:commonlyHasUnit rdf:resource="&om;kilogramPerCubicmetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;CriticalDensity"> + <om:commonlyHasUnit rdf:resource="&om;gramPerCubicmetre"/> + <om:commonlyHasUnit rdf:resource="&om;milligramPerCubicmetre"/> + <om:commonlyHasUnit rdf:resource="&om;gramPerCubicCentimetre"/> + <om:commonlyHasUnit rdf:resource="&om;microgramPerCubicCentimetre"/> + <om:commonlyHasUnit rdf:resource="&om;kilogramPerCubicDecimetre"/> + </owl:Class> + + <!-- Curvature Constant Upper Ontology --> + + <owl:Class rdf:about="&om;CurvatureConstant"> + <rdfs:label xml:lang="en">curvature constant</rdfs:label> + <rdfs:comment xml:lang="en">The curvature constant k=-1, 0, or 1.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>k</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;CurvatureConstant"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;CurvatureConstantUnit"> + <rdfs:label xml:lang="en">curvature constant unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;CurvatureConstant"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;CurvatureConstantUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;CurvatureConstant"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Deceleration Parameter Upper Ontology --> + + <owl:Class rdf:about="&om;DecelerationParameter"> + <rdfs:label xml:lang="en">deceleration parameter</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>q</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;DecelerationParameter"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;DecelerationParameterUnit"> + <rdfs:label xml:lang="en">deceleration parameter unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;DecelerationParameter"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;DecelerationParameterUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Density Parameter Upper Ontology --> + + <owl:Class rdf:about="&om;DensityParameter"> + <rdfs:label xml:lang="en">density parameter</rdfs:label> + <rdfs:comment xml:lang="en">Ratio of the average density and the critical density.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Ω</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;DensityParameter"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;DensityParameterUnit"> + <rdfs:label xml:lang="en">density parameter unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;one"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;DensityParameter"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;DensityParameterUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;DensityParameter"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;dimensionOne"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Density Parameter Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;DensityParameterForMatter"> + <rdfs:label xml:lang="en">density parameter for matter</rdfs:label> + <rdfs:comment xml:lang="en">The density parameter for matter (either baryonic or dark).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;DensityParameter"/> + <om:symbol>Ω_M</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;DensityParameterForBaryonicMatter"> + <rdfs:label xml:lang="en">density parameter for baryonic matter</rdfs:label> + <rdfs:comment xml:lang="en">The density parameter for baryonic (oridnary) matter.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;DensityParameter"/> + <om:symbol>Ω_B</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;DensityParameterForRadiation"> + <rdfs:label xml:lang="en">density parameter for radiation</rdfs:label> + <rdfs:comment xml:lang="en">The density parameter for radiation.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;DensityParameter"/> + <om:symbol>Ω_R</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;DensityParameterForVacuum"> + <rdfs:label xml:lang="en">density parameter for vacuum</rdfs:label> + <rdfs:comment xml:lang="en">The density parameter for vacuum.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;DensityParameter"/> + <om:symbol>Ω_Λ</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;TotalDensityParameter"> + <rdfs:label xml:lang="en">total density parameter</rdfs:label> + <rdfs:comment xml:lang="en">The total density parameter.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;DensityParameter"/> + <om:symbol>Ω_T</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;DensityParameterForMatter"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;DensityParameterForBaryonicMatter"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;DensityParameterForRadiation"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;DensityParameterForVacuum"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <!-- Hubble Constant Upper Ontology --> + + <owl:Class rdf:about="&om;HubbleConstant"> + <rdfs:label xml:lang="en">Hubble constant</rdfs:label> + <rdfs:label xml:lang="nl">constante van Hubble</rdfs:label> + <rdfs:comment xml:lang="en">The Hubble constant (NOT a constant over time).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <owl:Class rdf:about="&om;HubbleConstant"> + <om:commonlyHasUnit rdf:resource="&om;metrePerSecond-TimePerMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;HubbleConstantUnit"> + <rdfs:label xml:lang="en">Hubble constant unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;kilometrePerSecond-TimePerMegaparsec"/> + <om:UnitDivision rdf:about="&om;metrePerSecond-TimePerMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;HubbleConstant"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;HubbleConstantUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Hubble Constant Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;HubbleConstantAtPresentEpoch"> + <rdfs:label xml:lang="en">Hubble constant at present epoch</rdfs:label> + <rdfs:label xml:lang="nl">constante van Hubble tijdens het huidige epoch</rdfs:label> + <rdfs:comment xml:lang="en">The Hubble constant at the present epoch (a constant).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;HubbleConstant"/> + <om:symbol>H_0</om:symbol> + </owl:Class> + + <owl:Class rdf:about="&om;HubbleConstantAtPresentEpoch"> + <om:commonlyHasUnit rdf:resource="&om;metrePerSecond-TimePerMetre"/> + </owl:Class> + + <!-- Cosmological Constant Upper Ontology --> + + <owl:Class rdf:about="&om;CosmologicalConstant"> + <rdfs:label xml:lang="en">cosmological constant</rdfs:label> + <rdfs:label xml:lang="nl">kosmologische constante</rdfs:label> + <rdfs:comment xml:lang="en">The cosmological constant.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Λ</om:symbol> + </owl:Class> + + <!-- Scale Factor Upper Ontology --> + + <owl:Class rdf:about="&om;ScaleFactor"> + <rdfs:label xml:lang="en">scale factor</rdfs:label> + <rdfs:label xml:lang="nl">schaalfactor</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Unit of Measure Ontologies --> + + <!-- Contents --> + + <!-- Kilometre Per Second Per Megaparsec Ontology --> + + <!-- Kilometre Per Second Per Megaparsec Ontology --> + + <om:UnitDivision rdf:about="&om;kilometrePerSecond-TimePerMegaparsec"> + <rdfs:label xml:lang="en">kilometre per second per megaparsec</rdfs:label> + <rdfs:label xml:lang="nl">kilometer per seconde per megaparsec</rdfs:label> + <rdfs:comment xml:lang="en">De eenheid van de Hubble constante (die niet constant is!) (http://en.wikipedia.org/wiki/Hubble_constant).</rdfs:comment> + <om:symbol>km s-1 Mpc-1</om:symbol> + <om:hasNumerator rdf:resource="&om;kilometrePerSecond-Time"/> + <om:hasDenominator rdf:resource="&om;megaparsec"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;HubbleConstant"> + <om:commonlyHasUnit rdf:resource="&om;kilometrePerSecond-TimePerMegaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;HubbleConstantAtPresentEpoch"> + <om:commonlyHasUnit rdf:resource="&om;kilometrePerSecond-TimePerMegaparsec"/> + </owl:Class> + + <!-- Earth Science Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Unit of Measure Ontologies --> + + <!-- <om:ApplicationArea rdf:about="&om;earthScience"> --> + <!-- <rdfs:label xml:lang="en">earth science</rdfs:label> --> + <!-- <rdfs:label xml:lang="nl">aardwetenschappen</rdfs:label> --> + <!-- <om:uses_application_area rdf:resource="&om;space_and_time"/> --> + <!-- <om:usesQuantity rdf:resource="&om;Permeability-EarthScience"/> --> + <!-- <om:usesUnit rdf:resource="&om;squareMetre"/> --> + <!-- <om:usesUnit rdf:resource="&om;squareAttometre"/> --> + <!-- <om:usesUnit rdf:resource="&om;squareCentimetre"/> --> + <!-- <om:usesUnit rdf:resource="&om;squareDecametre"/> --> + <!-- <om:usesUnit rdf:resource="&om;squareDecimetre"/> --> + <!-- <om:usesUnit rdf:resource="&om;squareExametre"/> --> + <!-- <om:usesUnit rdf:resource="&om;squareFemtometre"/> --> + <!-- <om:usesUnit rdf:resource="&om;squareGigametre"/> --> + <!-- <om:usesUnit rdf:resource="&om;squareHectometre"/> --> + <!-- <om:usesUnit rdf:resource="&om;squareKilometre"/> --> + <!-- <om:usesUnit rdf:resource="&om;squareMegametre"/> --> + <!-- <om:usesUnit rdf:resource="&om;squareMicrometre"/> --> + <!-- <om:usesUnit rdf:resource="&om;squareMillimetre"/> --> + <!-- <om:usesUnit rdf:resource="&om;squareNanometre"/> --> + <!-- <om:usesUnit rdf:resource="&om;squarePetametre"/> --> + <!-- <om:usesUnit rdf:resource="&om;squarePicometre"/> --> + <!-- <om:usesUnit rdf:resource="&om;squareTerametre"/> --> + <!-- <om:usesUnit rdf:resource="&om;darcy"/> --> + <!-- </om:ApplicationArea> --> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Permeability (Earth Science) Upper Ontology --> + + <!-- Permeability (Earth Science) Upper Ontology --> + + <owl:Class rdf:about="&om;Permeability-EarthScience"> + <rdfs:label xml:lang="en">permeability (earth science)</rdfs:label> + <rdfs:label xml:lang="nl">permeabiliteit (aardwetenschappen)</rdfs:label> + <om:alternativeLabel xml:lang="en">intrinsic permeability</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">intrinsieke permeabiliteit</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>κ</om:symbol> + <om:alternativeSymbol>k</om:alternativeSymbol> + </owl:Class> + + <owl:Class rdf:about="&om;Permeability-EarthScience"> + <om:commonlyHasUnit rdf:resource="&om;squareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Permeability-EarthScience"> + <om:commonlyHasUnit rdf:resource="&om;squareAttometre"/> + <om:commonlyHasUnit rdf:resource="&om;squareCentimetre"/> + <om:commonlyHasUnit rdf:resource="&om;squareDecametre"/> + <om:commonlyHasUnit rdf:resource="&om;squareDecimetre"/> + <om:commonlyHasUnit rdf:resource="&om;squareExametre"/> + <om:commonlyHasUnit rdf:resource="&om;squareFemtometre"/> + <om:commonlyHasUnit rdf:resource="&om;squareGigametre"/> + <om:commonlyHasUnit rdf:resource="&om;squareHectometre"/> + <om:commonlyHasUnit rdf:resource="&om;squareKilometre"/> + <om:commonlyHasUnit rdf:resource="&om;squareMegametre"/> + <om:commonlyHasUnit rdf:resource="&om;squareMicrometre"/> + <om:commonlyHasUnit rdf:resource="&om;squareMillimetre"/> + <om:commonlyHasUnit rdf:resource="&om;squareNanometre"/> + <om:commonlyHasUnit rdf:resource="&om;squarePetametre"/> + <om:commonlyHasUnit rdf:resource="&om;squarePicometre"/> + <om:commonlyHasUnit rdf:resource="&om;squareTerametre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Permeability-EarthScience"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;area-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Unit of Measure Ontologies --> + + <!-- Contents --> + + <!-- Darcy Ontology --> + + <!-- Darcy Ontology --> + + <om:Unit rdf:about="&om;darcy"> + <rdfs:label xml:lang="en">darcy</rdfs:label> + <rdfs:label xml:lang="nl">darcy</rdfs:label> + <rdfs:comment xml:lang="en">The darcy is a unit of area defined as 9.869233e-13 square metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0000000000009869233</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;squareMetre"/> + <om:hasDimension rdf:resource="&om;area-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_9.869233e-13SquareMetre"> + <om:hasNumericalValue>9.869233e-13</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;squareMetre"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Permeability-EarthScience"> + <om:commonlyHasUnit rdf:resource="&om;darcy"/> + </owl:Class> + + <owl:Class rdf:about="&om;Permeability-EarthScienceUnit"> + <rdfs:label xml:lang="en">permeability (earth science) unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;darcy"/> + <om:UnitExponentiation rdf:about="&om;squareMetre"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;SquarePrefixedMetre"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Permeability-EarthScience"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;Permeability-EarthScienceUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Materials Science Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Unit of Measure Ontologies --> + <!-- Dimension Ontologies --> + + <!-- <om:ApplicationArea rdf:about="&om;materialsScience"> --> + <!-- <rdfs:label xml:lang="en">materials science</rdfs:label> --> + <!-- <rdfs:label xml:lang="nl">materiaalkunde</rdfs:label> --> + <!-- <om:uses_application_area rdf:resource="&om;space_and_time"/> --> + <!-- <om:usesQuantity rdf:resource="&om;Permeance-MaterialsScience"/> --> + <!-- <om:usesUnit rdf:resource="&om;kilogramPerPascalSecond-TimeSquareMetre"/> --> + <!-- <om:usesUnit rdf:resource="&om;perm-0C"/> --> + <!-- <om:usesUnit rdf:resource="&om;perm-23C"/> --> + <!-- </om:ApplicationArea> --> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Permeance (Materials Science) Upper Ontology --> + + <!-- Permeance (Materials Science) Upper Ontology --> + + <owl:Class rdf:about="&om;Permeance-MaterialsScience"> + <rdfs:label xml:lang="en">permeance (materials science)</rdfs:label> + <rdfs:comment xml:lang="en">Permeance is the degree to which a material transmits another substance.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:symbol>Λ</om:symbol> + </owl:Class> + + <!-- Unit of Measure Ontologies --> + + <!-- Contents --> + + <!-- Kilogram Per Pascal Second Square Metre Ontology --> + <!-- Permeance (Materials Science) Unit Ontology --> + + <!-- Kilogram Per Pascal Second Square Metre Ontology --> + + <om:UnitDivision rdf:about="&om;kilogramPerPascalSecond-TimeSquareMetre"> + <rdfs:label xml:lang="en">kilogram per pascal second square metre</rdfs:label> + <rdfs:label xml:lang="nl">kilogram per pascal seconde vierkante meter</rdfs:label> + <om:symbol>kg Pa-1 s-1 m-2</om:symbol> + <om:alternativeSymbol>kg·Pa-1·s-1·m-2</om:alternativeSymbol> + <om:alternativeSymbol>kg/(Pa s m2)</om:alternativeSymbol> + <om:alternativeSymbol>kg/(Pa·s·m2)</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;kilogram"/> + <om:hasDenominator rdf:resource="&om;pascalSecond-TimeSquareMetre"/> + <om:hasDimension rdf:resource="&om;permeance-MaterialsScience-Dimension"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;Permeance-MaterialsScience"> + <om:commonlyHasUnit rdf:resource="&om;kilogramPerPascalSecond-TimeSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Permeance-MaterialsScienceUnit"> + <rdfs:label xml:lang="en">permeance (materials science) unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;perm-0C"/> + <om:Unit rdf:about="&om;perm-23C"/> + <om:UnitDivision rdf:about="&om;kilogramPerPascalSecond-TimeSquareMetre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;Permeance-MaterialsScience"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;Permeance-MaterialsScienceUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Permeance (Materials Science) Unit Ontology --> + + <om:Unit rdf:about="&om;perm-0C"> + <rdfs:label xml:lang="en">perm (0 °C)</rdfs:label> + <rdfs:label xml:lang="nl">perm (0 °C)</rdfs:label> + <om:alternativeLabel xml:lang="en">0 °C perm</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">0 °C perm</om:alternativeLabel> + <rdfs:comment xml:lang="en">The 0 °C perm is a unit ofpermeance defined as 5.72135e-11 kilogram per pascal second (time) square metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0000000000572135</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogramPerPascalSecond-TimeSquareMetre"/> + <om:hasDimension rdf:resource="&om;permeance-MaterialsScience-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;perm-23C"> + <rdfs:label xml:lang="en">perm (23 °C)</rdfs:label> + <rdfs:label xml:lang="nl">perm (23 °C)</rdfs:label> + <om:alternativeLabel xml:lang="en">23 °C perm</om:alternativeLabel> + <om:alternativeLabel xml:lang="nl">23 °C perm</om:alternativeLabel> + <rdfs:comment xml:lang="en">The 23 °C perm is a unit of permeance defined as 5.74525e-11 kilogram per pascal second (time) square metre.</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0000000000574525</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;kilogramPerPascalSecond-TimeSquareMetre"/> + <om:hasDimension rdf:resource="&om;permeance-MaterialsScience-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_5.72135e-11KilogramPerPascalSecond-TimeSquareMetre"> + <om:hasNumericalValue>5.72135e-11</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogramPerPascalSecond-TimeSquareMetre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_5.74525e-11KilogramPerPascalSecond-TimeSquareMetre"> + <om:hasNumericalValue>5.74525e-11</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;kilogramPerPascalSecond-TimeSquareMetre"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Permeance-MaterialsScience"> + <om:commonlyHasUnit rdf:resource="&om;perm-0C"/> + <om:commonlyHasUnit rdf:resource="&om;perm-23C"/> + </owl:Class> + + <!-- Dimension Ontologies --> + + <!-- Contents --> + + <!-- Permeance (Materials Science) Dimension Ontology --> + + <!-- Permeance (Materials Science) Dimension Ontology --> + + <om:Dimension rdf:about="&om;permeance-MaterialsScience-Dimension"> + <rdfs:label xml:lang="en">permeance (materials science) dimension</rdfs:label> + <om:hasSILengthDimensionExponent rdf:datatype="&xsd;integer">-1</om:hasSILengthDimensionExponent> + <om:hasSIMassDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIMassDimensionExponent> + <om:hasSITimeDimensionExponent rdf:datatype="&xsd;integer">1</om:hasSITimeDimensionExponent> + <om:hasSIElectricCurrentDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIElectricCurrentDimensionExponent> + <om:hasSIThermodynamicTemperatureDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIThermodynamicTemperatureDimensionExponent> + <om:hasSIAmountOfSubstanceDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSIAmountOfSubstanceDimensionExponent> + <om:hasSILuminousIntensityDimensionExponent rdf:datatype="&xsd;integer">0</om:hasSILuminousIntensityDimensionExponent> + </om:Dimension> + + <owl:Class rdf:about="&om;Permeance-MaterialsScience"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasDimension"/> + <owl:hasValue rdf:resource="&om;permeance-MaterialsScience-Dimension"/> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Microbiology Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Unit of Measure Ontologies --> + + <!-- <om:ApplicationArea rdf:about="&om;microbiology"> --> + <!-- <rdfs:label xml:lang="en">microbiology</rdfs:label> --> + <!-- <rdfs:label xml:lang="nl">microbiologie</rdfs:label> --> + <!-- <om:uses_application_area rdf:resource="&om;space_and_time"/> --> + <!-- <om:usesQuantity rdf:resource="&om;ViableCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;VolumetricViableCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;VolumetricColiformBacterieCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;VolumetricCorynebacteriumCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;VolumetricCorynebacteriumBovisCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;VolumetricEnterobacteriaceaeCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;VolumetricEnterococcusCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;VolumetricEscherichiaColiCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;VolumetricKlebsiellaCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;VolumetricListeriaMonocytogenesCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;VolumetricSalmonellaCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;VolumetricSerratiaMarcescensCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;VolumetricStaphylococcusAureusCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;VolumetricStreptococcusAgalactiaeCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;VolumetricStreptococcusDysgalactiaeCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;VolumetricStreptococcusUberisCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;VolumetricYeastAndFungiCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SpecificViableCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SpecificColiformBacterieCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SpecificCorynebacteriumCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SpecificCorynebacteriumBovisCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SpecificEnterobacteriaceaeCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SpecificEnterococcusCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SpecificEscherichiaColiCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SpecificKlebsiellaCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SpecificListeriaMonocytogenesCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SpecificSalmonellaCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SpecificSerratiaMarcescensCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SpecificStaphylococcusAureusCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SpecificStreptococcusAgalactiaeCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SpecificStreptococcusDysgalactiaeCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SpecificStreptococcusUberisCount"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SpecificYeastAndFungiCount"/> --> + <!-- <om:usesUnit rdf:resource="&om;colonyFormingUnit"/> --> + <!-- <om:usesUnit rdf:resource="&om;colonyFormingUnitPerGram"/> --> + <!-- <om:usesUnit rdf:resource="&om;colonyFormingUnitPerMillilitre"/> --> + <!-- <om:usesUnit rdf:resource="&om;colonyFormingUnitPer25Millilitre"/> --> + <!-- <om:usesUnit rdf:resource="&om;_1000ColonyFormingUnitPerMillilitre"/> --> + <!-- <om:usesUnit rdf:resource="&om;colonyFormingUnitPerGram"/> --> + <!-- </om:ApplicationArea> --> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Viable Count Upper Ontology --> + <!-- Volumetric Viable Count Upper Ontology --> + <!-- Volumetric Viable Count Subclass Upper Ontology --> + <!-- Specific Viable Count Upper Ontology --> + <!-- Specific Viable Count Subclass Upper Ontology --> + + <!-- Viable Count Upper Ontology --> + + <owl:Class rdf:about="&om;ViableCount"> + <rdfs:label xml:lang="en">viable count</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Volumetric Viable Count Upper Ontology --> + + <owl:Class rdf:about="&om;VolumetricViableCount"> + <rdfs:label xml:lang="en">viable count (volumetric)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Volumetric Viable Count Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;VolumetricColiformBacterieCount"> + <rdfs:label xml:lang="en">coliform bacteria count (volumetric)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;VolumetricViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricCorynebacteriumCount"> + <rdfs:label xml:lang="en">Corynebacterium count (volumetric)</rdfs:label> + <om:alternativeLabel xml:lang="en">Arcanobacterium count (volumetric)</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;VolumetricViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricCorynebacteriumBovisCount"> + <rdfs:label xml:lang="en">Corynebacterium bovis count (volumetric)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;VolumetricViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricEnterobacteriaceaeCount"> + <rdfs:label xml:lang="en">Enterobacteriaceae count (volumetric)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;VolumetricViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricEnterococcusCount"> + <rdfs:label xml:lang="en">Enterococcus count (volumetric)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;VolumetricViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricEscherichiaColiCount"> + <rdfs:label xml:lang="en">Escherichia coli count (volumetric)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;VolumetricViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricKlebsiellaCount"> + <rdfs:label xml:lang="en">Klebsiella count (volumetric)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;VolumetricViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricListeriaMonocytogenesCount"> + <rdfs:label xml:lang="en">Listeria monocytogenes count (volumetric)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;VolumetricViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricSalmonellaCount"> + <rdfs:label xml:lang="en">Salmonella count (volumetric)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;VolumetricViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricSerratiaMarcescensCount"> + <rdfs:label xml:lang="en">Serratia marcescens count (volumetric)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;VolumetricViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricStaphylococcusAureusCount"> + <rdfs:label xml:lang="en">Staphylococcus aureus count (volumetric)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;VolumetricViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricStreptococcusAgalactiaeCount"> + <rdfs:label xml:lang="en">Streptococcus agalactiae count (volumetric)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;VolumetricViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricStreptococcusDysgalactiaeCount"> + <rdfs:label xml:lang="en">Streptococcus dysgalactiae count (volumetric)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;VolumetricViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricStreptococcusUberisCount"> + <rdfs:label xml:lang="en">Streptococcus uberis count (volumetric)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;VolumetricViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricYeastAndFungiCount"> + <rdfs:label xml:lang="en">yeast and fungi count (volumetric)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;VolumetricViableCount"/> + </owl:Class> + + <!-- Specific Viable Count Upper Ontology --> + + <owl:Class rdf:about="&om;SpecificViableCount"> + <rdfs:label xml:lang="en">viable count (specific)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Specific Viable Count Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;SpecificColiformBacterieCount"> + <rdfs:label xml:lang="en">coliform bacteria count (specific)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SpecificViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificCorynebacteriumCount"> + <rdfs:label xml:lang="en">Corynebacterium count (specific)</rdfs:label> + <om:alternativeLabel xml:lang="en">Arcanobacterium count (specific)</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;SpecificViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificCorynebacteriumBovisCount"> + <rdfs:label xml:lang="en">Corynebacterium bovis count (specific)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SpecificViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificEnterobacteriaceaeCount"> + <rdfs:label xml:lang="en">Enterobacteriaceae count (specific)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SpecificViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificEnterococcusCount"> + <rdfs:label xml:lang="en">Enterococcus count (specific)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SpecificViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificEscherichiaColiCount"> + <rdfs:label xml:lang="en">Escherichia coli count (specific)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SpecificViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificKlebsiellaCount"> + <rdfs:label xml:lang="en">Klebsiella count (specific)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SpecificViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificListeriaMonocytogenesCount"> + <rdfs:label xml:lang="en">Listeria monocytogenes count (specific)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SpecificViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificSalmonellaCount"> + <rdfs:label xml:lang="en">Salmonella count (specific)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SpecificViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificSerratiaMarcescensCount"> + <rdfs:label xml:lang="en">Serratia marcescens count (specific)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SpecificViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificStaphylococcusAureusCount"> + <rdfs:label xml:lang="en">Staphylococcus aureus count (specific)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SpecificViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificStreptococcusAgalactiaeCount"> + <rdfs:label xml:lang="en">Streptococcus agalactiae count (specific)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SpecificViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificStreptococcusDysgalactiaeCount"> + <rdfs:label xml:lang="en">Streptococcus dysgalactiae count (specific)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SpecificViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificStreptococcusUberisCount"> + <rdfs:label xml:lang="en">Streptococcus uberis count (specific)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SpecificViableCount"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificYeastAndFungiCount"> + <rdfs:label xml:lang="en">yeast and fungi count (specific)</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SpecificViableCount"/> + </owl:Class> + + <!-- Unit of Measure Ontologies --> + + <!-- Contents --> + + <!-- Colony Forming Unit Ontology --> + + <!-- Colony Forming Unit Ontology --> + + <om:Unit rdf:about="&om;colonyFormingUnit"> + <rdfs:label xml:lang="en">colony forming unit</rdfs:label> + <om:symbol>CFU</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <!-- <om:PrefixedUnit rdf:about="&om;kilocolonyFormingUnit"> --> + <!-- <rdfs:label xml:lang="en">kilocolony forming unit</rdfs:label> --> + <!-- <om:alternativeLabel xml:lang="en">1000 colony forming unit</om:alternativeLabel> --> + <!-- <om:unofficialAbbreviation>1000 CFU</om:unofficialAbbreviation> --> + <!-- <om:symbol>kCFU</om:symbol> --> + <!-- </om:PrefixedUnit> --> + + <om:UnitMultiple rdf:about="&om;_1000ColonyFormingUnit"> + <rdfs:label xml:lang="en">1000 colony forming unit</rdfs:label> + <om:symbol>1000 CFU</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">1000</om:hasFactor> + <om:hasUnit rdf:resource="&om;colonyFormingUnit"/> + </om:UnitMultiple> + + <!-- <om:Measure rdf:about="&om;_1000ColonyFormingUnit"> --> + <!-- <om:hasNumericalValue>1000</om:hasNumericalValue> --> + <!-- <om:hasUnit rdf:resource="&om;colonyFormingUnit"/> --> + <!-- </om:Measure> --> + + <om:UnitDivision rdf:about="&om;colonyFormingUnitPerGram"> + <rdfs:label xml:lang="en">colony forming unit per gram</rdfs:label> + <om:symbol>CFU/g</om:symbol> + <om:hasNumerator rdf:resource="&om;colonyFormingUnit"/> + <om:hasDenominator rdf:resource="&om;gram"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;colonyFormingUnitPerMillilitre"> + <rdfs:label xml:lang="en">colony forming unit per millilitre</rdfs:label> + <om:symbol>CFU/ml</om:symbol> + <om:hasNumerator rdf:resource="&om;colonyFormingUnit"/> + <om:hasDenominator rdf:resource="&om;millilitre"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;colonyFormingUnitPer25Millilitre"> + <rdfs:label xml:lang="en">colony forming unit per 25 millilitre</rdfs:label> + <om:symbol>CFU/ml</om:symbol> + <om:hasNumerator rdf:resource="&om;colonyFormingUnit"/> + <om:hasDenominator rdf:resource="&om;_25Millilitre"/> + </om:UnitDivision> + + <!-- <om:UnitDivision rdf:about="&om;kilocolonyFormingUnitPerMillilitre"> --> + <!-- <rdfs:label xml:lang="en">kilocolony forming unit per millilitre</rdfs:label> --> + <!-- <om:alternativeLabel xml:lang="en">1000 colony forming unit per millilitre</om:alternativeLabel> --> + <!-- <om:unofficialAbbreviation>1000 CFU/ml</om:unofficialAbbreviation> --> + <!-- <om:symbol>kCFU/ml</om:symbol> --> + <!-- <om:hasNumerator rdf:resource="&om;kilocolonyFormingUnit"/> --> + <!-- <om:hasDenominator rdf:resource="&om;millilitre"/> --> + <!-- </om:UnitDivision> --> + + <om:UnitDivision rdf:about="&om;_1000ColonyFormingUnitPerMillilitre"> + <rdfs:label xml:lang="en">1000 colony forming unit per millilitre</rdfs:label> + <om:unofficialAbbreviation>1000 CFU/ml</om:unofficialAbbreviation> + <om:symbol>1000 CFU/ml</om:symbol> + <om:hasNumerator rdf:resource="&om;_1000ColonyFormingUnit"/> + <om:hasDenominator rdf:resource="&om;millilitre"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;ViableCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnit"/> + <!-- <om:commonlyHasUnit rdf:resource="&om;kilocolonyFormingUnit"/> --> + <om:commonlyHasUnit rdf:resource="&om;_1000ColonyFormingUnit"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricViableCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPer25Millilitre"/> + <!-- <om:commonlyHasUnit rdf:resource="&om;kilocolonyFormingUnitPerMillilitre"/> --> + <om:commonlyHasUnit rdf:resource="&om;_1000ColonyFormingUnitPerMillilitre"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricColiformBacterieCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPer25Millilitre"/> + <!-- <om:commonlyHasUnit rdf:resource="&om;kilocolonyFormingUnitPerMillilitre"/> --> + <om:commonlyHasUnit rdf:resource="&om;_1000ColonyFormingUnitPerMillilitre"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricCorynebacteriumCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPer25Millilitre"/> + <!-- <om:commonlyHasUnit rdf:resource="&om;kilocolonyFormingUnitPerMillilitre"/> --> + <om:commonlyHasUnit rdf:resource="&om;_1000ColonyFormingUnitPerMillilitre"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricCorynebacteriumBovisCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPer25Millilitre"/> + <!-- <om:commonlyHasUnit rdf:resource="&om;kilocolonyFormingUnitPerMillilitre"/> --> + <om:commonlyHasUnit rdf:resource="&om;_1000ColonyFormingUnitPerMillilitre"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricEnterobacteriaceaeCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPer25Millilitre"/> + <!-- <om:commonlyHasUnit rdf:resource="&om;kilocolonyFormingUnitPerMillilitre"/> --> + <om:commonlyHasUnit rdf:resource="&om;_1000ColonyFormingUnitPerMillilitre"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricEnterococcusCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPer25Millilitre"/> + <!-- <om:commonlyHasUnit rdf:resource="&om;kilocolonyFormingUnitPerMillilitre"/> --> + <om:commonlyHasUnit rdf:resource="&om;_1000ColonyFormingUnitPerMillilitre"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricEscherichiaColiCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPer25Millilitre"/> + <!-- <om:commonlyHasUnit rdf:resource="&om;kilocolonyFormingUnitPerMillilitre"/> --> + <om:commonlyHasUnit rdf:resource="&om;_1000ColonyFormingUnitPerMillilitre"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricKlebsiellaCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPer25Millilitre"/> + <!-- <om:commonlyHasUnit rdf:resource="&om;kilocolonyFormingUnitPerMillilitre"/> --> + <om:commonlyHasUnit rdf:resource="&om;_1000ColonyFormingUnitPerMillilitre"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricListeriaMonocytogenesCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPer25Millilitre"/> + <!-- <om:commonlyHasUnit rdf:resource="&om;kilocolonyFormingUnitPerMillilitre"/> --> + <om:commonlyHasUnit rdf:resource="&om;_1000ColonyFormingUnitPerMillilitre"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricSalmonellaCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPer25Millilitre"/> + <!-- <om:commonlyHasUnit rdf:resource="&om;kilocolonyFormingUnitPerMillilitre"/> --> + <om:commonlyHasUnit rdf:resource="&om;_1000ColonyFormingUnitPerMillilitre"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricSerratiaMarcescensCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPer25Millilitre"/> + <!-- <om:commonlyHasUnit rdf:resource="&om;kilocolonyFormingUnitPerMillilitre"/> --> + <om:commonlyHasUnit rdf:resource="&om;_1000ColonyFormingUnitPerMillilitre"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricStaphylococcusAureusCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPer25Millilitre"/> + <!-- <om:commonlyHasUnit rdf:resource="&om;kilocolonyFormingUnitPerMillilitre"/> --> + <om:commonlyHasUnit rdf:resource="&om;_1000ColonyFormingUnitPerMillilitre"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricStreptococcusAgalactiaeCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPer25Millilitre"/> + <!-- <om:commonlyHasUnit rdf:resource="&om;kilocolonyFormingUnitPerMillilitre"/> --> + <om:commonlyHasUnit rdf:resource="&om;_1000ColonyFormingUnitPerMillilitre"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricStreptococcusDysgalactiaeCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPer25Millilitre"/> + <!-- <om:commonlyHasUnit rdf:resource="&om;kilocolonyFormingUnitPerMillilitre"/> --> + <om:commonlyHasUnit rdf:resource="&om;_1000ColonyFormingUnitPerMillilitre"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricStreptococcusUberisCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPer25Millilitre"/> + <!-- <om:commonlyHasUnit rdf:resource="&om;kilocolonyFormingUnitPerMillilitre"/> --> + <om:commonlyHasUnit rdf:resource="&om;_1000ColonyFormingUnitPerMillilitre"/> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricYeastAndFungiCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerMillilitre"/> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPer25Millilitre"/> + <!-- <om:commonlyHasUnit rdf:resource="&om;kilocolonyFormingUnitPerMillilitre"/> --> + <om:commonlyHasUnit rdf:resource="&om;_1000ColonyFormingUnitPerMillilitre"/> + </owl:Class> + + <owl:Class rdf:about="&om;ViableCountUnit"> + <rdfs:label xml:lang="en">viable count unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;colonyFormingUnit"/> + <!-- <om:UnitDivision rdf:about="&om;kilocolonyFormingUnit"/> --> + <om:UnitDivision rdf:about="&om;_1000ColonyFormingUnit"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;ViableCount"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;ViableCountUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricViableCountUnit"> + <rdfs:label xml:lang="en">volumetric viable count unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;colonyFormingUnitPerMillilitre"/> + <om:UnitDivision rdf:about="&om;colonyFormingUnitPer25Millilitre"/> + <!-- <om:UnitDivision rdf:about="&om;kilocolonyFormingUnitPerMillilitre"/> --> + <om:UnitDivision rdf:about="&om;_1000ColonyFormingUnitPerMillilitre"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;VolumetricViableCount"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;VolumetricViableCountUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificViableCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificColiformBacterieCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificCorynebacteriumCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificCorynebacteriumBovisCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificEnterobacteriaceaeCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificEnterococcusCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificEscherichiaColiCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificKlebsiellaCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificListeriaMonocytogenesCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificSalmonellaCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificSerratiaMarcescensCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificStaphylococcusAureusCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificStreptococcusAgalactiaeCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificStreptococcusDysgalactiaeCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificStreptococcusUberisCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificYeastAndFungiCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificViableCountUnit"> + <rdfs:label xml:lang="en">specific viable count unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;colonyFormingUnitPerGram"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificViableCount"> + <om:commonlyHasUnit rdf:resource="&om;colonyFormingUnitPerGram"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;SpecificViableCountUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Acoustics Ontology --> + + <!-- Contents --> + + <!-- Unit of Measure Ontologies --> + + <om:ApplicationArea rdf:about="&om;acoustics"> + <rdfs:label xml:lang="en">acoustics</rdfs:label> + <rdfs:label xml:lang="nl">akoestiek</rdfs:label> + <om:usesUnit rdf:resource="&om;bel"/> + <om:usesUnit rdf:resource="&om;decibel"/> + </om:ApplicationArea> + + <!-- Unit of Measure Ontologies --> + + <om:Unit rdf:about="&om;bel"> + <rdfs:label xml:lang="en">bel</rdfs:label> + <rdfs:label xml:lang="nl">bel</rdfs:label> + <om:symbol>B</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:PrefixedUnit rdf:about="&om;decibel"> + <rdfs:label xml:lang="en">decibel</rdfs:label> + <rdfs:label xml:lang="nl">decibel</rdfs:label> + <om:symbol>dB</om:symbol> + <om:hasPrefix rdf:resource="&om;deci"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bel"/> + </om:PrefixedUnit> + + <!-- Sustainability Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Unit of Measure Ontologies --> + + <om:ApplicationArea rdf:about="&om;sustainability"> + <rdfs:label xml:lang="en">sustainability</rdfs:label> + <rdfs:label xml:lang="nl">duurzaamheid</rdfs:label> + <om:usesQuantity rdf:resource="&om;CarbonDioxideEquivalentMass"/> + <om:usesQuantity rdf:resource="&om;CarbonDioxideEquivalentMassPerEnergy"/> + <om:usesUnit rdf:resource="&om;gramOfCarbonDioxideEquivalent"/> + <om:usesUnit rdf:resource="&om;kilogramOfCarbonDioxideEquivalent"/> + <om:usesUnit rdf:resource="&om;tonneOfCarbonDioxideEquivalent"/> + <om:usesUnit rdf:resource="&om;gramOfCarbonDioxideEquivalentPerKilowattHour"/> + <om:usesUnit rdf:resource="&om;kilogramOfCarbonDioxideEquivalentPerMegaWattHour"/> + <om:usesUnit rdf:resource="&om;tonneOfCarbonDioxideEquivalentPerGigaWattHour"/> + </om:ApplicationArea> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Carbon Dioxide Equivalent Mass Upper Ontology --> + <!-- Carbon Dioxide Equivalent Mass Per Energy Upper Ontology --> + + <!-- Carbon Dioxide Equivalent Mass Upper Ontology --> + + <owl:Class rdf:about="&om;CarbonDioxideEquivalentMass"> + <rdfs:label xml:lang="en">carbon dioxide equivalent mass</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Mass"/> + </owl:Class> + + <!-- Carbon Dioxide Equivalent Mass Upper Ontology --> + + <owl:Class rdf:about="&om;CarbonDioxideEquivalentMassPerEnergy"> + <rdfs:label xml:lang="en">carbon dioxide equivalent mass per energy</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;MassPerEnergy"/> + </owl:Class> + + <!-- Unit of Measure Ontologies --> + + <!-- Contents --> + + <!-- Gram of Carbon Dioxide Equivalent Multiples and Submultiples Ontology --> + <!-- Gram of Carbon Dioxide Equivalent Per Watt Hour Multiples and Submultiples Ontology --> + + <!-- Gram of Carbon Dioxide Equivalent Multiples and Submultiples Ontology --> + + <om:Unit rdf:about="&om;gramOfCarbonDioxideEquivalent"> + <rdfs:label xml:lang="en">gram of carbon dioxide equivalent</rdfs:label> + <om:symbol>gCO2eq</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">1</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;gram"/> + </om:Unit> + + <om:PrefixedUnit rdf:about="&om;kilogramOfCarbonDioxideEquivalent"> + <rdfs:label xml:lang="en">kilogram of carbon dioxide equivalent</rdfs:label> + <om:symbol>kgCO2eq</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;gramOfCarbonDioxideEquivalent"/> + </om:PrefixedUnit> + + <om:Unit rdf:about="&om;tonneOfCarbonDioxideEquivalent"> + <rdfs:label xml:lang="en">tonne of carbon dioxide equivalent</rdfs:label> + <om:symbol>tCO2eq</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">1</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;tonne"/> + </om:Unit> + + <owl:Class rdf:about="&om;CarbonDioxideEquivalentMass"> + <om:commonlyHasUnit rdf:resource="&om;gramOfCarbonDioxideEquivalent"/> + <om:commonlyHasUnit rdf:resource="&om;kilogramOfCarbonDioxideEquivalent"/> + <om:commonlyHasUnit rdf:resource="&om;tonneOfCarbonDioxideEquivalent"/> + </owl:Class> + + <owl:Class rdf:about="&om;CarbonDioxideEquivalentMassUnit"> + <rdfs:label xml:lang="en">carbon dioxide equivalent mass unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;MassUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;gramOfCarbonDioxideEquivalent"/> + <om:PrefixedUnit rdf:about="&om;kilogramOfCarbonDioxideEquivalent"/> + <om:Unit rdf:about="&om;tonneOfCarbonDioxideEquivalent"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;CarbonDioxideEquivalentMass"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;CarbonDioxideEquivalentMassUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Gram of Carbon Dioxide Equivalent Per Watt Hour Multiples and Submultiples Ontology --> + + <om:UnitDivision rdf:about="&om;gramOfCarbonDioxideEquivalentPerKilowattHour"> + <rdfs:label xml:lang="en">gram of carbon dioxide equivalent per kilowatt hour</rdfs:label> + <om:symbol>gCO2eq/kWh</om:symbol> + <om:hasNumerator rdf:resource="&om;gramOfCarbonDioxideEquivalent"/> + <om:hasDenominator rdf:resource="&om;kilowattHour"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;kilogramOfCarbonDioxideEquivalentPerMegawattHour"> + <rdfs:label xml:lang="en">kilogram of carbon dioxide equivalent per megawatt hour</rdfs:label> + <om:symbol>kgCO2eq/MWh</om:symbol> + <om:hasNumerator rdf:resource="&om;kilogramOfCarbonDioxideEquivalent"/> + <om:hasDenominator rdf:resource="&om;megawattHour"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;tonneOfCarbonDioxideEquivalentPerGigawattHour"> + <rdfs:label xml:lang="en">tonne of carbon dioxide equivalent per gigawatt hour</rdfs:label> + <om:symbol>tCO2eq/GWh</om:symbol> + <om:hasNumerator rdf:resource="&om;tonneOfCarbonDioxideEquivalent"/> + <om:hasDenominator rdf:resource="&om;gigawattHour"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;CarbonDioxideEquivalentMassPerEnergy"> + <om:commonlyHasUnit rdf:resource="&om;gramOfCarbonDioxideEquivalentPerKilowattHour"/> + <om:commonlyHasUnit rdf:resource="&om;kilogramOfCarbonDioxideEquivalentPerMegaWattHour"/> + <om:commonlyHasUnit rdf:resource="&om;tonneOfCarbonDioxideEquivalentPerGigawattHour"/> + </owl:Class> + + <owl:Class rdf:about="&om;CarbonDioxideEquivalentMassPerEnergyUnit"> + <rdfs:label xml:lang="en">carbon dioxide equivalent mass per energy unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;MassPerEnergyUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;gramOfCarbonDioxideEquivalentPerKilowattHour"/> + <om:PrefixedUnit rdf:about="&om;kilogramOfCarbonDioxideEquivalentPerMegawattHour"/> + <om:Unit rdf:about="&om;tonneOfCarbonDioxideEquivalentPerGigawattHour"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;CarbonDioxideEquivalentMassPerEnergy"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;CarbonDioxideEquivalentMassPerEnergyUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Economics Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Unit of Measure Ontologies --> + + <om:ApplicationArea rdf:about="&om;economics"> + <rdfs:label xml:lang="en">economics</rdfs:label> + <rdfs:label xml:lang="nl">economie</rdfs:label> + <om:usesQuantity rdf:resource="&om;AmountOfMoney"/> + <om:usesQuantity rdf:resource="&om;SpecificAmountOfMoney"/> + <om:usesQuantity rdf:resource="&om;Cost"/> + <om:usesUnit rdf:resource="&om;UnitedStatesDollar"/> + <om:usesUnit rdf:resource="&om;euro"/> + <om:usesUnit rdf:resource="&om;JapaneseYen"/> + <om:usesUnit rdf:resource="&om;poundSterling"/> + <om:usesUnit rdf:resource="&om;AustralianDollar"/> + <om:usesUnit rdf:resource="&om;SwissFranc"/> + <om:usesUnit rdf:resource="&om;CanadianDollar"/> + <om:usesUnit rdf:resource="&om;MexicanPeso"/> + <om:usesUnit rdf:resource="&om;ChineseYuan"/> + <om:usesUnit rdf:resource="&om;NewZealandDollar"/> + <om:usesUnit rdf:resource="&om;SwedishKrona"/> + <om:usesUnit rdf:resource="&om;RussianRuble"/> + <om:usesUnit rdf:resource="&om;HongKongDollar"/> + <om:usesUnit rdf:resource="&om;NorwegianKrone"/> + <om:usesUnit rdf:resource="&om;SingaporeDollar"/> + <om:usesUnit rdf:resource="&om;TurkishLira"/> + <om:usesUnit rdf:resource="&om;SouthKoreanWon"/> + <om:usesUnit rdf:resource="&om;SouthAfricanRand"/> + <om:usesUnit rdf:resource="&om;BrazilianReal"/> + <om:usesUnit rdf:resource="&om;IndianRupee"/> + <om:usesUnit rdf:resource="&om;megaeuro"/> + <om:usesUnit rdf:resource="&om;euroPerTonne"/> + <om:usesUnit rdf:resource="&om;megaeuroPerMegatonne"/> + </om:ApplicationArea> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Amount Of Money Upper Ontology --> + <!-- Specific Amount Of Money Upper Ontology --> + + <!-- Amount Of Money Upper Ontology --> + + <owl:Class rdf:about="&om;AmountOfMoney"> + <rdfs:label xml:lang="en">amount of money</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <owl:Class rdf:about="&om;Cost"> + <rdfs:label xml:lang="en">cost</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;AmountOfMoney"/> + </owl:Class> + + <!-- Specific Amount Of Money Upper Ontology --> + + <owl:Class rdf:about="&om;SpecificAmountOfMoney"> + <rdfs:label xml:lang="en">specific amount of money</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificCost"> + <rdfs:label xml:lang="en">specific cost</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;SpecificAmountOfMoney"/> + </owl:Class> + + <!-- Unit of Measure Ontologies --> + + <!-- Contents --> + + <!-- Euro Ontology --> + <!-- Amount of Money Unit Ontology --> + <!-- Euro Per Tonne Ontology --> + + <!-- Euro Ontology --> + + <om:Unit rdf:about="&om;euro"> + <rdfs:label xml:lang="en">euro</rdfs:label> + <rdfs:label xml:lang="zh">欧元</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:PrefixedUnit rdf:about="&om;megaeuro"> + <rdfs:label xml:lang="en">megaeuro</rdfs:label> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;euro"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;AmountOfMoney"> + <om:commonlyHasUnit rdf:resource="&om;euro"/> + <om:commonlyHasUnit rdf:resource="&om;megaeuro"/> + </owl:Class> + + <owl:Class rdf:about="&om;Cost"> + <om:commonlyHasUnit rdf:resource="&om;euro"/> + <om:commonlyHasUnit rdf:resource="&om;megaeuro"/> + </owl:Class> + + <!-- Amount of Money Unit Ontology --> + + <owl:Class rdf:about="&om;AmountOfMoney"> + <om:commonlyHasUnit rdf:resource="&om;UnitedStatesDollar"/> + <om:commonlyHasUnit rdf:resource="&om;JapaneseYen"/> + <om:commonlyHasUnit rdf:resource="&om;poundSterling"/> + <om:commonlyHasUnit rdf:resource="&om;AustralianDollar"/> + <om:commonlyHasUnit rdf:resource="&om;SwissFranc"/> + <om:commonlyHasUnit rdf:resource="&om;CanadianDollar"/> + <om:commonlyHasUnit rdf:resource="&om;MexicanPeso"/> + <om:commonlyHasUnit rdf:resource="&om;ChineseYuan"/> + <om:commonlyHasUnit rdf:resource="&om;NewZealandDollar"/> + <om:commonlyHasUnit rdf:resource="&om;SwedishKrona"/> + <om:commonlyHasUnit rdf:resource="&om;RussianRuble"/> + <om:commonlyHasUnit rdf:resource="&om;HongKongDollar"/> + <om:commonlyHasUnit rdf:resource="&om;NorwegianKrone"/> + <om:commonlyHasUnit rdf:resource="&om;SingaporeDollar"/> + <om:commonlyHasUnit rdf:resource="&om;TurkishLira"/> + <om:commonlyHasUnit rdf:resource="&om;SouthKoreanWon"/> + <om:commonlyHasUnit rdf:resource="&om;SouthAfricanRand"/> + <om:commonlyHasUnit rdf:resource="&om;BrazilianReal"/> + <om:commonlyHasUnit rdf:resource="&om;IndianRupee"/> + </owl:Class> + + <owl:Class rdf:about="&om;Cost"> + <om:commonlyHasUnit rdf:resource="&om;UnitedStatesDollar"/> + <om:commonlyHasUnit rdf:resource="&om;JapaneseYen"/> + <om:commonlyHasUnit rdf:resource="&om;poundSterling"/> + <om:commonlyHasUnit rdf:resource="&om;AustralianDollar"/> + <om:commonlyHasUnit rdf:resource="&om;SwissFranc"/> + <om:commonlyHasUnit rdf:resource="&om;CanadianDollar"/> + <om:commonlyHasUnit rdf:resource="&om;MexicanPeso"/> + <om:commonlyHasUnit rdf:resource="&om;ChineseYuan"/> + <om:commonlyHasUnit rdf:resource="&om;NewZealandDollar"/> + <om:commonlyHasUnit rdf:resource="&om;SwedishKrona"/> + <om:commonlyHasUnit rdf:resource="&om;RussianRuble"/> + <om:commonlyHasUnit rdf:resource="&om;HongKongDollar"/> + <om:commonlyHasUnit rdf:resource="&om;NorwegianKrone"/> + <om:commonlyHasUnit rdf:resource="&om;SingaporeDollar"/> + <om:commonlyHasUnit rdf:resource="&om;TurkishLira"/> + <om:commonlyHasUnit rdf:resource="&om;SouthKoreanWon"/> + <om:commonlyHasUnit rdf:resource="&om;SouthAfricanRand"/> + <om:commonlyHasUnit rdf:resource="&om;BrazilianReal"/> + <om:commonlyHasUnit rdf:resource="&om;IndianRupee"/> + </owl:Class> + + <om:Unit rdf:about="&om;UnitedStatesDollar"> + <rdfs:label xml:lang="en">United States dollar</rdfs:label> + <!-- <rdfs:label xml:lang="zh">美元</rdfs:label> --> + <rdfs:label xml:lang="zh">美国美元</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;JapaneseYen"> + <rdfs:label xml:lang="en">Japanese yen</rdfs:label> + <rdfs:label xml:lang="zh">日元</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;poundSterling"> + <rdfs:label xml:lang="en">pound sterling</rdfs:label> + <rdfs:label xml:lang="zh">英镑</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;AustralianDollar"> + <rdfs:label xml:lang="en">Australian dollar</rdfs:label> + <rdfs:label xml:lang="zh">澳元</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;SwissFranc"> + <rdfs:label xml:lang="en">Swiss franc</rdfs:label> + <rdfs:label xml:lang="zh">瑞士法郎</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;CanadianDollar"> + <rdfs:label xml:lang="en">Canadian dollar</rdfs:label> + <rdfs:label xml:lang="zh">加元</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;MexicanPeso"> + <rdfs:label xml:lang="en">Mexican peso</rdfs:label> + <rdfs:label xml:lang="zh">墨西哥比索</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;ChineseYuan"> + <rdfs:label xml:lang="en">Chinese yuan</rdfs:label> + <rdfs:label xml:lang="zh">中国元</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;NewZealandDollar"> + <rdfs:label xml:lang="en">New Zealand dollar</rdfs:label> + <rdfs:label xml:lang="zh">新西兰美元</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;SwedishKrona"> + <rdfs:label xml:lang="en">Swedish krona</rdfs:label> + <rdfs:label xml:lang="zh">瑞典克朗</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;RussianRuble"> + <rdfs:label xml:lang="en">RussianRuble</rdfs:label> + <rdfs:label xml:lang="zh">俄罗斯卢布</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;HongKongDollar"> + <rdfs:label xml:lang="en">Hong Kong dollar</rdfs:label> + <rdfs:label xml:lang="zh">港元</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;NorwegianKrone"> + <rdfs:label xml:lang="en">Norwegian krone</rdfs:label> + <rdfs:label xml:lang="zh">挪威克朗</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;SingaporeDollar"> + <rdfs:label xml:lang="en">Singapore dollar</rdfs:label> + <rdfs:label xml:lang="zh">新加坡元</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;TurkishLira"> + <rdfs:label xml:lang="en">Turkish lira</rdfs:label> + <rdfs:label xml:lang="zh">土耳其里拉</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;SouthKoreanWon"> + <rdfs:label xml:lang="en">South Korean won</rdfs:label> + <rdfs:label xml:lang="zh">韩元</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;SouthAfricanRand"> + <rdfs:label xml:lang="en">South African rand</rdfs:label> + <rdfs:label xml:lang="zh">南非兰特</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;BrazilianReal"> + <rdfs:label xml:lang="en">Brazilian real</rdfs:label> + <rdfs:label xml:lang="zh">巴西里拉</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:Unit rdf:about="&om;IndianRupee"> + <rdfs:label xml:lang="en">Indian rupee</rdfs:label> + <rdfs:label xml:lang="zh">印度卢比</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <owl:Class rdf:about="&om;AmountOfMoneyUnit"> + <rdfs:label xml:lang="en">amount of money unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;UnitedStatesDollar"/> + <om:Unit rdf:about="&om;euro"/> + <om:Unit rdf:about="&om;JapaneseYen"/> + <om:Unit rdf:about="&om;poundSterling"/> + <om:Unit rdf:about="&om;AustralianDollar"/> + <om:Unit rdf:about="&om;SwissFranc"/> + <om:Unit rdf:about="&om;CanadianDollar"/> + <om:Unit rdf:about="&om;MexicanPeso"/> + <om:Unit rdf:about="&om;ChineseYuan"/> + <om:Unit rdf:about="&om;NewZealandDollar"/> + <om:Unit rdf:about="&om;SwedishKrona"/> + <om:Unit rdf:about="&om;RussianRuble"/> + <om:Unit rdf:about="&om;HongKongDollar"/> + <om:Unit rdf:about="&om;NorwegianKrone"/> + <om:Unit rdf:about="&om;SingaporeDollar"/> + <om:Unit rdf:about="&om;TurkishLira"/> + <om:Unit rdf:about="&om;SouthKoreanWon"/> + <om:Unit rdf:about="&om;SouthAfricanRand"/> + <om:Unit rdf:about="&om;BrazilianReal"/> + <om:Unit rdf:about="&om;IndianRupee"/> + <om:PrefixedUnit rdf:about="&om;megaeuro"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;AmountOfMoney"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;AmountOfMoneyUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Euro Per Tonne Ontology --> + + <om:UnitDivision rdf:about="&om;euroPerTonne"> + <rdfs:label xml:lang="en">euro per tonne</rdfs:label> + <om:hasNumerator rdf:resource="&om;euro"/> + <om:hasDenominator rdf:resource="&om;tonne"/> + </om:UnitDivision> + + <om:UnitDivision rdf:about="&om;megaeuroPerMegatonne"> + <rdfs:label xml:lang="en">megaeuro per megatonne</rdfs:label> + <om:hasNumerator rdf:resource="&om;megaeuro"/> + <om:hasDenominator rdf:resource="&om;megatonne"/> + </om:UnitDivision> + + <owl:Class rdf:about="&om;SpecificAmountOfMoney"> + <om:commonlyHasUnit rdf:resource="&om;euroPerTonne"/> + <om:commonlyHasUnit rdf:resource="&om;megaeuroPerMegatonne"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificCost"> + <om:commonlyHasUnit rdf:resource="&om;euroPerTonne"/> + <om:commonlyHasUnit rdf:resource="&om;megaeuroPerMegatonne"/> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificAmountOfMoneyUnit"> + <rdfs:label xml:lang="en">specific amount of money unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:UnitDivision rdf:about="&om;euroPerTonne"/> + <om:UnitDivision rdf:about="&om;megaeuroPerMegatonne"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;SpecificAmountOfMoney"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;SpecificAmountOfMoneyUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Information Technology Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Prefix Ontologies --> + <!-- Unit of Measure Ontologies --> + + <om:ApplicationArea rdf:about="&om;informationTechnology"> + <rdfs:label xml:lang="en">information technology</rdfs:label> + <rdfs:label xml:lang="nl">informatietechnologie</rdfs:label> + <om:usesQuantity rdf:resource="&om;InformationCapacity"/> + <om:usesQuantity rdf:resource="&om;SymbolRate"/> + <om:usesQuantity rdf:resource="&om;PixelCount"/> + <om:usesUnit rdf:resource="&om;bit"/> + <om:usesUnit rdf:resource="&om;byte"/> + <om:usesUnit rdf:resource="&om;hartley"/> + <om:usesUnit rdf:resource="&om;shannon"/> + <om:usesUnit rdf:resource="&om;kibibit"/> + <om:usesUnit rdf:resource="&om;mebibit"/> + <om:usesUnit rdf:resource="&om;gibibit"/> + <om:usesUnit rdf:resource="&om;tebibit"/> + <om:usesUnit rdf:resource="&om;pebibit"/> + <om:usesUnit rdf:resource="&om;exbibit"/> + <om:usesUnit rdf:resource="&om;zebibit"/> + <om:usesUnit rdf:resource="&om;yobibit"/> + <om:usesUnit rdf:resource="&om;kilobit"/> + <om:usesUnit rdf:resource="&om;megabit"/> + <om:usesUnit rdf:resource="&om;gigabit"/> + <om:usesUnit rdf:resource="&om;terabit"/> + <om:usesUnit rdf:resource="&om;petabit"/> + <om:usesUnit rdf:resource="&om;exabit"/> + <om:usesUnit rdf:resource="&om;zettabit"/> + <om:usesUnit rdf:resource="&om;yottabit"/> + <om:usesUnit rdf:resource="&om;bitPerSecond-Time"/> + <om:usesUnit rdf:resource="&om;pixel"/> + </om:ApplicationArea> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Information Capacity Upper Ontology --> + <!-- Symbol Rate Upper Ontology --> + <!-- Pixel Count Upper Ontology --> + + <!-- Information Capacity Upper Ontology --> + + <owl:Class rdf:about="&om;InformationCapacity"> + <rdfs:label xml:lang="en">information capacity</rdfs:label> + <rdfs:label xml:lang="nl">informatiecapaciteit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Symbol Rate Upper Ontology --> + + <owl:Class rdf:about="&om;SymbolRate"> + <rdfs:label xml:lang="en">symbol rate</rdfs:label> + <om:alternativeLabel xml:lang="en">baud rate</om:alternativeLabel> + <om:alternativeLabel xml:lang="en">modulation rate</om:alternativeLabel> + <rdfs:comment xml:lang="en">Symbol rate is the number of symbol changes (signalling events) made to the transmission medium per second using a digitally modulated signal or a line code.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Pixel Count Upper Ontology --> + + <owl:Class rdf:about="&om;PixelCount"> + <rdfs:label xml:lang="en">pixel count</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + </owl:Class> + + <!-- Prefix Ontologies --> + + <!-- Contents --> + + <!-- Binary Prefix Ontology --> + + <!-- Binary Prefix Ontologies --> + + <owl:Class rdf:about="&om;BinaryPrefix"> + <rdfs:label xml:lang="en">binary prefix</rdfs:label> + <rdfs:comment xml:lang="en">IEC prefix</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Prefix"/> + </owl:Class> + + <om:BinaryPrefix rdf:about="&om;kibi"> + <rdfs:label xml:lang="en">kibi</rdfs:label> + <rdfs:label xml:lang="nl">kibi</rdfs:label> + <om:alternativeLabel xml:lang="en">kilobinary</om:alternativeLabel> + <rdfs:comment xml:lang="en">IEC prefix</rdfs:comment> + <om:symbol>Ki</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">1024</om:hasFactor> + </om:BinaryPrefix> + + <om:BinaryPrefix rdf:about="&om;mebi"> + <rdfs:label xml:lang="en">mebi</rdfs:label> + <rdfs:label xml:lang="nl">mebi</rdfs:label> + <om:alternativeLabel xml:lang="en">megabinary</om:alternativeLabel> + <rdfs:comment xml:lang="en">IEC prefix</rdfs:comment> + <om:symbol>Mi</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">1048576</om:hasFactor> + </om:BinaryPrefix> + + <om:BinaryPrefix rdf:about="&om;gibi"> + <rdfs:label xml:lang="en">gibi</rdfs:label> + <rdfs:label xml:lang="nl">gibi</rdfs:label> + <om:alternativeLabel xml:lang="en">gigabinary</om:alternativeLabel> + <rdfs:comment xml:lang="en">IEC prefix</rdfs:comment> + <om:symbol>Gi</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">1073741824</om:hasFactor> + </om:BinaryPrefix> + + <om:BinaryPrefix rdf:about="&om;tebi"> + <rdfs:label xml:lang="en">tebi</rdfs:label> + <rdfs:label xml:lang="nl">tebi</rdfs:label> + <om:alternativeLabel xml:lang="en">terabinary</om:alternativeLabel> + <rdfs:comment xml:lang="en">IEC prefix</rdfs:comment> + <om:symbol>Ti</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">1099511627776</om:hasFactor> + </om:BinaryPrefix> + + <om:BinaryPrefix rdf:about="&om;pebi"> + <rdfs:label xml:lang="en">pebi</rdfs:label> + <rdfs:label xml:lang="nl">pebi</rdfs:label> + <om:alternativeLabel xml:lang="en">petabinary</om:alternativeLabel> + <rdfs:comment xml:lang="en">IEC prefix</rdfs:comment> + <om:symbol>Pi</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">1125899906842624</om:hasFactor> + </om:BinaryPrefix> + + <om:BinaryPrefix rdf:about="&om;exbi"> + <rdfs:label xml:lang="en">exbi</rdfs:label> + <rdfs:label xml:lang="nl">exbi</rdfs:label> + <om:alternativeLabel xml:lang="en">exabinary</om:alternativeLabel> + <rdfs:comment xml:lang="en">IEC prefix</rdfs:comment> + <om:symbol>Ei</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">1152921504606846976</om:hasFactor> + </om:BinaryPrefix> + + <om:BinaryPrefix rdf:about="&om;zebi"> + <rdfs:label xml:lang="en">zebi</rdfs:label> + <rdfs:label xml:lang="nl">zebi</rdfs:label> + <rdfs:comment xml:lang="en">IEC prefix</rdfs:comment> + <om:symbol>Zi</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">1180591620717411303424</om:hasFactor> + </om:BinaryPrefix> + + <om:BinaryPrefix rdf:about="&om;yobi"> + <rdfs:label xml:lang="en">yobi</rdfs:label> + <rdfs:label xml:lang="nl">yobi</rdfs:label> + <rdfs:comment xml:lang="en">IEC prefix</rdfs:comment> + <om:symbol>Yi</om:symbol> + <om:hasFactor rdf:datatype="&xsd;decimal">1208925819614629174706176</om:hasFactor> + </om:BinaryPrefix> + + <!-- Unit of Measure Ontologies --> + + <!-- Contents --> + + <!-- Bit Ontology --> + <!-- Bit Multiples and Submultiples Ontology --> + <!-- Byte Ontology --> + <!-- Byte Multiples and Submultiples Ontology --> + <!-- Information Capacity Unit Ontology --> + <!-- Baud Ontology --> + <!-- Bit Per Second Ontology --> + <!-- Pixel Ontology --> + + <!-- Bit Ontology --> + + <om:Unit rdf:about="&om;bit"> + <rdfs:label xml:lang="en">bit</rdfs:label> + <rdfs:label xml:lang="nl">bit</rdfs:label> + <!-- <rdfs:label xml:lang="zh">位元</rdfs:label> --> + <rdfs:label xml:lang="zh">指二进制中的一位</rdfs:label> + <om:symbol>bit</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <owl:Thing rdf:about="&om;oneBinaryDigit"> + <rdfs:label xml:lang="en">one binary digit</rdfs:label> + </owl:Thing> + + <InformationCapacity rdf:about="&om;informationCapacityOfOneBinaryDigit"> + <rdfs:label xml:lang="en">information capacity of one binary digit</rdfs:label> + <om:hasPhenomenon rdf:resource="&om;oneBinaryDigit"/> + </InformationCapacity> + + <om:Unit rdf:about="&om;bit"> + <rdfs:comment xml:lang="en">The bit is a unit of information capacity defined as the information capacity of one binary digit.</rdfs:comment> + <om:hasQuantity rdf:resource="&om;informationCapacityOfOneBinaryDigit"/> + </om:Unit> + + <owl:Class rdf:about="&om;InformationCapacity"> + <om:commonlyHasUnit rdf:resource="&om;bit"/> + </owl:Class> + + <owl:Class rdf:about="&om;InformationCapacityUnit"> + <rdfs:label xml:lang="en">information capacity unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;bit"/> + <om:Unit rdf:about="&om;byte"/> + <om:Unit rdf:about="&om;hartley"/> + <om:Unit rdf:about="&om;shannon"/> + </owl:oneOf> + </owl:Class> + <owl:Class rdf:about="&om;PrefixedBit"/> + <owl:Class rdf:about="&om;PrefixedByte"/> + </owl:unionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;InformationCapacity"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;InformationCapacityUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Bit Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;kibibit"> + <rdfs:label xml:lang="en">kibibit</rdfs:label> + <rdfs:label xml:lang="nl">kibibit</rdfs:label> + <om:symbol>Kibit</om:symbol> + <om:hasPrefix rdf:resource="&om;kibi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bit"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;mebibit"> + <rdfs:label xml:lang="en">mebibit</rdfs:label> + <rdfs:label xml:lang="nl">mebibit</rdfs:label> + <om:symbol>Mibit</om:symbol> + <om:hasPrefix rdf:resource="&om;mebi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bit"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gibibit"> + <rdfs:label xml:lang="en">gibibit</rdfs:label> + <rdfs:label xml:lang="nl">gibibit</rdfs:label> + <om:symbol>Gibit</om:symbol> + <om:hasPrefix rdf:resource="&om;gibi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bit"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;tebibit"> + <rdfs:label xml:lang="en">tebibit</rdfs:label> + <rdfs:label xml:lang="nl">tebibit</rdfs:label> + <om:symbol>Tibit</om:symbol> + <om:hasPrefix rdf:resource="&om;tebi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bit"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;pebibit"> + <rdfs:label xml:lang="en">pebibit</rdfs:label> + <rdfs:label xml:lang="nl">pebibit</rdfs:label> + <om:symbol>Pibit</om:symbol> + <om:hasPrefix rdf:resource="&om;pebi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bit"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exbibit"> + <rdfs:label xml:lang="en">exbibit</rdfs:label> + <rdfs:label xml:lang="nl">exbibit</rdfs:label> + <om:symbol>Eibit</om:symbol> + <om:hasPrefix rdf:resource="&om;exbi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bit"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zebibit"> + <rdfs:label xml:lang="en">zebibit</rdfs:label> + <rdfs:label xml:lang="nl">zebibit</rdfs:label> + <om:symbol>Zibit</om:symbol> + <om:hasPrefix rdf:resource="&om;zebi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bit"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yobibit"> + <rdfs:label xml:lang="en">yobibit</rdfs:label> + <rdfs:label xml:lang="nl">yobibit</rdfs:label> + <om:symbol>Yibit</om:symbol> + <om:hasPrefix rdf:resource="&om;yobi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bit"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilobit"> + <rdfs:label xml:lang="en">kilobit</rdfs:label> + <rdfs:label xml:lang="nl">kilobit</rdfs:label> + <om:symbol>kbit</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bit"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megabit"> + <rdfs:label xml:lang="en">megabit</rdfs:label> + <rdfs:label xml:lang="nl">megabit</rdfs:label> + <om:symbol>Mbit</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bit"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigabit"> + <rdfs:label xml:lang="en">gigabit</rdfs:label> + <rdfs:label xml:lang="nl">gigabit</rdfs:label> + <om:symbol>Gbit</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bit"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;terabit"> + <rdfs:label xml:lang="en">terabit</rdfs:label> + <rdfs:label xml:lang="nl">terabit</rdfs:label> + <om:symbol>Tbit</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bit"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petabit"> + <rdfs:label xml:lang="en">petabit</rdfs:label> + <rdfs:label xml:lang="nl">petabit</rdfs:label> + <om:symbol>Pbit</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bit"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exabit"> + <rdfs:label xml:lang="en">exabit</rdfs:label> + <rdfs:label xml:lang="nl">exabit</rdfs:label> + <om:symbol>Ebit</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bit"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettabit"> + <rdfs:label xml:lang="en">zettabit</rdfs:label> + <rdfs:label xml:lang="nl">zettabit</rdfs:label> + <om:symbol>Zbit</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bit"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottabit"> + <rdfs:label xml:lang="en">yottabit</rdfs:label> + <rdfs:label xml:lang="nl">yottabit</rdfs:label> + <om:symbol>Ybit</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;bit"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedBit"> + <rdfs:label xml:lang="en">prefixed bit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;bit"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;Prefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;InformationCapacity"> + <om:commonlyHasUnit rdf:resource="&om;kibibit"/> + <om:commonlyHasUnit rdf:resource="&om;mebibit"/> + <om:commonlyHasUnit rdf:resource="&om;gibibit"/> + <om:commonlyHasUnit rdf:resource="&om;tebibit"/> + <om:commonlyHasUnit rdf:resource="&om;pebibit"/> + <om:commonlyHasUnit rdf:resource="&om;exbibit"/> + <om:commonlyHasUnit rdf:resource="&om;zebibit"/> + <om:commonlyHasUnit rdf:resource="&om;yobibit"/> + <om:commonlyHasUnit rdf:resource="&om;kilobit"/> + <om:commonlyHasUnit rdf:resource="&om;megabit"/> + <om:commonlyHasUnit rdf:resource="&om;gigabit"/> + <om:commonlyHasUnit rdf:resource="&om;terabit"/> + <om:commonlyHasUnit rdf:resource="&om;petabit"/> + <om:commonlyHasUnit rdf:resource="&om;exabit"/> + <om:commonlyHasUnit rdf:resource="&om;zettabit"/> + <om:commonlyHasUnit rdf:resource="&om;yottabit"/> + </owl:Class> + + <!-- Byte Ontology --> + + <om:Unit rdf:about="&om;byte"> + <rdfs:label xml:lang="en">byte</rdfs:label> + <rdfs:label xml:lang="nl">byte</rdfs:label> + <rdfs:label xml:lang="zh">字节</rdfs:label> + <rdfs:comment xml:lang="en">The byte is a unit of information capacity defined as 8 bit.</rdfs:comment> + <om:symbol>B</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">8</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;bit"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_8Bit"> + <om:hasNumericalValue>8</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;bit"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;InformationCapacity"> + <om:commonlyHasUnit rdf:resource="&om;byte"/> + </owl:Class> + + <!-- Byte Multiples and Submultiples Ontology --> + + <om:PrefixedUnit rdf:about="&om;kibibyte"> + <rdfs:label xml:lang="en">kibibyte</rdfs:label> + <rdfs:label xml:lang="nl">kibibyte</rdfs:label> + <om:symbol>KiB</om:symbol> + <om:hasPrefix rdf:resource="&om;kibi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;byte"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;mebibyte"> + <rdfs:label xml:lang="en">mebibyte</rdfs:label> + <rdfs:label xml:lang="nl">mebibyte</rdfs:label> + <om:symbol>MiB</om:symbol> + <om:hasPrefix rdf:resource="&om;mebi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;byte"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gibibyte"> + <rdfs:label xml:lang="en">gibibyte</rdfs:label> + <rdfs:label xml:lang="nl">gibibyte</rdfs:label> + <om:symbol>GiB</om:symbol> + <om:hasPrefix rdf:resource="&om;gibi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;byte"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;tebibyte"> + <rdfs:label xml:lang="en">tebibyte</rdfs:label> + <rdfs:label xml:lang="nl">tebibyte</rdfs:label> + <om:symbol>TiB</om:symbol> + <om:hasPrefix rdf:resource="&om;tebi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;byte"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;pebibyte"> + <rdfs:label xml:lang="en">pebibyte</rdfs:label> + <rdfs:label xml:lang="nl">pebibyte</rdfs:label> + <om:symbol>PiB</om:symbol> + <om:hasPrefix rdf:resource="&om;pebi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;byte"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exbibyte"> + <rdfs:label xml:lang="en">exbibyte</rdfs:label> + <rdfs:label xml:lang="nl">exbibyte</rdfs:label> + <om:symbol>EiB</om:symbol> + <om:hasPrefix rdf:resource="&om;exbi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;byte"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zebibyte"> + <rdfs:label xml:lang="en">zebibyte</rdfs:label> + <rdfs:label xml:lang="nl">zebibyte</rdfs:label> + <om:symbol>ZiB</om:symbol> + <om:hasPrefix rdf:resource="&om;zebi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;byte"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yobibyte"> + <rdfs:label xml:lang="en">yobibyte</rdfs:label> + <rdfs:label xml:lang="nl">yobibyte</rdfs:label> + <om:symbol>YiB</om:symbol> + <om:hasPrefix rdf:resource="&om;yobi"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;byte"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;kilobyte"> + <rdfs:label xml:lang="en">kilobyte</rdfs:label> + <rdfs:label xml:lang="nl">kilobyte</rdfs:label> +<!-- <rdfs:label xml:lang="zh">千字节</rdfs:label> --> + <om:symbol>kB</om:symbol> + <om:hasPrefix rdf:resource="&om;kilo"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;byte"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;megabyte"> + <rdfs:label xml:lang="en">megabyte</rdfs:label> + <rdfs:label xml:lang="nl">megabyte</rdfs:label> +<!-- <rdfs:label xml:lang="zh">兆字节</rdfs:label> --> + <rdfs:label xml:lang="zh">百万字节</rdfs:label> + <om:symbol>MB</om:symbol> + <om:hasPrefix rdf:resource="&om;mega"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;byte"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;gigabyte"> + <rdfs:label xml:lang="en">gigabyte</rdfs:label> + <rdfs:label xml:lang="nl">gigabyte</rdfs:label> +<!-- <rdfs:label xml:lang="zh">吉字节</rdfs:label> --> + <om:symbol>GB</om:symbol> + <om:hasPrefix rdf:resource="&om;giga"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;byte"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;terabyte"> + <rdfs:label xml:lang="en">terabyte</rdfs:label> + <rdfs:label xml:lang="nl">terabyte</rdfs:label> + <!-- <rdfs:label xml:lang="zh">太字节</rdfs:label> --> + <rdfs:label xml:lang="zh">10^12字节</rdfs:label> + <om:symbol>TB</om:symbol> + <om:hasPrefix rdf:resource="&om;tera"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;byte"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;petabyte"> + <rdfs:label xml:lang="en">petabyte</rdfs:label> + <rdfs:label xml:lang="nl">petabyte</rdfs:label> + <!-- <rdfs:label xml:lang="zh">拍字节</rdfs:label> --> + <rdfs:label xml:lang="zh">10^15字节</rdfs:label> + <om:symbol>PB</om:symbol> + <om:hasPrefix rdf:resource="&om;peta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;byte"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;exabyte"> + <rdfs:label xml:lang="en">exabyte</rdfs:label> + <rdfs:label xml:lang="nl">exabyte</rdfs:label> + <!-- <rdfs:label xml:lang="zh">艾字节</rdfs:label> --> + <rdfs:label xml:lang="zh">千兆兆字节</rdfs:label> + <om:symbol>EB</om:symbol> + <om:hasPrefix rdf:resource="&om;exa"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;byte"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;zettabyte"> + <rdfs:label xml:lang="en">zettabyte</rdfs:label> + <rdfs:label xml:lang="nl">zettabyte</rdfs:label> + <!-- <rdfs:label xml:lang="zh">泽字节</rdfs:label> --> + <rdfs:label xml:lang="zh">10^21字节</rdfs:label> + <om:symbol>ZB</om:symbol> + <om:hasPrefix rdf:resource="&om;zetta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;byte"/> + </om:PrefixedUnit> + + <om:PrefixedUnit rdf:about="&om;yottabyte"> + <rdfs:label xml:lang="en">yottabyte</rdfs:label> + <rdfs:label xml:lang="nl">yottabyte</rdfs:label> + <!-- <rdfs:label xml:lang="zh">尧字节</rdfs:label> --> + <rdfs:label xml:lang="zh">10^24字节</rdfs:label> + <om:symbol>YB</om:symbol> + <om:hasPrefix rdf:resource="&om;yotta"/> + <!-- hasSingularUnit --> <om:hasUnit rdf:resource="&om;byte"/> + </om:PrefixedUnit> + + <owl:Class rdf:about="&om;PrefixedByte"> + <rdfs:label xml:lang="en">prefixed byte</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;PrefixedUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:hasValue rdf:resource="&om;byte"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> <!-- hasSingularUnit --> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:allValuesFrom rdf:resource="&om;Prefix"/> + </owl:Restriction> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasPrefix"/> + <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;InformationCapacity"> + <om:commonlyHasUnit rdf:resource="&om;kibibyte"/> + <om:commonlyHasUnit rdf:resource="&om;mebibyte"/> + <om:commonlyHasUnit rdf:resource="&om;gibibyte"/> + <om:commonlyHasUnit rdf:resource="&om;tebibyte"/> + <om:commonlyHasUnit rdf:resource="&om;pebibyte"/> + <om:commonlyHasUnit rdf:resource="&om;exbibyte"/> + <om:commonlyHasUnit rdf:resource="&om;zebibyte"/> + <om:commonlyHasUnit rdf:resource="&om;yobibyte"/> + <om:commonlyHasUnit rdf:resource="&om;kilobyte"/> + <om:commonlyHasUnit rdf:resource="&om;megabyte"/> + <om:commonlyHasUnit rdf:resource="&om;gigabyte"/> + <om:commonlyHasUnit rdf:resource="&om;terabyte"/> + <om:commonlyHasUnit rdf:resource="&om;petabyte"/> + <om:commonlyHasUnit rdf:resource="&om;exabyte"/> + <om:commonlyHasUnit rdf:resource="&om;zettabyte"/> + <om:commonlyHasUnit rdf:resource="&om;yottabyte"/> + </owl:Class> + + <!-- Information Capacity Unit Ontology --> + + <om:Unit rdf:about="&om;hartley"> + <rdfs:label xml:lang="en">hartley</rdfs:label> + <rdfs:label xml:lang="nl">hartley</rdfs:label> + <rdfs:comment xml:lang="en">The hartley is a unit of information capacity defined as 3.321928095 bit.</rdfs:comment> + <om:symbol>Hart</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">3.321928095</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;bit"/> + </om:Unit> + + <om:Unit rdf:about="&om;shannon"> + <rdfs:label xml:lang="en">shannon</rdfs:label> + <rdfs:label xml:lang="nl">shannon</rdfs:label> + <rdfs:comment xml:lang="en">The shannon is a unit of information capacity defined as 1 bit.</rdfs:comment> + <om:symbol>Sh</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasUnit rdf:resource="&om;bit"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_3.321928095Bit"> + <om:hasNumericalValue>3.321928095</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;bit"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;InformationCapacity"> + <om:commonlyHasUnit rdf:resource="&om;hartley"/> + <om:commonlyHasUnit rdf:resource="&om;shannon"/> + </owl:Class> + + <!-- Baud Ontology --> + + <om:Unit rdf:about="&om;baud"> + <rdfs:label xml:lang="en">baud</rdfs:label> + <rdfs:label xml:lang="nl">baud</rdfs:label> + <om:symbol>Bd</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <om:SymbolRate rdf:about="&om;oneDistinctSymbolChangeOrSignallingEventMadeToTheTransmissionMediumPerSecondInADigitallyModulatedSignalOrALineCode"> + </om:SymbolRate> + + <om:Unit rdf:about="&om;baud"> + <rdfs:comment xml:lang="en">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.</rdfs:comment> + <om:hasQuantity rdf:resource="&om;oneDistinctSymbolChangeOrSignallingEventMadeToTheTransmissionMediumPerSecondInADigitallyModulatedSignalOrALineCode"/> + </om:Unit> + + <owl:Class rdf:about="&om;SymbolRate"> + <om:commonlyHasUnit rdf:resource="&om;baud"/> + </owl:Class> + + <owl:Class rdf:about="&om;SymbolRateUnit"> + <rdfs:label xml:lang="en">symbol rate unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:SingularUnit rdf:about="&om;baud"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;SymbolRate"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;SymbolRateUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Bit Per Second Ontology --> + + <om:UnitDivision rdf:about="&om;bitPerSecond-Time"> + <rdfs:label xml:lang="en">bit per second</rdfs:label> + <rdfs:label xml:lang="nl">bit per seconde</rdfs:label> + <om:symbol>bit/s</om:symbol> + <om:alternativeSymbol>bit s-1</om:alternativeSymbol> + <om:alternativeSymbol>bit·s-1</om:alternativeSymbol> + <om:hasNumerator rdf:resource="&om;bit"/> + <om:hasDenominator rdf:resource="&om;second-Time"/> + </om:UnitDivision> + + <!-- Pixel Ontology --> + + <om:Unit rdf:about="&om;pixel"> + <rdfs:label xml:lang="en">pixel</rdfs:label> + <rdfs:label xml:lang="nl">pixel</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + </om:Unit> + + <owl:Class rdf:about="&om;PixelCountUnit"> + <rdfs:label xml:lang="en">pixel count unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Unit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:SingularUnit rdf:about="&om;pixel"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;PixelCount"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;PixelCountUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Typography Ontology --> + + <!-- Contents --> + + <!-- Quantity Ontologies --> + <!-- Unit of Measure Ontologies --> + + <om:ApplicationArea rdf:about="&om;typography"> + <rdfs:label xml:lang="en">typography</rdfs:label> + <rdfs:label xml:lang="nl">typografie</rdfs:label> + <om:usesQuantity rdf:resource="&om;FontSize"/> + <om:usesUnit rdf:resource="&om;cicero"/> + <om:usesUnit rdf:resource="&om;pica-ATA"/> + <om:usesUnit rdf:resource="&om;pica-Postscript"/> + <om:usesUnit rdf:resource="&om;pica-TeX"/> + <om:usesUnit rdf:resource="&om;point-ATA"/> + <om:usesUnit rdf:resource="&om;point-Didot"/> + <om:usesUnit rdf:resource="&om;point-Postscript"/> + <om:usesUnit rdf:resource="&om;point-TeX"/> + </om:ApplicationArea> + + <!-- Quantity Ontologies --> + + <!-- Contents --> + + <!-- Font Size Ontology --> + + <!-- Font Size Ontology --> + + <owl:Class rdf:about="&om;FontSize"> + <rdfs:label xml:lang="en">font size</rdfs:label> + <rdfs:label xml:lang="nl">fontgrootte</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Length"/> + <!-- The hasPhenomenon property of this class should, in principle, be restricted to Font or something. --> + </owl:Class> + + <owl:Class rdf:about="&om;FontSize"> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + </owl:Class> + + <owl:Class rdf:about="&om;FontSize"> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + </owl:Class> + + <owl:Class rdf:about="&om;FontSize"> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + </owl:Class> + + <!-- Unit of Measure Ontologies --> + + <!-- Contents --> + + <!-- Font Size Unit Ontology --> + + <!-- Font Size Unit Ontology --> + + <om:Unit rdf:about="&om;cicero"> + <rdfs:label xml:lang="en">cicero</rdfs:label> + <rdfs:label xml:lang="nl">cicero</rdfs:label> + <rdfs:comment xml:lang="en">The cicero is a unit of length defined as 12 point (Didot).</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">12</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;point-Didot"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;pica-ATA"> + <rdfs:label xml:lang="en">pica (ATA)</rdfs:label> + <om:alternativeLabel xml:lang="en">ATA pica</om:alternativeLabel> + <rdfs:comment xml:lang="en">The ATA pica is a unit of length defined as 12 point (ATA).</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">12</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;point-ATA"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;pica-Postscript"> + <rdfs:label xml:lang="en">pica (Postscript)</rdfs:label> + <om:alternativeLabel xml:lang="en">Postscript pica</om:alternativeLabel> + <rdfs:comment xml:lang="en">The Postscript pica is a unit of length defined as 12 point (Postscript).</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">12</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;point-Postscript"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;pica-TeX"> + <rdfs:label xml:lang="en">pica (TeX)</rdfs:label> + <om:alternativeLabel xml:lang="en">TeX pica</om:alternativeLabel> + <rdfs:comment xml:lang="en">The TeX pica is a unit of length defined as 12 point (TeX).</rdfs:comment> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">12</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;point-TeX"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;point-ATA"> + <rdfs:label xml:lang="en">point (ATA)</rdfs:label> + <om:alternativeLabel xml:lang="en">ATA point</om:alternativeLabel> + <rdfs:comment xml:lang="en">The ATA point is a unit of length defined as 0.3514598e-3 metre.</rdfs:comment> + <om:symbol>pt</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0003514598</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;point-Didot"> + <rdfs:label xml:lang="en">point (Didot)</rdfs:label> + <om:alternativeLabel xml:lang="en">Didot point</om:alternativeLabel> + <rdfs:comment xml:lang="en">The Didot point is a unit of length defined as 0.3759e-3 metre.</rdfs:comment> + <om:symbol>pt</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.0003759</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;metre"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;point-Postscript"> + <rdfs:label xml:lang="en">point (Postscript)</rdfs:label> + <om:alternativeLabel xml:lang="en">Postscript point</om:alternativeLabel> + <rdfs:comment xml:lang="en">The Postscript point is a unit of length defined as 0.013888888888888888888888888888889 inch.</rdfs:comment> + <om:symbol>pt</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.013888888888888888888888888888889</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;inch-International"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <om:Unit rdf:about="&om;point-TeX"> + <rdfs:label xml:lang="en">point (TeX)</rdfs:label> + <om:alternativeLabel xml:lang="en">TeX point</om:alternativeLabel> + <rdfs:comment xml:lang="en">The TeX point is a unit of length defined as 0.01383700013837000138370001383 inch.</rdfs:comment> + <om:symbol>pt</om:symbol> + <rdf:type rdf:resource="&om;SingularUnit"/> + <!-- hasDefinition --> <om:hasFactor rdf:datatype="&xsd;decimal">0.013837000138370001383700013837</om:hasFactor> + <!-- hasDefinition --> <om:hasUnit rdf:resource="&om;inch-International"/> + <om:hasDimension rdf:resource="&om;length-Dimension"/> + </om:Unit> + + <!-- <om:Measure rdf:about="&om;_0.013837000138370001383700013837Inch-International"> + <om:hasNumericalValue>0.013837000138370001383700013837</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;inch-International"/> + </om:Measure> + + <om:Measure rdf:about="&om;_0.013888888888888888888888888888889Inch-International"> + <om:hasNumericalValue>0.013888888888888888888888888888889</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;inch-International"/> + </om:Measure> + + <om:Measure rdf:about="&om;_0.3514598e-3Metre"> + <om:hasNumericalValue>0.3514598e-3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_0.3759e-3Metre"> + <om:hasNumericalValue>0.3759e-3</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;metre"/> + </om:Measure> + + <om:Measure rdf:about="&om;_12Point-ATA"> + <om:hasNumericalValue>12</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;point-ATA"/> + </om:Measure> + + <om:Measure rdf:about="&om;_12Point-Didot"> + <om:hasNumericalValue>12</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;point-Didot"/> + </om:Measure> + + <om:Measure rdf:about="&om;_12Point-Postscript"> + <om:hasNumericalValue>12</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;point-Postscript"/> + </om:Measure> + + <om:Measure rdf:about="&om;_12Point-TeX"> + <om:hasNumericalValue>12</om:hasNumericalValue> + <om:hasUnit rdf:resource="&om;point-TeX"/> + </om:Measure> --> + + <owl:Class rdf:about="&om;Length"> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + </owl:Class> + + <owl:Class rdf:about="&om;Breadth"> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + </owl:Class> + + <owl:Class rdf:about="&om;Circumference"> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + </owl:Class> + + <owl:Class rdf:about="&om;Cut-OffWavelength"> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + </owl:Class> + + <owl:Class rdf:about="&om;Depth"> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + </owl:Class> + + <owl:Class rdf:about="&om;Diameter"> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + </owl:Class> + + <owl:Class rdf:about="&om;Displacement"> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + </owl:Class> + + <owl:Class rdf:about="&om;Distance"> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + </owl:Class> + + <owl:Class rdf:about="&om;FontSize"> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + </owl:Class> + + <owl:Class rdf:about="&om;Height"> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + </owl:Class> + + <owl:Class rdf:about="&om;PeakWavelength"> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + </owl:Class> + + <owl:Class rdf:about="&om;Radius"> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + </owl:Class> + + <owl:Class rdf:about="&om;Thickness"> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + </owl:Class> + + <owl:Class rdf:about="&om;Wavelength"> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + </owl:Class> + + <owl:Class rdf:about="&om;Width"> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + </owl:Class> + + <owl:Class rdf:about="&om;FontSizeUnit"> + <rdfs:label xml:lang="en">font size unit</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;LengthUnit"/> + <owl:equivalentClass> + <owl:Class> + <owl:oneOf rdf:parseType="Collection"> + <om:Unit rdf:about="&om;cicero"/> + <om:Unit rdf:about="&om;pica-ATA"/> + <om:Unit rdf:about="&om;pica-Postscript"/> + <om:Unit rdf:about="&om;pica-TeX"/> + <om:Unit rdf:about="&om;point-ATA"/> + <om:Unit rdf:about="&om;point-Didot"/> + <om:Unit rdf:about="&om;point-Postscript"/> + <om:Unit rdf:about="&om;point-TeX"/> + </owl:oneOf> + </owl:Class> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:about="&om;FontSize"> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasValue"/> + <owl:allValuesFrom> + <owl:Restriction> + <owl:onProperty rdf:resource="&om;hasUnit"/> + <owl:allValuesFrom> + <owl:Class rdf:about="&om;FontSizeUnit"/> + </owl:allValuesFrom> + </owl:Restriction> + </owl:allValuesFrom> + </owl:Restriction> + </rdfs:subClassOf> + </owl:Class> + + <!-- Shipping Ontology --> + + <om:ApplicationArea rdf:about="&om;shipping"> + <rdfs:label xml:lang="en">shipping</rdfs:label> + <rdfs:label xml:lang="nl">shipping</rdfs:label> + <!-- <om:uses_application_area rdf:resource="&om;space_and_time"/> --> + <om:usesQuantity rdf:resource="&om;Length"/> + <om:usesQuantity rdf:resource="&om;Speed"/> + <om:usesUnit rdf:resource="&om;nauticalMile-International"/> + <om:usesUnit rdf:resource="&om;knot-International"/> + <om:usesUnit rdf:resource="&om;nauticalMile-InternationalPerHour"/> + </om:ApplicationArea> + + <!-- Food Engineering Ontology --> + + <!-- Contents --> + + <!-- Mass Fraction Subclass Upper Ontology --> + + <!-- <om:ApplicationArea rdf:about="&om;foodEngineering"> --> + <!-- <rdfs:label xml:lang="en">food engineering</rdfs:label> --> + <!-- <rdfs:label xml:lang="nl">levensmiddelentechnologie</rdfs:label> --> + <!-- <om:uses_application_area rdf:resource="&om;space_and_time"/> --> + <!-- <om:usesQuantity rdf:resource="&om;AceticAcidMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;DisodiumEthyleneDiamineTetreAcetateMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;DryMatterMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;EggMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;FatMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;GelatinMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;GuarGumMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;LactoseMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;LocustBeanGumMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;ModeratedStarchMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;MustardPowderMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;PotassiumSorbateMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;ProteinMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SaltMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SoyBeanMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;StarchMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;StarchVA40MassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;StarchVA85MassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;SugarMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;TweenMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;WaterMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;WheyProteinMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;WheyProteinAggregateMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;WheyProteinBeadsMassFraction"/> --> + <!-- <om:usesQuantity rdf:resource="&om;XanthanMassFraction"/> --> + <!-- <om:usesUnit rdf:resource="&om;one"/> --> + <!-- <om:usesUnit rdf:resource="&om;percent"/> --> + <!-- <om:usesUnit rdf:resource="&om;gramPerGram"/> --> + <!-- </om:ApplicationArea> --> + + <!-- Mass Fraction Subclass Upper Ontology --> + + <owl:Class rdf:about="&om;AceticAcidMassFraction"> + <rdfs:label xml:lang="en">acetic acid mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of acetic acid in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;DisodiumEthyleneDiamineTetreAcetateMassFraction"> + <rdfs:label xml:lang="en">disodium ethylene diamine tetra acetate mass fraction</rdfs:label> + <om:alternativeLabel xml:lang="en">NaEDTA mass fraction</om:alternativeLabel> + <rdfs:comment xml:lang="en">The fraction of the mass of disodium ethylene diamine tetra acetate in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;DryMatterMassFraction"> + <rdfs:label xml:lang="en">dry matter mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of dry matter in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;EggMassFraction"> + <rdfs:label xml:lang="en">egg mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of egg in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;FatMassFraction"> + <rdfs:label xml:lang="en">fat mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of fat in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;GelatinMassFraction"> + <rdfs:label xml:lang="en">gelatin mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of gelatin in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;GuarGumMassFraction"> + <rdfs:label xml:lang="en">guar gum mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of guar gum in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;LactoseMassFraction"> + <rdfs:label xml:lang="en">lactose mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of lactose in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;LocustBeanGumMassFraction"> + <rdfs:label xml:lang="en">locust bean gum mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of locust bean gum in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;ModeratedStarchMassFraction"> + <rdfs:label xml:lang="en">moderated starch mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of moderated starch in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;MustardPowderMassFraction"> + <rdfs:label xml:lang="en">mustard powder mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of mustard powder in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;PotassiumSorbateMassFraction"> + <rdfs:label xml:lang="en">potassium sorbate mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of potassium sorbate in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;ProteinMassFraction"> + <rdfs:label xml:lang="en">protein mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of protein in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;SaltMassFraction"> + <rdfs:label xml:lang="en">salt mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of salt in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;SoyBeanMassFraction"> + <rdfs:label xml:lang="en">soy bean mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of soy bean oil in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;StarchMassFraction"> + <rdfs:label xml:lang="en">starch mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of starch in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;StarchVA40MassFraction"> + <rdfs:label xml:lang="en">starch VA40 mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of starch VA40 in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;StarchVA85MassFraction"> + <rdfs:label xml:lang="en">starch VA85 mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of starch VA85 in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;SugarMassFraction"> + <rdfs:label xml:lang="en">sugar mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of sugar in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;TweenMassFraction"> + <rdfs:label xml:lang="en">tween mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of tween in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;WaterMassFraction"> + <rdfs:label xml:lang="en">water mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of water in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;WheyProteinMassFraction"> + <rdfs:label xml:lang="en">whey protein mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of whey protein in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;WheyProteinAggregateMassFraction"> + <rdfs:label xml:lang="en">whey protein aggregate mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of whey protein aggregate in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;WheyProteinBeadsMassFraction"> + <rdfs:label xml:lang="en">whey protein beads mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of whey protein beads in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;XanthanMassFraction"> + <rdfs:label xml:lang="en">xanthan mass fraction</rdfs:label> + <rdfs:comment xml:lang="en">The fraction of the mass of xanthan in a phenomenon</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;MassFraction"/> + </owl:Class> + + <owl:Class rdf:about="&om;AceticAcidMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;DisodiumEthyleneDiamineTetreAcetateMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;DryMatterMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;EggMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;FatMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;GelatinMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;GuarGumMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;LactoseMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;LocustBeanGumMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;ModeratedStarchMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;MustardPowderMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;PotassiumSorbateMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;ProteinMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;SaltMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;SoyBeanMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;StarchMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;StarchVA40MassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;StarchVA85MassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;SugarMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;TweenMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;WaterMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;WheyProteinMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;WheyProteinAggregateMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;WheyProteinBeadsMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;XanthanMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;AceticAcidMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;DisodiumEthyleneDiamineTetreAcetateMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;DryMatterMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;EggMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;FatMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;GelatinMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;GuarGumMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;LactoseMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;LocustBeanGumMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;ModeratedStarchMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;MustardPowderMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;PotassiumSorbateMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;ProteinMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;SaltMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;SoyBeanMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;StarchMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;StarchVA40MassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;StarchVA85MassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;SugarMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;TweenMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;WaterMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;WheyProteinMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;WheyProteinAggregateMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;WheyProteinBeadsMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;XanthanMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;AceticAcidMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;DisodiumEthyleneDiamineTetreAcetateMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;DryMatterMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;EggMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;FatMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;GelatinMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;GuarGumMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;LactoseMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;LocustBeanGumMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;ModeratedStarchMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;MustardPowderMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;PotassiumSorbateMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;ProteinMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SaltMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SoyBeanMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;StarchMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;StarchVA40MassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;StarchVA85MassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;SugarMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;TweenMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;WaterMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;WheyProteinMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;WheyProteinAggregateMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;WheyProteinBeadsMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <owl:Class rdf:about="&om;XanthanMassFraction"> + <om:commonlyHasUnit rdf:resource="&om;gramPerGram"/> + </owl:Class> + + <!-- Post-Harvest Technology Ontology --> + + <owl:Class rdf:about="&om;VaseLife"> + <rdfs:label xml:lang="en">vase life</rdfs:label> + <rdfs:label xml:lang="nl">vaasleven</rdfs:label> + <rdfs:comment xml:lang="nl">Aantal dagen op de vaas tot onvoldoende.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Time"/> + <om:commonlyHasUnit rdf:resource="&om;day"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberBudStadium"> + <rdfs:label xml:lang="en">number bud stadium</rdfs:label> + <rdfs:label xml:lang="nl">aantal knopstadium</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Number"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberBudStadium1"> + <rdfs:label xml:lang="en">number bud stadium 1</rdfs:label> + <rdfs:label xml:lang="nl">aantal knopstadium 1</rdfs:label> +<!-- <om:unofficialLabel>s1</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">s1</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Roos aantal in knopstadium 1: spitse knop.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberBudStadium"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberBudStadium2"> + <rdfs:label xml:lang="en">number bud stadium 2</rdfs:label> + <rdfs:label xml:lang="nl">aantal knopstadium 2</rdfs:label> +<!-- <om:unofficialLabel>s2</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">s2</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Roos aantal in knopstadium 2: spitse knop.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberBudStadium"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberBudStadium3"> + <rdfs:label xml:lang="en">number bud stadium 3</rdfs:label> + <rdfs:label xml:lang="nl">aantal knopstadium 3</rdfs:label> +<!-- <om:unofficialLabel>s3</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">s3</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Roos aantal in knopstadium 3: spitse knop.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberBudStadium"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberBudStadium4"> + <rdfs:label xml:lang="en">number bud stadium 4</rdfs:label> + <rdfs:label xml:lang="nl">aantal knopstadium 4</rdfs:label> +<!-- <om:unofficialLabel>s4</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">s4</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Roos aantal in knopstadium 4: spitse knop.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberBudStadium"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberBudStadium5"> + <rdfs:label xml:lang="en">number bud stadium 5</rdfs:label> + <rdfs:label xml:lang="nl">aantal knopstadium 5</rdfs:label> +<!-- <om:unofficialLabel>s5</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">s5</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Roos aantal in knopstadium 5: spitse knop.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberBudStadium"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;BudStadium"> + <rdfs:label xml:lang="en">bud stadium</rdfs:label> + <rdfs:label xml:lang="nl">knopstadium</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-5"/> + </owl:Class> + + <owl:Class rdf:about="&om;BudStadiumDay0"> + <rdfs:label xml:lang="en">bud stadium day 0</rdfs:label> + <rdfs:label xml:lang="nl">knopstadium dag 0</rdfs:label> +<!-- <om:unofficialLabel>sday0</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">sday0</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Knopstadium vaasdag 0 (start vaasleven) (code).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;BudStadium"/> + <om:commonlyHasUnit rdf:resource="&om;_1-5"/> + </owl:Class> + + <owl:Class rdf:about="&om;BudStadiumDay4"> + <rdfs:label xml:lang="en">bud stadium day 4</rdfs:label> + <rdfs:label xml:lang="nl">knopstadium dag 4</rdfs:label> +<!-- <om:unofficialLabel>sday4</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">sday4</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Knopstadium vaasdag 4 (code).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;BudStadium"/> + <om:commonlyHasUnit rdf:resource="&om;_1-5"/> + </owl:Class> + + <owl:Class rdf:about="&om;BudStadiumDay7"> + <rdfs:label xml:lang="en">bud stadium day 7</rdfs:label> + <rdfs:label xml:lang="nl">knopstadium dag 7</rdfs:label> +<!-- <om:unofficialLabel>sday7</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">sday7</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Knopstadium vaasdag 7 (code).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;BudStadium"/> + <om:commonlyHasUnit rdf:resource="&om;_1-5"/> + </owl:Class> + + <om:Unit rdf:about="&om;_1-5"> + <rdfs:label xml:lang="en">1-5</rdfs:label> + <rdfs:label xml:lang="nl">1-5</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <owl:Class rdf:about="&om;NumberBotrytis"> + <rdfs:label xml:lang="en">number Botrytis</rdfs:label> + <rdfs:label xml:lang="nl">aantal Botrytis</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Number"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberBotrytis0"> + <rdfs:label xml:lang="en">number Botrytis 0</rdfs:label> + <rdfs:label xml:lang="nl">aantal Botrytis 0</rdfs:label> +<!-- <om:unofficialLabel>b0</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">b0</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal bloemen zonder Botrytis.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberBotrytis"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberBotrytis1"> + <rdfs:label xml:lang="en">number Botrytis 1</rdfs:label> + <rdfs:label xml:lang="nl">aantal Botrytis 1</rdfs:label> +<!-- <om:unofficialLabel>b1</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">b1</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal bloemen met Botrytis 1: enkele laesies: max 3 op één petaal of max 5 op meerdere plekken.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberBotrytis"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberBotrytis2"> + <rdfs:label xml:lang="en">number Botrytis 2</rdfs:label> + <rdfs:label xml:lang="nl">aantal Botrytis 2</rdfs:label> +<!-- <om:unofficialLabel>b2</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">b2</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal bloemen met Botrytis 2: grotere vlek(ken) op één petaal.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberBotrytis"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberBotrytis3"> + <rdfs:label xml:lang="en">number Botrytis 3</rdfs:label> + <rdfs:label xml:lang="nl">aantal Botrytis 3</rdfs:label> +<!-- <om:unofficialLabel>b3</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">b3</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal bloemen met Botrytis 3: één bruin petaal of vlekken op meer petalen.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberBotrytis"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberBotrytis4"> + <rdfs:label xml:lang="en">number Botrytis 4</rdfs:label> + <rdfs:label xml:lang="nl">aantal Botrytis 4</rdfs:label> +<!-- <om:unofficialLabel>b4</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">b4</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal bloemen met Botrytis 4: minimaal één bruin petaal en hart aangetast.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberBotrytis"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;CauseEndOfVaseLifeBotrytis"> + <rdfs:label xml:lang="en">cause end of vase life Botrytis</rdfs:label> + <rdfs:label xml:lang="nl">oorzaak einde vaasleven Botrytis</rdfs:label> +<!-- <om:unofficialLabel>bot</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">bot</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Oorzaak einde vaasleven Botrytis (b3 of b4) (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <om:Unit rdf:about="&om;_1-0"> + <rdfs:label xml:lang="en">1/0</rdfs:label> + <rdfs:label xml:lang="nl">1/0</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <owl:Class rdf:about="&om;NumberFlowers"> + <rdfs:label xml:lang="en">number flowers</rdfs:label> + <rdfs:label xml:lang="nl">aantal bloemen</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Number"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;TotalNumberFlowers"> + <rdfs:label xml:lang="en">total number flowers</rdfs:label> + <rdfs:label xml:lang="nl">totaal aantal bloemen</rdfs:label> +<!-- <om:unofficialLabel>#flowers</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#flowers</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Totaal aantal bloemen.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberFlowers"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberBlue-DiscoloredFlowers"> + <rdfs:label xml:lang="en">number blue-discolored flowers</rdfs:label> + <rdfs:label xml:lang="nl">aantal blauwverkleurde bloemen</rdfs:label> +<!-- <om:unofficialLabel>#blue flowers</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#blue flowers</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal blauwverkleurde bloemen.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberFlowers"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberAbscisedFlowers"> + <rdfs:label xml:lang="en">number abscised flowers</rdfs:label> + <rdfs:label xml:lang="nl">aantal gevallen bloemen</rdfs:label> +<!-- <om:unofficialLabel>#abscised flowers</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#abscised flowers</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal gevallen bloemen.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberFlowers"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberWiltedFlowers"> + <rdfs:label xml:lang="en">number wilted flowers</rdfs:label> + <rdfs:label xml:lang="nl">aantal verwelkte bloemen</rdfs:label> +<!-- <om:unofficialLabel>#wilted flowers</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#wilted flowers</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal verwelkte bloemen.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberFlowers"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberRottenFlowers"> + <rdfs:label xml:lang="en">number rotten flowers</rdfs:label> + <rdfs:label xml:lang="nl">aantal rotte bloemen</rdfs:label> +<!-- <om:unofficialLabel>#rotten flowers</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#rotten flowers</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal rotte bloemen.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberFlowers"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberDryFlowers"> + <rdfs:label xml:lang="en">number dry flowers</rdfs:label> + <rdfs:label xml:lang="nl">aantal verdroogde bloemen</rdfs:label> +<!-- <om:unofficialLabel>#dry flowers</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#dry flowers</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal verdroogde bloemen.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberFlowers"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberMalformedFlowers"> + <rdfs:label xml:lang="en">number malformed flowers</rdfs:label> + <rdfs:label xml:lang="nl">aantal misvormde bloemen</rdfs:label> +<!-- <om:unofficialLabel>#malformed flowers</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#malformed flowers</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal misvormde bloemen.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberFlowers"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberNonturgidFlowers"> + <rdfs:label xml:lang="en">number nonturgid flowers</rdfs:label> + <rdfs:label xml:lang="nl">aantal slappe bloemen</rdfs:label> +<!-- <om:unofficialLabel>#nonturgid flowers</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#nonturgid flowers</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal slappe bloemen.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberFlowers"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;CauseEndOfVaseLifeBlueFlowers"> + <rdfs:label xml:lang="en">cause end of vase life blue flowers</rdfs:label> + <rdfs:label xml:lang="nl">oorzaak einde vaasleven blauwe bloemen</rdfs:label> +<!-- <om:unofficialLabel>blue flowers</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">blue flowers</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Oorzaak einde vaasleven blauwe bloemen (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;CauseEndOfVaseLifeAbscisedFlowers"> + <rdfs:label xml:lang="en">cause end of vase life abscised flowers</rdfs:label> + <rdfs:label xml:lang="nl">oorzaak einde vaasleven bloemval</rdfs:label> +<!-- <om:unofficialLabel>abscised flowers</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">abscised flowers</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Oorzaak einde vaasleven bloemval (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;CauseEndOfVaseLifeWiltedFlowers"> + <rdfs:label xml:lang="en">cause end of vase life wilted flowers</rdfs:label> + <rdfs:label xml:lang="nl">oorzaak einde vaasleven bloemverwelking</rdfs:label> +<!-- <om:unofficialLabel>wilted flowers</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">wilted flowers</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Oorzaak einde vaasleven bloemverwelking (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;CauseEndOfVaseLifeRottenFlowers"> + <rdfs:label xml:lang="en">cause end of vase life rotten flowers</rdfs:label> + <rdfs:label xml:lang="nl">oorzaak einde vaasleven bloemrot</rdfs:label> +<!-- <om:unofficialLabel>rotten flowers</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">rotten flowers</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Oorzaak einde vaasleven bloemrot (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;CauseEndOfVaseLifeDryFlowers"> + <rdfs:label xml:lang="en">cause end of vase life dry flowers</rdfs:label> + <rdfs:label xml:lang="nl">oorzaak einde vaasleven bloemverdroging</rdfs:label> +<!-- <om:unofficialLabel>dry flowers</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">dry flowers</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Oorzaak einde vaasleven bloemverdroging (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;CauseEndOfVaseLifeMalformedFlowers"> + <rdfs:label xml:lang="en">cause end of vase life malformed flowers</rdfs:label> + <rdfs:label xml:lang="nl">oorzaak einde vaasleven misvormde bloemen</rdfs:label> +<!-- <om:unofficialLabel>malformed flowers</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">malformed flowers</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Oorzaak einde vaasleven misvormde bloemen (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;CauseEndOfVaseLifeNonturgidFlowers"> + <rdfs:label xml:lang="en">cause end of vase life nonturgid flowers</rdfs:label> + <rdfs:label xml:lang="nl">oorzaak einde vaasleven slappe bloemen</rdfs:label> +<!-- <om:unofficialLabel>nonturgid flowers</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">nonturgid flowers</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Oorzaak einde vaasleven slappe bloemen (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberLeaves"> + <rdfs:label xml:lang="en">number leaves</rdfs:label> + <rdfs:label xml:lang="nl">aantal bladeren</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Number"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;TotalNumberLeaves"> + <rdfs:label xml:lang="en">total number leaves</rdfs:label> + <rdfs:label xml:lang="nl">totaal aantal bladeren</rdfs:label> +<!-- <om:unofficialLabel>#leaves</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#leaves</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Totaal aantal bladeren.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberLeaves"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberDryLeaves"> + <rdfs:label xml:lang="en">number dry leaves</rdfs:label> + <rdfs:label xml:lang="nl">aantal verdroogde bladeren</rdfs:label> +<!-- <om:unofficialLabel>#dry leaves</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#dry leaves</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal verdroogde bladeren.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberLeaves"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberYellowLeaves"> + <rdfs:label xml:lang="en">number yellow leaves</rdfs:label> + <rdfs:label xml:lang="nl">aantal vergeelde bladeren</rdfs:label> +<!-- <om:unofficialLabel>#yellow leaves</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#yellow leaves</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal yellow bladeren.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberLeaves"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberAbscisedLeaves"> + <rdfs:label xml:lang="en">number abscised leaves</rdfs:label> + <rdfs:label xml:lang="nl">aantal gevallen bladeren</rdfs:label> +<!-- <om:unofficialLabel>#abscised leaves</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#abscised leaves</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal gevallen bladeren.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberLeaves"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberWiltedLeaves"> + <rdfs:label xml:lang="en">number wilted leaves</rdfs:label> + <rdfs:label xml:lang="nl">aantal verwelkte bladeren</rdfs:label> +<!-- <om:unofficialLabel>#wilted leaves</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#wilted leaves</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal verwelkte bladeren.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberLeaves"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberRottenLeaves"> + <rdfs:label xml:lang="en">number rotten leaves</rdfs:label> + <rdfs:label xml:lang="nl">aantal rotte bladeren</rdfs:label> +<!-- <om:unofficialLabel>#rotten leaves</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#rotten leaves</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal rotte bladeren.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberLeaves"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberNonturgidLeaves"> + <rdfs:label xml:lang="en">number nonturgid leaves</rdfs:label> + <rdfs:label xml:lang="nl">aantal slappe bladeren</rdfs:label> +<!-- <om:unofficialLabel>#nonturgid leaves</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#nonturgid leaves</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal slappe bladeren.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberLeaves"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;CauseEndOfVaseLifeDryLeaves"> + <rdfs:label xml:lang="en">cause end of vase life dry leaves</rdfs:label> + <rdfs:label xml:lang="nl">oorzaak einde vaasleven bladverdroging</rdfs:label> +<!-- <om:unofficialLabel>dry leaves</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">dry leaves</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Oorzaak einde vaasleven bladverdroging (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;CauseEndOfVaseLifeYellowLeaves"> + <rdfs:label xml:lang="en">cause end of vase life yellow leaves</rdfs:label> + <rdfs:label xml:lang="nl">oorzaak einde vaasleven bladvergeling</rdfs:label> +<!-- <om:unofficialLabel>yellow leaves</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">yellow leaves</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Oorzaak einde vaasleven bladvergeling (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;CauseEndOfVaseLifeAbscisedLeaves"> + <rdfs:label xml:lang="en">cause end of vase life abscised leaves</rdfs:label> + <rdfs:label xml:lang="nl">oorzaak einde vaasleven bladval</rdfs:label> +<!-- <om:unofficialLabel>abscised leaves</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">abscised leaves</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Oorzaak einde vaasleven bladval (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;CauseEndOfVaseLifeWiltedLeaves"> + <rdfs:label xml:lang="en">cause end of vase life wilted leaves</rdfs:label> + <rdfs:label xml:lang="nl">oorzaak einde vaasleven bladverwelking</rdfs:label> +<!-- <om:unofficialLabel>wilted leaves</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">wilted leaves</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Oorzaak einde vaasleven bladverwelking (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;CauseEndOfVaseLifeRottenLeaves"> + <rdfs:label xml:lang="en">cause end of vase life rotten leaves</rdfs:label> + <rdfs:label xml:lang="nl">oorzaak einde vaasleven rotte bladeren</rdfs:label> +<!-- <om:unofficialLabel>rotten leaves</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">rotten leaves</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Oorzaak einde vaasleven rotte bladeren (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;CauseEndOfVaseLifeNonturgidLeaves"> + <rdfs:label xml:lang="en">cause end of vase life nonturgid leaves</rdfs:label> + <rdfs:label xml:lang="nl">oorzaak einde vaasleven slappe bladeren</rdfs:label> +<!-- <om:unofficialLabel>nonturgid leaves</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">nonturgid leaves</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Oorzaak einde vaasleven slappe bladeren (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberBuds"> + <rdfs:label xml:lang="en">number buds</rdfs:label> + <rdfs:label xml:lang="nl">aantal knoppen</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Number"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;TotalNumberBuds"> + <rdfs:label xml:lang="en">total number buds</rdfs:label> + <rdfs:label xml:lang="nl">totaal aantal knoppen</rdfs:label> +<!-- <om:unofficialLabel>#buds</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#buds</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Totaal aantal knoppen.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberBuds"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberDryBuds"> + <rdfs:label xml:lang="en">number dry buds</rdfs:label> + <rdfs:label xml:lang="nl">aantal verdroogde knoppen</rdfs:label> +<!-- <om:unofficialLabel>#dry buds</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#dry buds</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal verdroogde knoppen.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberBuds"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberMalformedBuds"> + <rdfs:label xml:lang="en">number malformed buds</rdfs:label> + <rdfs:label xml:lang="nl">aantal misvormde knoppen</rdfs:label> +<!-- <om:unofficialLabel>#malformed buds</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#malformed buds</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal misvormde knoppen.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberBuds"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberAbscisedBuds"> + <rdfs:label xml:lang="en">number abscised buds</rdfs:label> + <rdfs:label xml:lang="nl">aantal gevallen knoppen</rdfs:label> +<!-- <om:unofficialLabel>#abscised buds</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">#abscised buds</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aantal gevallen knoppen.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberBuds"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;CauseEndOfVaseLifeDryBuds"> + <rdfs:label xml:lang="en">cause end of vase life dry buds</rdfs:label> + <rdfs:label xml:lang="nl">oorzaak einde vaasleven knopverdroging</rdfs:label> +<!-- <om:unofficialLabel>dry buds</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">dry buds</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Oorzaak einde vaasleven knopverdroging (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;CauseEndOfVaseLifeMalformedBuds"> + <rdfs:label xml:lang="en">cause end of vase life malformed buds</rdfs:label> + <rdfs:label xml:lang="nl">oorzaak einde vaasleven misvormde knoppen</rdfs:label> +<!-- <om:unofficialLabel>malformed buds</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">malformed buds</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Oorzaak einde vaasleven misvormde knoppen (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;CauseEndOfVaseLifeAbscisedBuds"> + <rdfs:label xml:lang="en">cause end of vase life abscised buds</rdfs:label> + <rdfs:label xml:lang="nl">oorzaak einde vaasleven knopval</rdfs:label> +<!-- <om:unofficialLabel>abscised buds</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">abscised buds</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Oorzaak einde vaasleven knopval (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;QualityMark"> + <rdfs:label xml:lang="en">quality mark</rdfs:label> + <rdfs:label xml:lang="nl">kwaliteitscijfer</rdfs:label> +<!-- <om:unofficialLabel>Qcijfer</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="nl">Qcijfer</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-10"/> + </owl:Class> + + <owl:Class rdf:about="&om;QualityMarkFlower"> + <rdfs:label xml:lang="en">quality mark flower(s)</rdfs:label> + <rdfs:label xml:lang="nl">kwaliteitscijfer bloem(en)</rdfs:label> +<!-- <om:unofficialLabel>Qcijfer flower</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="nl">Qcijfer flower</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;QualityMark"/> + <om:commonlyHasUnit rdf:resource="&om;_1-10"/> + </owl:Class> + + <owl:Class rdf:about="&om;QualityMarkLeaf"> + <rdfs:label xml:lang="en">quality mark leafs</rdfs:label> + <rdfs:label xml:lang="nl">kwaliteitscijfer bladeren</rdfs:label> +<!-- <om:unofficialLabel>Qcijfer leaf</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="nl">Qcijfer leaf</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;QualityMark"/> + <om:commonlyHasUnit rdf:resource="&om;_1-10"/> + </owl:Class> + + <owl:Class rdf:about="&om;QualityMarkTotal"> + <rdfs:label xml:lang="en">quality mark total</rdfs:label> + <rdfs:label xml:lang="nl">kwaliteitscijfer total</rdfs:label> +<!-- <om:unofficialLabel>Qcijfer total</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="nl">Qcijfer total</om:alternativeLabel> + <rdfs:subClassOf rdf:resource="&om;QualityMark"/> + <om:commonlyHasUnit rdf:resource="&om;_1-10"/> + </owl:Class> + + <om:Unit rdf:about="&om;_1-10"> + <rdfs:label xml:lang="en">1-10</rdfs:label> + <rdfs:label xml:lang="nl">1-10</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <om:Unit rdf:about="&om;_0-100"> + <rdfs:label xml:lang="en">0-100</rdfs:label> + <rdfs:label xml:lang="nl">0-100</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <owl:Class rdf:about="&om;VasePlusWaterMass"> + <rdfs:label xml:lang="en">vase plus water mass</rdfs:label> + <rdfs:label xml:lang="nl">vaas- plus watermassa</rdfs:label> +<!-- <om:unofficialLabel>vase plus water weight</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">vase plus water weight</om:alternativeLabel> +<!-- <om:unofficialLabel>weight vase</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">weight vase</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Gewicht vaas plus water.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Mass"/> + <om:commonlyHasUnit rdf:resource="&om;gram"/> + </owl:Class> + + <owl:Class rdf:about="&om;VasePlusWaterPlusFlowerMass"> + <rdfs:label xml:lang="en">vase plus water plus flower mass</rdfs:label> + <rdfs:label xml:lang="nl">vaas- plus water- plus bloemmassa</rdfs:label> +<!-- <om:unofficialLabel>vase plus water plus flower weight</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">vase plus water plus flower weight</om:alternativeLabel> +<!-- <om:unofficialLabel>weight flo and vase</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">weight flo and vase</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Gewicht vaas plus water plus bloem (= steel plus blad plus bloem).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Mass"/> + <om:commonlyHasUnit rdf:resource="&om;gram"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberColor"> + <rdfs:label xml:lang="en">number color</rdfs:label> + <rdfs:label xml:lang="nl">aantal kleur</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Number"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberColor1"> + <rdfs:label xml:lang="en">number color 1</rdfs:label> + <rdfs:label xml:lang="nl">aantal kleur 1</rdfs:label> +<!-- <om:unofficialLabel>color_1</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">color_1</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 1 poster (vrijwel) geheel groen.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberColor2"> + <rdfs:label xml:lang="en">number color 2</rdfs:label> + <rdfs:label xml:lang="nl">aantal kleur 2</rdfs:label> +<!-- <om:unofficialLabel>color_2</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">color_2</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 2 poster meer groen dan donker.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberColor3"> + <rdfs:label xml:lang="en">number color 3</rdfs:label> + <rdfs:label xml:lang="nl">aantal kleur 3</rdfs:label> +<!-- <om:unofficialLabel>color_3</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">color_3</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 3 poster 50% groen.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberColor4"> + <rdfs:label xml:lang="en">number color 4</rdfs:label> + <rdfs:label xml:lang="nl">aantal kleur 4</rdfs:label> +<!-- <om:unofficialLabel>color_4</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">color_4</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 4 poster meer donker dan groen.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberColor5"> + <rdfs:label xml:lang="en">number color 5</rdfs:label> + <rdfs:label xml:lang="nl">aantal kleur 5</rdfs:label> +<!-- <om:unofficialLabel>color_5</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">color_5</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 5 poster (vrijwel) geheel donker.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;ColorAreaFraction"> + <rdfs:label xml:lang="en">color area fraction</rdfs:label> + <rdfs:label xml:lang="nl">kleuroppervlaktefractie</rdfs:label> +<!-- <om:unofficialLabel>color%</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">color%</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: percentage oppervlak donker.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;AreaFraction"/> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberExternalBrowning"> + <rdfs:label xml:lang="en">number external browning</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Number"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberExternalBrowning1"> + <rdfs:label xml:lang="en">number external browning 1</rdfs:label> +<!-- <om:unofficialLabel>ext_brown_1</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">ext_brown_1</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 1 poster.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberExternalBrowning2"> + <rdfs:label xml:lang="en">number external browning 2</rdfs:label> +<!-- <om:unofficialLabel>ext_brown_2</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">ext_brown_2</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 2 poster.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberExternalBrowning3"> + <rdfs:label xml:lang="en">number external browning 3</rdfs:label> +<!-- <om:unofficialLabel>ext_brown_3</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">ext_brown_3</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 3 poster.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberExternalBrowning4"> + <rdfs:label xml:lang="en">number external browning 4</rdfs:label> +<!-- <om:unofficialLabel>ext_brown_4</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">ext_brown_4</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 4 poster.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberExternalBrowning5"> + <rdfs:label xml:lang="en">number external browning 5</rdfs:label> +<!-- <om:unofficialLabel>ext_brown_5</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">ext_brown_5</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 5 poster.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;ExternalBrowning"> + <rdfs:label xml:lang="en">external browning</rdfs:label> +<!-- <om:unofficialLabel>ext_brown</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">ext_brown</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: poster (code).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-5"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberVascularBrowning"> + <rdfs:label xml:lang="en">number vascular browning</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Number"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberVascularBrowning1"> + <rdfs:label xml:lang="en">number vascular browning 1</rdfs:label> +<!-- <om:unofficialLabel>vascular_1</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">vascular_1</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 1 poster vascular browning.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberVascularBrowning2"> + <rdfs:label xml:lang="en">number vascular browning 2</rdfs:label> +<!-- <om:unofficialLabel>vascular_2</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">vascular_2</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 2 poster vascular browning.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberVascularBrowning3"> + <rdfs:label xml:lang="en">number vascular browning 3</rdfs:label> +<!-- <om:unofficialLabel>vascular_3</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">vascular_3</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 3 poster vascular browning.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberVascularBrowning4"> + <rdfs:label xml:lang="en">number vascular browning 4</rdfs:label> +<!-- <om:unofficialLabel>vascular_4</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">vascular_4</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 4 poster vascular browning.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberVascularBrowning5"> + <rdfs:label xml:lang="en">number vascular browning 5</rdfs:label> +<!-- <om:unofficialLabel>vascular_5</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">vascular_5</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 5 poster vascular browning.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;VascularBrowning"> + <rdfs:label xml:lang="en">vascular browning</rdfs:label> +<!-- <om:unofficialLabel>vascular</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">vascular</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: poster (code).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-5"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberPulpBrowning"> + <rdfs:label xml:lang="en">number pulp browning</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Number"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberPulpBrowning1"> + <rdfs:label xml:lang="en">number pulp browning 1</rdfs:label> +<!-- <om:unofficialLabel>pulp_1</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">pulp_1</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 1 poster pulp browning.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberPulpBrowning2"> + <rdfs:label xml:lang="en">number pulp browning 2</rdfs:label> +<!-- <om:unofficialLabel>pulp_2</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">pulp_2</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 2 poster pulp browning.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberPulpBrowning3"> + <rdfs:label xml:lang="en">number pulp browning 3</rdfs:label> +<!-- <om:unofficialLabel>pulp_3</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">pulp_3</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 3 poster pulp browning.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberPulpBrowning4"> + <rdfs:label xml:lang="en">number pulp browning 4</rdfs:label> +<!-- <om:unofficialLabel>pulp_4</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">pulp_4</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 4 poster pulp browning.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberPulpBrowning5"> + <rdfs:label xml:lang="en">number pulp browning 5</rdfs:label> +<!-- <om:unofficialLabel>pulp_5</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">pulp_5</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: code 5 poster pulp browning.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberColor"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;PulpBrowning"> + <rdfs:label xml:lang="en">pulp browning</rdfs:label> +<!-- <om:unofficialLabel>pulp</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">pulp</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Voorbeeld avocado Hass: poster (code).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-5"/> + </owl:Class> + + <owl:Class rdf:about="&om;StemEndRot"> + <rdfs:label xml:lang="en">stem end rot</rdfs:label> +<!-- <om:unofficialLabel>stemendrot</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">stemendrot</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Aanwezigheid stem end rot (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;StemEndRotAreaFraction"> + <rdfs:label xml:lang="en">stem end rot area fraction</rdfs:label> + <rdfs:label xml:lang="nl">stem-end-rot-oppervlaktefractie</rdfs:label> +<!-- <om:unofficialLabel>stemendrot%</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">stemendrot%</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Percentage van het oppervlak stem end rot.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;AreaFraction"/> + <om:commonlyHasUnit rdf:resource="&om;percent"/> + </owl:Class> + + <owl:Class rdf:about="&om;StickStone"> + <rdfs:label xml:lang="en">stick stone</rdfs:label> +<!-- <om:unofficialLabel>stickstone</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">stickstone</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Kleefpit of niet (1/0).</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_1-0"/> + </owl:Class> + + <owl:Class rdf:about="&om;AcousticFirmness"> + <rdfs:label xml:lang="en">acoustic firmness</rdfs:label> + <rdfs:label xml:lang="nl">akoestische stevigheid</rdfs:label> +<!-- <om:unofficialLabel>firmness_ac</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">firmness_ac</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Stevigheid gemeten met AWETA (acoustic firmness value). AFS value.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;AFS"/> + </owl:Class> + + <om:Unit rdf:about="&om;AFS"> + <rdfs:label xml:lang="en">AFS</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <owl:Class rdf:about="&om;Firmness-Penetrometer-Method1"> + <rdfs:label xml:lang="en">firmness (penetrometer) (method 1)</rdfs:label> + <rdfs:label xml:lang="nl">stevigheid (penetrometer) (methode 1)</rdfs:label> +<!-- <om:unofficialLabel>firmness_pen_1</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">firmness_pen_1</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Stevigheid gemeten met penetrometer methode 1.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;kilogramPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;Firmness-Penetrometer-Method2"> + <rdfs:label xml:lang="en">firmness (penetrometer) (method 2)</rdfs:label> + <rdfs:label xml:lang="nl">stevigheid (penetrometer) (methode 2)</rdfs:label> +<!-- <om:unofficialLabel>firmness_pen_2</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">firmness_pen_2</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Stevigheid gemeten met penetrometer methode 2.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;kilogramPerSquareMetre"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberManualFirmness"> + <rdfs:label xml:lang="en">number manual firmness</rdfs:label> + <rdfs:label xml:lang="nl">aantal manuele stevigheid</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Number"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberManualFirmness0"> + <rdfs:label xml:lang="en">number manual firmness 0</rdfs:label> + <rdfs:label xml:lang="nl">aantal manuele stevigheid 0</rdfs:label> +<!-- <om:unofficialLabel>firmness_m_0</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">firmness_m_0</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Firmness manueel: 0 = steenhard.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberManualFirmness"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberManualFirmness0.5"> + <rdfs:label xml:lang="en">number manual firmness 0.5</rdfs:label> + <rdfs:label xml:lang="nl">aantal manuele stevigheid 0.5</rdfs:label> +<!-- <om:unofficialLabel>firmness_m_0.5</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">firmness_m_0.5</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Firmness manueel: 0.5 = hard.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberManualFirmness"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberManualFirmness1"> + <rdfs:label xml:lang="en">number manual firmness 1</rdfs:label> + <rdfs:label xml:lang="nl">aantal manuele stevigheid 1</rdfs:label> +<!-- <om:unofficialLabel>firmness_m_1</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">firmness_m_1</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Firmness manueel: 1 = zeer stevig.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberManualFirmness"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberManualFirmness1.5"> + <rdfs:label xml:lang="en">number manual firmness 1.5</rdfs:label> + <rdfs:label xml:lang="nl">aantal manuele stevigheid 1.5</rdfs:label> +<!-- <om:unofficialLabel>firmness_m_1.5</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">firmness_m_1.5</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Firmness manueel: 1.5 = stevig.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberManualFirmness"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberManualFirmness2"> + <rdfs:label xml:lang="en">number manual firmness 2</rdfs:label> + <rdfs:label xml:lang="nl">aantal manuele stevigheid 2</rdfs:label> +<!-- <om:unofficialLabel>firmness_m_2</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">firmness_m_2</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Firmness manueel: 2 = halfzacht.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberManualFirmness"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberManualFirmness2.5"> + <rdfs:label xml:lang="en">number manual firmness 2.5</rdfs:label> + <rdfs:label xml:lang="nl">aantal manuele stevigheid 2.5</rdfs:label> +<!-- <om:unofficialLabel>firmness_m_2.5</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">firmness_m_2.5</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Firmness manueel: 2.5 = eetrijp.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberManualFirmness"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberManualFirmness3"> + <rdfs:label xml:lang="en">number manual firmness 3</rdfs:label> + <rdfs:label xml:lang="nl">aantal manuele stevigheid 3</rdfs:label> +<!-- <om:unofficialLabel>firmness_m_3</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">firmness_m_3</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Firmness manueel: 3 = zacht.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberManualFirmness"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberManualFirmness3.5"> + <rdfs:label xml:lang="en">number manual firmness 3.5</rdfs:label> + <rdfs:label xml:lang="nl">aantal manuele stevigheid 3.5</rdfs:label> +<!-- <om:unofficialLabel>firmness_m_3.5</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">firmness_m_3.5</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Firmness manueel: 3.5 = te zacht.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberManualFirmness"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberManualFirmness4"> + <rdfs:label xml:lang="en">number manual firmness 4</rdfs:label> + <rdfs:label xml:lang="nl">aantal manuele stevigheid 4</rdfs:label> +<!-- <om:unofficialLabel>firmness_m_4</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">firmness_m_4</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Firmness manueel: 4 = week.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberManualFirmness"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberManualFirmness4.5"> + <rdfs:label xml:lang="en">number manual firmness 4.5</rdfs:label> + <rdfs:label xml:lang="nl">aantal manuele stevigheid 4.5</rdfs:label> +<!-- <om:unofficialLabel>firmness_m_4.5</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">firmness_m_4.5</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Firmness manueel: 4.5 = vies.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberManualFirmness"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;NumberManualFirmness5"> + <rdfs:label xml:lang="en">number manual firmness 5</rdfs:label> + <rdfs:label xml:lang="nl">aantal manuele stevigheid 5</rdfs:label> +<!-- <om:unofficialLabel>firmness_m_5</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">firmness_m_5</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Firmness manueel: 5 = zeer vies.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;NumberManualFirmness"/> + <om:commonlyHasUnit rdf:resource="&om;one"/> + </owl:Class> + + <owl:Class rdf:about="&om;ManualFirmness"> + <rdfs:label xml:lang="en">manual firmness</rdfs:label> + <rdfs:label xml:lang="nl">manuele stevigheid</rdfs:label> +<!-- <om:unofficialLabel>firmness_m</om:unofficialLabel> --> + <om:alternativeLabel xml:lang="en">firmness_m</om:alternativeLabel> + <rdfs:comment xml:lang="nl">Firmness manueel: code 0 - 5.</rdfs:comment> + <rdfs:subClassOf rdf:resource="&om;Quantity"/> + <om:commonlyHasUnit rdf:resource="&om;_0-5"/> + </owl:Class> + + <om:Unit rdf:about="&om;_0-5"> + <rdfs:label xml:lang="en">0-5</rdfs:label> + <rdfs:label xml:lang="nl">0-5</rdfs:label> + <rdf:type rdf:resource="&om;SingularUnit"/> + <om:hasDimension rdf:resource="&om;dimensionOne"/> + </om:Unit> + + <!-- Dynamics of Texture and Taste Ontology --> + + <owl:Class rdf:about="&om;xRange"> + <rdfs:label xml:lang="en">x range</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Length"/> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;yRange"> + <rdfs:label xml:lang="en">y range</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Length"/> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;zRange"> + <rdfs:label xml:lang="en">z range</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Length"/> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;Total3DStartEndDistance"> + <rdfs:label xml:lang="en">total 3D start-end distance</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Distance"/> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;xy2DStartEndDistance"> + <rdfs:label xml:lang="en">xy 2D start-end distance</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Distance"/> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;TotalDistanceTravelled"> + <rdfs:label xml:lang="en">total distance travelled</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Distance"/> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <owl:Class rdf:about="&om;xyDistanceTravelled"> + <rdfs:label xml:lang="en">xy distance travelled</rdfs:label> + <rdfs:subClassOf rdf:resource="&om;Distance"/> + <om:commonlyHasUnit rdf:resource="&om;metre"/> + <om:commonlyHasUnit rdf:resource="&om;attometre"/> + <om:commonlyHasUnit rdf:resource="&om;centimetre"/> + <om:commonlyHasUnit rdf:resource="&om;decametre"/> + <om:commonlyHasUnit rdf:resource="&om;decimetre"/> + <om:commonlyHasUnit rdf:resource="&om;exametre"/> + <om:commonlyHasUnit rdf:resource="&om;femtometre"/> + <om:commonlyHasUnit rdf:resource="&om;gigametre"/> + <om:commonlyHasUnit rdf:resource="&om;hectometre"/> + <om:commonlyHasUnit rdf:resource="&om;kilometre"/> + <om:commonlyHasUnit rdf:resource="&om;megametre"/> + <om:commonlyHasUnit rdf:resource="&om;micrometre"/> + <om:commonlyHasUnit rdf:resource="&om;millimetre"/> + <om:commonlyHasUnit rdf:resource="&om;nanometre"/> + <om:commonlyHasUnit rdf:resource="&om;petametre"/> + <om:commonlyHasUnit rdf:resource="&om;picometre"/> + <om:commonlyHasUnit rdf:resource="&om;terametre"/> + <om:commonlyHasUnit rdf:resource="&om;angstrom"/> + <om:commonlyHasUnit rdf:resource="&om;astronomicalUnit"/> + <om:commonlyHasUnit rdf:resource="&om;chain"/> + <om:commonlyHasUnit rdf:resource="&om;cicero"/> + <om:commonlyHasUnit rdf:resource="&om;fathom-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;fermi"/> + <om:commonlyHasUnit rdf:resource="&om;foot-International"/> + <om:commonlyHasUnit rdf:resource="&om;foot-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;furlong-International"/> + <om:commonlyHasUnit rdf:resource="&om;inch-International"/> + <om:commonlyHasUnit rdf:resource="&om;lightYear"/> + <om:commonlyHasUnit rdf:resource="&om;micron"/> + <om:commonlyHasUnit rdf:resource="&om;mil-Length"/> + <om:commonlyHasUnit rdf:resource="&om;mile-USSurvey"/> + <om:commonlyHasUnit rdf:resource="&om;nauticalMile-International"/> + <om:commonlyHasUnit rdf:resource="&om;parsec"/> + <om:commonlyHasUnit rdf:resource="&om;pica-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;pica-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;pica-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;point-ATA"/> + <om:commonlyHasUnit rdf:resource="&om;point-Didot"/> + <om:commonlyHasUnit rdf:resource="&om;point-Postscript"/> + <om:commonlyHasUnit rdf:resource="&om;point-TeX"/> + <om:commonlyHasUnit rdf:resource="&om;rod-US"/> + <om:commonlyHasUnit rdf:resource="&om;mile-Statute"/> + <om:commonlyHasUnit rdf:resource="&om;yard-International"/> + <om:commonlyHasUnit rdf:resource="&om;megaparsec"/> + </owl:Class> + + <!-- Packaging Recycling Ontology --> + + <owl:Class rdf:about="&om;BodyMass"> + <rdfs:label xml:lang="en">body mass</rdfs:label> + <om:unofficialLabel>body weight</om:unofficialLabel> + <rdfs:subClassOf rdf:resource="&om;Mass"/> + <om:commonlyHasUnit rdf:resource="&om;gram"/> + <om:commonlyHasUnit rdf:resource="&om;kilogram"/> + <om:commonlyHasUnit rdf:resource="&om;tonne"/> + </owl:Class> + + <owl:Class rdf:about="&om;CapMass"> + <rdfs:label xml:lang="en">cap mass</rdfs:label> + <om:unofficialLabel>cap weight</om:unofficialLabel> + <rdfs:subClassOf rdf:resource="&om;Mass"/> + <om:commonlyHasUnit rdf:resource="&om;gram"/> + <om:commonlyHasUnit rdf:resource="&om;kilogram"/> + <om:commonlyHasUnit rdf:resource="&om;tonne"/> + </owl:Class> + + <owl:Class rdf:about="&om;CartonMass"> + <rdfs:label xml:lang="en">carton mass</rdfs:label> + <om:unofficialLabel>carton weight</om:unofficialLabel> + <rdfs:subClassOf rdf:resource="&om;Mass"/> + <om:commonlyHasUnit rdf:resource="&om;gram"/> + <om:commonlyHasUnit rdf:resource="&om;kilogram"/> + <om:commonlyHasUnit rdf:resource="&om;tonne"/> + </owl:Class> + + <owl:Class rdf:about="&om;DryMass"> + <rdfs:label xml:lang="en">dry mass</rdfs:label> + <om:unofficialLabel>dry weight</om:unofficialLabel> + <rdfs:subClassOf rdf:resource="&om;Mass"/> + <om:commonlyHasUnit rdf:resource="&om;gram"/> + <om:commonlyHasUnit rdf:resource="&om;kilogram"/> + <om:commonlyHasUnit rdf:resource="&om;tonne"/> + </owl:Class> + + <owl:Class rdf:about="&om;DryBodyMass"> + <rdfs:label xml:lang="en">dry body mass</rdfs:label> + <om:unofficialLabel>dry body weight</om:unofficialLabel> + <rdfs:subClassOf rdf:resource="&om;DryMass"/> + <om:commonlyHasUnit rdf:resource="&om;gram"/> + <om:commonlyHasUnit rdf:resource="&om;kilogram"/> + <om:commonlyHasUnit rdf:resource="&om;tonne"/> + </owl:Class> + + <owl:Class rdf:about="&om;FlowpackMass"> + <rdfs:label xml:lang="en">flowpack mass</rdfs:label> + <om:unofficialLabel>flowpack weight</om:unofficialLabel> + <rdfs:subClassOf rdf:resource="&om;Mass"/> + <om:commonlyHasUnit rdf:resource="&om;gram"/> + <om:commonlyHasUnit rdf:resource="&om;kilogram"/> + <om:commonlyHasUnit rdf:resource="&om;tonne"/> + </owl:Class> + + <owl:Class rdf:about="&om;LabelMass"> + <rdfs:label xml:lang="en">label mass</rdfs:label> + <om:unofficialLabel>label weight</om:unofficialLabel> + <rdfs:subClassOf rdf:resource="&om;Mass"/> + <om:commonlyHasUnit rdf:resource="&om;gram"/> + <om:commonlyHasUnit rdf:resource="&om;kilogram"/> + <om:commonlyHasUnit rdf:resource="&om;tonne"/> + </owl:Class> + + <owl:Class rdf:about="&om;BodyLabelMass"> + <rdfs:label xml:lang="en">body label mass</rdfs:label> + <om:unofficialLabel>body label weight</om:unofficialLabel> + <rdfs:subClassOf rdf:resource="&om;LabelMass"/> + <om:commonlyHasUnit rdf:resource="&om;gram"/> + <om:commonlyHasUnit rdf:resource="&om;kilogram"/> + <om:commonlyHasUnit rdf:resource="&om;tonne"/> + </owl:Class> + + <owl:Class rdf:about="&om;NeckRingMass"> + <rdfs:label xml:lang="en">neck ring mass</rdfs:label> + <om:unofficialLabel>neck ring weight</om:unofficialLabel> + <rdfs:subClassOf rdf:resource="&om;Mass"/> + <om:commonlyHasUnit rdf:resource="&om;gram"/> + <om:commonlyHasUnit rdf:resource="&om;kilogram"/> + <om:commonlyHasUnit rdf:resource="&om;tonne"/> + </owl:Class> + + <owl:Class rdf:about="&om;StrawMass"> + <rdfs:label xml:lang="en">straw mass</rdfs:label> + <om:unofficialLabel>straw weight</om:unofficialLabel> + <rdfs:subClassOf rdf:resource="&om;Mass"/> + <om:commonlyHasUnit rdf:resource="&om;gram"/> + <om:commonlyHasUnit rdf:resource="&om;kilogram"/> + <om:commonlyHasUnit rdf:resource="&om;tonne"/> + </owl:Class> + + <owl:Class rdf:about="&om;TopMass"> + <rdfs:label xml:lang="en">top mass</rdfs:label> + <om:unofficialLabel>top weight</om:unofficialLabel> + <rdfs:subClassOf rdf:resource="&om;Mass"/> + <om:commonlyHasUnit rdf:resource="&om;gram"/> + <om:commonlyHasUnit rdf:resource="&om;kilogram"/> + <om:commonlyHasUnit rdf:resource="&om;tonne"/> + </owl:Class> + + <!-- Common Application Area Ontology --> + + <om:ApplicationArea rdf:about="&om;commonApplicationArea"> + <rdfs:label xml:lang="en">common application area</rdfs:label> + <rdfs:label xml:lang="nl">algemeen toepassingsgebied</rdfs:label> + <om:usesQuantity rdf:resource="&om;Length"/> + <om:usesQuantity rdf:resource="&om;Mass"/> + <om:usesQuantity rdf:resource="&om;Time"/> + <om:usesQuantity rdf:resource="&om;Temperature"/> + <om:usesQuantity rdf:resource="&om;Area"/> + <om:usesQuantity rdf:resource="&om;Volume"/> + <om:usesQuantity rdf:resource="&om;Speed"/> + <om:usesQuantity rdf:resource="&om;Frequency"/> + <om:usesQuantity rdf:resource="&om;Energy"/> + <om:usesQuantity rdf:resource="&om;Power"/> + <om:usesQuantity rdf:resource="&om;Force"/> + <om:usesQuantity rdf:resource="&om;ElectricCurrent"/> + <om:usesQuantity rdf:resource="&om;ElectricPotential"/> + <om:usesQuantity rdf:resource="&om;MassFraction"/> + <om:usesQuantity rdf:resource="&om;Density"/> + <om:usesUnit rdf:resource="&om;metre"/> + <om:usesUnit rdf:resource="&om;kilometre"/> + <om:usesUnit rdf:resource="&om;centimetre"/> + <om:usesUnit rdf:resource="&om;millimetre"/> + <om:usesUnit rdf:resource="&om;inch-International"/> + <om:usesUnit rdf:resource="&om;foot-International"/> + <om:usesUnit rdf:resource="&om;mile-Statute"/> + <om:usesUnit rdf:resource="&om;yard-International"/> + <om:usesUnit rdf:resource="&om;kilogram"/> + <om:usesUnit rdf:resource="&om;gram"/> + <om:usesUnit rdf:resource="&om;milligram"/> + <om:usesUnit rdf:resource="&om;poundAvoirdupois"/> + <om:usesUnit rdf:resource="&om;ounceAvoirdupois"/> + <om:usesUnit rdf:resource="&om;second-Time"/> + <om:usesUnit rdf:resource="&om;millisecond-Time"/> + <om:usesUnit rdf:resource="&om;minute-Time"/> + <om:usesUnit rdf:resource="&om;hour"/> + <om:usesUnit rdf:resource="&om;day"/> + <om:usesUnit rdf:resource="&om;week"/> + <om:usesUnit rdf:resource="&om;month"/> + <om:usesUnit rdf:resource="&om;year"/> + <om:usesUnit rdf:resource="&om;kelvin"/> + <om:usesUnit rdf:resource="&om;degreeCelsius"/> + <om:usesUnit rdf:resource="&om;degreeFahrenheit"/> + <om:usesUnit rdf:resource="&om;squareMetre"/> + <om:usesUnit rdf:resource="&om;squareCentimetre"/> + <om:usesUnit rdf:resource="&om;squareKilometre"/> + <om:usesUnit rdf:resource="&om;are"/> + <om:usesUnit rdf:resource="&om;hectare"/> + <om:usesUnit rdf:resource="&om;acre-International"/> + <om:usesUnit rdf:resource="&om;acre-USSurvey"/> + <om:usesUnit rdf:resource="&om;cubicMetre"/> + <om:usesUnit rdf:resource="&om;cubicCentimetre"/> + <om:usesUnit rdf:resource="&om;litre"/> + <om:usesUnit rdf:resource="&om;decilitre"/> + <om:usesUnit rdf:resource="&om;centilitre"/> + <om:usesUnit rdf:resource="&om;millilitre"/> + <om:usesUnit rdf:resource="&om;pint-Imperial"/> + <om:usesUnit rdf:resource="&om;liquidPint-US"/> + <om:usesUnit rdf:resource="&om;gallon-Imperial"/> + <om:usesUnit rdf:resource="&om;gallon-US"/> + <om:usesUnit rdf:resource="&om;metrePerSecond-Time"/> + <om:usesUnit rdf:resource="&om;kilometrePerHour"/> + <om:usesUnit rdf:resource="&om;mile-StatutePerHour"/> + <om:usesUnit rdf:resource="&om;hertz"/> + <om:usesUnit rdf:resource="&om;kilohertz"/> + <om:usesUnit rdf:resource="&om;megahertz"/> + <om:usesUnit rdf:resource="&om;joule"/> + <om:usesUnit rdf:resource="&om;kilojoule"/> + <om:usesUnit rdf:resource="&om;kilocalorie-Mean"/> + <om:usesUnit rdf:resource="&om;kilowattHour"/> + <om:usesUnit rdf:resource="&om;watt"/> + <om:usesUnit rdf:resource="&om;milliwatt"/> + <om:usesUnit rdf:resource="&om;kilowatt"/> + <om:usesUnit rdf:resource="&om;megawatt"/> + <om:usesUnit rdf:resource="&om;newton"/> + <om:usesUnit rdf:resource="&om;kilonewton"/> + <om:usesUnit rdf:resource="&om;pound-Force"/> + <om:usesUnit rdf:resource="&om;ampere"/> + <om:usesUnit rdf:resource="&om;milliampere"/> + <om:usesUnit rdf:resource="&om;volt"/> + <om:usesUnit rdf:resource="&om;millivolt"/> + <om:usesUnit rdf:resource="&om;gramPerKilogram"/> + <om:usesUnit rdf:resource="&om;percent"/> + <om:usesUnit rdf:resource="&om;gramPerLitre"/> + <om:usesUnit rdf:resource="&om;milligramPerLitre"/> + </om:ApplicationArea> + + <!-- Bibliography --> + + <!-- Contents --> + + <!-- Semantic Support of Quantitative Research by Hajo Rijgersberg --> + <!-- Astronomical Algorithms by Jean Meeus --> + <!-- Explanatory Supplement to the Astronomical Almanac --> + <!-- Astrophysical Techniques --> + <!-- Introduction to Astronomical Photometry --> + + + <!-- IAU 2012 Resolution --> + + + <!-- Two-dimensional spectral classification of F stars through photoelectric photometry with interference filters --> + + + <!-- Two-dimensional spectral classification by narrow-band photometry for B stars in clusters and associations --> + + + <owl:ObjectProperty rdf:about="&ombibo;reference"> + <rdfs:label xml:lang="en">reference</rdfs:label> + <rdfs:domain rdf:resource="&bibo;Document"/> + <rdf:type rdf:resource="&owl;FunctionalProperty"/> + </owl:ObjectProperty> + + <!-- Semantic Support of Quantitative Research by Hajo Rijgersberg --> + + <foaf:Person rdf:about="&ombibo;Hajo_Rijgersberg"> + <foaf:name>Hajo Rijgersberg</foaf:name> + </foaf:Person> + + <foaf:Organization rdf:about="&ombibo;VU"> + + <foaf:name>Vrije Universiteit</foaf:name> + + <foaf:based_near>Amsterdam, The Netherlands</foaf:based_near> + + </foaf:Organization> + + <bibo:Thesis rdf:about="http://www.openisbn.com/isbn/9789462280618/"> + <dc:title>Semantic Support of Quantitative Research</dc:title> + <dc:date>2013</dc:date> + <dc:creator rdf:resource="&ombibo;Hajo_Rijgersberg"/> + + <bibo:issuer rdf:resource="&ombibo;VU"/> + + <bibo:degree rdf:resource="http://purl.org/bibo/degrees/phd"/> + + <bibo:uri>http://www.openisbn.com/isbn/9789462280618/</bibo:uri> + + <bibo:isbn13>978-94-6228-061-8</bibo:isbn13> + </bibo:Thesis> + + + <!-- Astronomical Algorithms by Jean Meeus --> + + <foaf:Person rdf:about="&ombibo;Jean_Meeus"> + <foaf:name>Jean Meeus</foaf:name> + </foaf:Person> + + <foaf:Organization rdf:about="&ombibo;Willmann_Bell"> + <foaf:name>Willmann-Bell Inc.</foaf:name> + </foaf:Organization> + + <bibo:Book rdf:about="urn:isbn:0943396611"> + <dc:title>Astronomical Algorithms</dc:title> + <dc:date>1998</dc:date> + <dc:creator rdf:resource="&ombibo;Jean_Meeus"/> + <dc:publisher rdf:resource="&ombibo;Willmann_Bell"/> + <bibo:edition>2</bibo:edition> + <dc:subject>Astronomy - Data processing</dc:subject> + <dc:subject>Astronomy - Problems, exercises</dc:subject> + <dc:subject>Algorithms</dc:subject> + + <bibo:isbn10>0943396611</bibo:isbn10> + + <bibo:uri>http://www.willbell.com/math/mc1.htm</bibo:uri> + </bibo:Book> + + <bibo:Chapter rdf:about="&ombibo;chapter13_Astronomical_Algorithms"> + <dc:title>Transformation of Coordinates</dc:title> + <bibo:chapter>13</bibo:chapter> + <bibo:pageStart>92</bibo:pageStart> + <bibo:pageEnd>96</bibo:pageEnd> + <bibo:reproducedIn rdf:resource="urn:isbn:0943396611"/> + </bibo:Chapter> + + <bibo:Chapter rdf:about="&ombibo;chapter23_Astronomical_Algorithms"> + <dc:title>Apparent place of a star</dc:title> + <bibo:chapter>23</bibo:chapter> + <bibo:pageStart>149</bibo:pageStart> + <bibo:pageEnd>158</bibo:pageEnd> + <bibo:reproducedIn rdf:resource="urn:isbn:0943396611"/> + </bibo:Chapter> + + <!-- Explanatory Supplement to the Astronomical Almanac --> + + <foaf:Person rdf:about="&ombibo;Kenneth_Siedelmann"> + <foaf:name>Kenneth Siedelmann</foaf:name> + </foaf:Person> + + <foaf:Organization rdf:about="&ombibo;University_Science_Books"> + <foaf:name>University Science Books</foaf:name> + <foaf:based_near>Sausalito, California</foaf:based_near> + </foaf:Organization> + + <bibo:Book rdf:about="http://www.openisbn.com/isbn/1891389459/"> + <dc:title>Explanatory Supplement to the Astronomical Almanac</dc:title> + <dc:date>1992</dc:date> + <dc:creator rdf:resource="&ombibo;Kenneth_Siedelmann"/> + <dc:publisher rdf:resource="&ombibo;University_Science_Books"/> + + <bibo:uri>http://www.openisbn.com/isbn/1891389459/</bibo:uri> + + <bibo:isbn10>1891389459</bibo:isbn10> + </bibo:Book> + + <bibo:BookSection rdf:about="&ombibo;Glossary_Astronomical_Almanac"> + <dc:title>Glossary</dc:title> + <bibo:pageStart>721</bibo:pageStart> + <bibo:pageEnd>739</bibo:pageEnd> + <bibo:reproducedIn rdf:resource="http://www.openisbn.com/isbn/1891389459/"/> + </bibo:BookSection> + + <!-- Astrophysical Techniques --> + + <foaf:Person rdf:about="&ombibo;CR_Kitchin"> + <foaf:name>C.R. Kitchin</foaf:name> + </foaf:Person> + + <foaf:Organization rdf:about="&ombibo;Institute_of_Physics_Publishing"> + <foaf:name>Institute of Physics Publishing</foaf:name> + <foaf:based_near>Bristol, UK</foaf:based_near> + </foaf:Organization> + + <bibo:Book rdf:about="&ombibo;Astrophysical_Techniques"> + <dc:title>Astrophysical Techniques</dc:title> + <dc:date>2003</dc:date> + <bibo:edition>5</bibo:edition> + <dc:creator rdf:resource="&ombibo;CR_Kitchin"/> + <dc:publisher rdf:resource="&ombibo;Institute_of_Physics_Publishing"/> + + <bibo:uri>http://www.crcpress.com/product/isbn/9781466511156</bibo:uri> + + <bibo:isbn13>9781466511156</bibo:isbn13> + </bibo:Book> + + <bibo:Chapter rdf:about="&ombibo;Astrophysical_Techniques_chapter1"> + <dc:title>Detectors</dc:title> + <bibo:chapter>1</bibo:chapter> + <bibo:pageStart>1</bibo:pageStart> + <bibo:pageEnd>185</bibo:pageEnd> + <bibo:reproducedIn rdf:resource="&ombibo;Astrophysical_Techniques"/> + </bibo:Chapter> + + + + <bibo:Chapter rdf:about="&ombibo;Astrophysical_Techniques_chapter3"> + + <dc:title>Photometry</dc:title> + + <bibo:chapter>3</bibo:chapter> + + <bibo:pageStart>329</bibo:pageStart> + + <bibo:pageEnd>365</bibo:pageEnd> + + <bibo:reproducedIn rdf:resource="&ombibo;Astrophysical_Techniques"/> + + </bibo:Chapter> + + + + <!-- Introduction to Astronomical Photometry --> + + + + <foaf:Person rdf:about="&ombibo;Edwin_Budding"> + + <foaf:name>Edwin Budding</foaf:name> + + </foaf:Person> + + + <foaf:Person rdf:about="&ombibo;Osman_Demircan"> + + <foaf:name>Osman Demircan</foaf:name> + + </foaf:Person> + + + + <foaf:Organization rdf:about="&ombibo;Cambridge_University_Press"> + + <foaf:name>Cambridge University Press</foaf:name> + + <foaf:based_near>Cambridge, UK</foaf:based_near> + + </foaf:Organization> + + + + <bibo:Book rdf:about="&ombibo;IntroAstronomicalPhotometry"> + + <dc:title>Introduction to Astronomical Photometry</dc:title> + + <dc:date>2007</dc:date> + + <bibo:edition>2</bibo:edition> + + <dc:creator rdf:resource="&ombibo;Edwin_Budding"/> + + <dc:creator rdf:resource="&ombibo;Osman_Demircan"/> + + <bibo:authorList rdf:parseType="Collection"> + <rdf:Description rdf:about="&ombibo;Edwin_Budding"/> + <rdf:Description rdf:about="&ombibo;Osman_Demircan"/> + </bibo:authorList> + + <dc:publisher rdf:resource="&ombibo;Cambridge_University_Press"/> + + <bibo:uri>http://ebooks.cambridge.org/ebook.jsf?bid=CBO9780511536175</bibo:uri> + + <bibo:isbn13>9780521847117</bibo:isbn13> + + </bibo:Book> + + + + <bibo:Chapter rdf:about="&ombibo;IntroAstronomicalPhotometry_chapter_2"> + + <dc:title>Introduction</dc:title> + + <bibo:chapter>2</bibo:chapter> + + <bibo:pageStart>11</bibo:pageStart> + + <bibo:pageEnd>38</bibo:pageEnd> + + <bibo:reproducedIn rdf:resource="&ombibo;IntroAstronomicalPhotometry"/> + + </bibo:Chapter> + + + + <!-- IAU 2012 Resolution --> + + + + <foaf:Organization rdf:about="&ombibo;IAUDiv1WG"> + + <foaf:name>IAU Division I Working Group Numerical Standards</foaf:name> + + </foaf:Organization> + + <foaf:Organization rdf:about="&ombibo;International_Astronomical_Union"> + <foaf:name>International Astronomical Union</foaf:name> + </foaf:Organization> + + <bibo:Standard rdf:about="http://www.iau.org/static/resolutions/IAU2012_English.pdf"> + <dc:date>2012</dc:date> + + <dc:title>IAU 2012</dc:title> + <dc:creator rdf:resource="&ombibo;IAUDiv1WG"/> + <dc:publisher rdf:resource="&ombibo;International_Astronomical_Union"/> + + <bibo:uri>http://www.iau.org/static/resolutions/IAU2012_English.pdf</bibo:uri> + </bibo:Standard> + + <bibo:Chapter rdf:about="&ombibo;IAU_2012_Resolution_B2"> + <dc:title>Resolution B2</dc:title> + <bibo:reproducedIn rdf:resource="http://www.iau.org/static/resolutions/IAU2012_English.pdf"/> + </bibo:Chapter> + + + + + <!-- Two-dimensional spectral classification of F stars through photoelectric photometry with interference filters --> + + + + <foaf:Person rdf:about="&ombibo;Brengt_Stroemgren"> + + <foaf:name>Brengt Strömgren</foaf:name> + + </foaf:Person> + + + + <bibo:Article rdf:about="&ombibo;Stroemgren1956"> + + <dc:title>Two-dimensional spectral classification of F stars through photoelectric photometry with interference filters</dc:title> + + <dc:date>1956</dc:date> + + <dc:creator rdf:resource="&ombibo;Brengt_Stroemgren"/> + + <dc:subject>Astronomy</dc:subject> + + <dc:subject>Distance Measurement</dc:subject> + + <dc:isPartOf rdf:resource="&ombibo;VistasAstronomy"/> + + <bibo:volume>2</bibo:volume> + + <bibo:pageStart>1336</bibo:pageStart> + + <bibo:pageEnd>1346</bibo:pageEnd> + + <bibo:authorList rdf:parseType="Collection"> + <rdf:Description rdf:about="&ombibo;Brengt_Stroemgren"/> + </bibo:authorList> + + <bibo:uri>http://www.sciencedirect.com/science/article/pii/0083665656900605</bibo:uri> + + </bibo:Article> + + + + <bibo:Journal rdf:about="&ombibo;VistasAstronomy"> + + <dc:title>Vistas in Astronomy</dc:title> + + </bibo:Journal> + + + <!-- Two-dimensional spectral classification by narrow-band photometry for B stars in clusters and associations --> + + + <foaf:Person rdf:about="&ombibo;DLCrawford"> + <foaf:name>David L. Crawford</foaf:name> + + </foaf:Person> + + + <bibo:Article rdf:about="&ombibo;Crawford1958"> + + <dc:title>Two-dimensional spectral classification by narrow-band photometry for B stars in clusters and associations</dc:title> + + <dc:date>1958</dc:date> + + <dc:creator rdf:resource="&ombibo;DLCrawford"/> + + <dc:subject>Astronomy</dc:subject> + + <dc:subject>Distance Measurement</dc:subject> + + <dc:isPartOf rdf:resource="&ombibo;ApJ"/> + + <bibo:volume>128</bibo:volume> + + <bibo:pageStart>185</bibo:pageStart> + + <bibo:pageEnd>206</bibo:pageEnd> + + <bibo:authorList rdf:parseType="Collection"> + <rdf:Description rdf:about="&ombibo;DLCrawford"/> + </bibo:authorList> + + <bibo:uri>http://articles.adsabs.harvard.edu/cgi-bin/nph-iarticle_query?1958ApJ...128..185C&data_type=PDF_HIGH&whole_paper=YES&type=PRINTER&filetype=.pdf</bibo:uri> + + </bibo:Article> + + + <bibo:Journal rdf:about="&ombibo;ApJ"> + + <dc:title>Astrophysical Journal</dc:title> + + <bibo:shortTitle>ApJ</bibo:shortTitle> + + <bibo:uri>http://iopscience.iop.org/0004-637X/</bibo:uri> + + </bibo:Journal> + + +</rdf:RDF> \ No newline at end of file diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/JenaConfig.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/JenaConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..fb237b8b75bc7f6ebb6e0094f4ff16ff629a8d37 --- /dev/null +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/JenaConfig.java @@ -0,0 +1,21 @@ +package at.tuwien.config; + +import lombok.Getter; +import org.apache.jena.query.Dataset; +import org.apache.jena.query.DatasetFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Getter +@Configuration +public class JenaConfig { + + @Value("${fda.connectionTimeout}") + private Integer connectionTimeout; + + @Bean + public Dataset dataset() { + return DatasetFactory.create(); + } +} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/MinioConfig.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/MinioConfig.java deleted file mode 100644 index 84be372b043c6a6d9af77bf656b9cd6f2c274408..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/MinioConfig.java +++ /dev/null @@ -1,30 +0,0 @@ -package at.tuwien.config; - -import io.minio.MinioClient; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Slf4j -@Configuration -public class MinioConfig { - - @Value("${fda.minio.endpoint}") - private String minioEndpoint; - - @Value("${fda.minio.accessKeyId}") - private String minioAccessKeyId; - - @Value("${fda.minio.secretAccessKey}") - private String minioSecretAccessKey; - - @Bean - public MinioClient minioClient() { - return MinioClient.builder() - .endpoint(minioEndpoint) - .credentials(minioAccessKeyId, minioSecretAccessKey) - .build(); - } - -} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/S3Config.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/S3Config.java new file mode 100644 index 0000000000000000000000000000000000000000..6e99fc0ee2dc88a80034ae281faa9279e24d916d --- /dev/null +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/S3Config.java @@ -0,0 +1,38 @@ +package at.tuwien.config; + +import io.minio.MinioClient; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Slf4j +@Getter +@Configuration +public class S3Config { + + @Value("${fda.s3.endpoint}") + private String s3Endpoint; + + @Value("${fda.s3.accessKeyId}") + private String s3AccessKeyId; + + @Value("${fda.s3.secretAccessKey}") + private String s3SecretAccessKey; + + @Value("${fda.s3.importBucket}") + private String s3ImportBucket; + + @Value("${fda.s3.exportBucket}") + private String s3ExportBucket; + + @Bean + public MinioClient minioClient() { + return MinioClient.builder() + .endpoint(s3Endpoint) + .credentials(s3AccessKeyId, s3SecretAccessKey) + .build(); + } + +} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/BrokerListener.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/BrokerListener.java index f3466effcc4805f75d188120798e124128573cd7..22700439179f418cb8cdd7e62394f04405d3936c 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/BrokerListener.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/BrokerListener.java @@ -6,6 +6,12 @@ import org.springframework.scheduling.annotation.Scheduled; public interface BrokerListener { + /** + * Update broker permissions. + * + * @throws BrokerVirtualHostGrantException + * @throws BrokerRemoteException + */ @Scheduled void updatePermissions() throws BrokerVirtualHostGrantException, BrokerRemoteException; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/DatabaseListener.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/DatabaseListener.java index 10adef889b3ef66eb2f7c37b1a806d2d7f1ed9bb..735627b2cdd1264278e7b05168b57aa6e4f3eb59 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/DatabaseListener.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/DatabaseListener.java @@ -1,8 +1,8 @@ package at.tuwien.listener; -import at.tuwien.exception.ImageNotSupportedException; -import at.tuwien.exception.QueryStoreException; +import at.tuwien.exception.*; import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.transaction.annotation.Transactional; public interface DatabaseListener { @@ -14,4 +14,16 @@ public interface DatabaseListener { */ @Scheduled void deleteStaleQueries() throws QueryStoreException, ImageNotSupportedException; + + /** + * Updates the metadata entries in the metadata database for tables & views in the data databases. + * + * @throws DatabaseUnchangedException The known tables and views are up-to-date in the metadata database and no changes were made. + * @throws QueryMalformedException The generated SQL to obtain the metadata is malformed. + * @throws ColumnParseException The obtained metadata information from the views could not be parsed in known tables in the metadata database. + * @throws DatabaseNotFoundException The data database was not found in the metadata database. + */ + @Scheduled + void updateStoredMetadata() throws DatabaseUnchangedException, QueryMalformedException, ColumnParseException, + DatabaseNotFoundException, TableNotFoundException; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/MirrorListener.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/MirrorListener.java new file mode 100644 index 0000000000000000000000000000000000000000..6c0108ae4c04ce4898c6690d5e1fad69ab919f91 --- /dev/null +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/MirrorListener.java @@ -0,0 +1,12 @@ +package at.tuwien.listener; + +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.transaction.annotation.Transactional; + +import java.util.concurrent.TimeUnit; + +public interface MirrorListener { + @Scheduled(fixedRateString = "${fda.mirrorRate}", timeUnit = TimeUnit.SECONDS) + @Transactional + void mirrorEntities(); +} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/impl/MariadbListenerImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/impl/MariadbListenerImpl.java index 412b1f6ee5d6b7351678d8cb3154ed26dd2e4475..955cd10edd1b60cea7d429a56433aed1d505d376 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/impl/MariadbListenerImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/impl/MariadbListenerImpl.java @@ -1,29 +1,54 @@ package at.tuwien.listener.impl; -import at.tuwien.exception.ImageNotSupportedException; -import at.tuwien.exception.QueryStoreException; +import at.tuwien.exception.*; import at.tuwien.listener.DatabaseListener; +import at.tuwien.repository.mdb.DatabaseRepository; +import at.tuwien.service.DatabaseService; import at.tuwien.service.StoreService; +import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import java.util.concurrent.TimeUnit; + +@Log4j2 @Component public class MariadbListenerImpl implements DatabaseListener { private final StoreService storeService; + private final DatabaseService databaseService; + private final DatabaseRepository databaseRepository; @Autowired - public MariadbListenerImpl(StoreService storeService) { + public MariadbListenerImpl(StoreService storeService, DatabaseService databaseService, + DatabaseRepository databaseRepository) { this.storeService = storeService; + this.databaseService = databaseService; + this.databaseRepository = databaseRepository; + log.debug("deleting stale queries & updating metadata all 60s"); } @Override - @Scheduled(cron = "0 0 2 * * *" /* at 2am, non-standard CRON syntax */) + @Scheduled(fixedRateString = "${fda.deleteStaleQueriesRate}", timeUnit = TimeUnit.SECONDS) @Transactional(readOnly = true) public void deleteStaleQueries() throws QueryStoreException, ImageNotSupportedException { storeService.deleteStaleQueries(); } + @Override + @Scheduled(fixedRateString = "${fda.obtainMetadataRate}", timeUnit = TimeUnit.SECONDS) + @Transactional + public void updateStoredMetadata() throws QueryMalformedException, ColumnParseException, + DatabaseNotFoundException, TableNotFoundException { + for (Long databaseId : databaseRepository.findAllOnlyIds()) { + try { + databaseService.obtainMetadata(databaseId); + } catch (DatabaseUnchangedException e) { + /* ignore */ + } + } + } + } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/impl/MirrorListenerImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/impl/MirrorListenerImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..c9a0de60e29def827bd79db9d7d08b79d401433c --- /dev/null +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/impl/MirrorListenerImpl.java @@ -0,0 +1,44 @@ +package at.tuwien.listener.impl; + +import at.tuwien.api.database.DatabaseDto; +import at.tuwien.listener.MirrorListener; +import at.tuwien.mapper.DatabaseMapper; +import at.tuwien.repository.mdb.DatabaseRepository; +import at.tuwien.repository.sdb.DatabaseIdxRepository; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +@Log4j2 +@Component +public class MirrorListenerImpl implements MirrorListener { + + private final DatabaseMapper databaseMapper; + private final DatabaseRepository databaseRepository; + private final DatabaseIdxRepository databaseIdxRepository; + + @Autowired + public MirrorListenerImpl(DatabaseMapper databaseMapper, DatabaseRepository databaseRepository, + DatabaseIdxRepository databaseIdxRepository) { + this.databaseMapper = databaseMapper; + this.databaseRepository = databaseRepository; + this.databaseIdxRepository = databaseIdxRepository; + } + + @Override + @Scheduled(fixedRateString = "${fda.mirrorRate}", timeUnit = TimeUnit.SECONDS) + @Transactional + public void mirrorEntities() { + final List<DatabaseDto> databases = databaseRepository.findAll() + .stream() + .map(databaseMapper::databaseToDatabaseDto) + .toList(); + databaseIdxRepository.saveAll(databases); + log.info("Updated {} databases", databases.size()); + } +} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AccessService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AccessService.java index b501b09614cba52a1c3d179e40772da3e42b1b1d..380bf8330940f3dc8f765389c61712b56763eee2 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AccessService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AccessService.java @@ -16,7 +16,7 @@ public interface AccessService { * @param databaseId The database id. * @return The list of database access definitions. */ - List<DatabaseAccess> list(Long databaseId); + List<DatabaseAccess> list(Long databaseId) throws DatabaseNotFoundException; /** * Finds database access by given database id and user id. @@ -26,17 +26,7 @@ public interface AccessService { * @return The database access. * @throws AccessDeniedException The access does not exist. */ - DatabaseAccess find(Long databaseId, UUID userId) throws AccessDeniedException; - - /** - * Checks if the user with username has access to the database with given id. - * - * @param databaseId The database id. - * @param userId The user id. - * @return The access object. - * @throws NotAllowedException The user does not have access. - */ - DatabaseAccess hasAccess(Long databaseId, UUID userId) throws NotAllowedException; + DatabaseAccess find(Long databaseId, UUID userId) throws AccessDeniedException, DatabaseNotFoundException; /** * Give somebody access to a database of container. @@ -81,5 +71,5 @@ public interface AccessService { * @throws DatabaseMalformedException The database has an invalid state. */ void delete(Long databaseId, UUID userId) throws DatabaseNotFoundException, UserNotFoundException, - NotAllowedException, QueryMalformedException, DatabaseMalformedException; + NotAllowedException, QueryMalformedException, DatabaseMalformedException, AccessDeniedException; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java index 8c01cb2eb5da7523f538076fec3e93371dc40ff7..430f4b62504bfc0d834eb841e7d91bbfc028ecd6 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java @@ -3,7 +3,6 @@ package at.tuwien.service; import at.tuwien.api.database.DatabaseCreateDto; import at.tuwien.api.database.DatabaseModifyVisibilityDto; import at.tuwien.api.database.DatabaseTransferDto; -import at.tuwien.api.user.UserDto; import at.tuwien.entities.database.Database; import at.tuwien.entities.user.User; import at.tuwien.exception.*; @@ -59,25 +58,6 @@ public interface DatabaseService { */ Database findById(Long databaseId) throws DatabaseNotFoundException; - /** - * Deletes a database with given id in the metadata database. Side effects: does only mark the database as deleted, - * does not actually delete it. - * - * @param databaseId The database id. - * @param userId The user id. - * @throws DatabaseNotFoundException The database was not found in the metadata database. - * @throws ImageNotSupportedException The image is not supported. - * @throws DatabaseMalformedException The query string is malformed. - * @throws AmqpException The exchange could not be deleted. - * @throws DatabaseConnectionException The connection to the database could not be established by the database connector. - * @throws QueryMalformedException The mapped deletion query resulted in an invalid query statement and thus was rejected by the database engine. - * @throws UserNotFoundException The current user could not be loaded in the metadata database. - */ - void delete(Long databaseId, UUID userId) - throws DatabaseNotFoundException, ImageNotSupportedException, - DatabaseMalformedException, AmqpException, - DatabaseConnectionException, QueryMalformedException, UserNotFoundException; - /** * Creates a new database with minimal metadata in the metadata database and creates a new database on the container. * @@ -93,12 +73,18 @@ public interface DatabaseService { * @throws DatabaseConnectionException The connection to the database could not be established by the database connector. * @throws QueryMalformedException The mapped creation query resulted in an invalid query statement and thus was rejected by the database engine. */ - Database create(DatabaseCreateDto createDto, Principal principal) - throws ImageNotSupportedException, ContainerNotFoundException, - DatabaseMalformedException, AmqpException, ContainerConnectionException, UserNotFoundException, - DatabaseNameExistsException, DatabaseConnectionException, QueryMalformedException, KeycloakRemoteException, AccessDeniedException; + Database create(DatabaseCreateDto createDto, Principal principal) throws ImageNotSupportedException, + ContainerNotFoundException, DatabaseMalformedException, AmqpException, ContainerConnectionException, + UserNotFoundException, DatabaseNameExistsException, DatabaseConnectionException, QueryMalformedException, + KeycloakRemoteException, AccessDeniedException; - void updatePassword(User user) throws DatabaseMalformedException, QueryMalformedException; + /** + * Updates the user's password. + * + * @param user The user. + * @throws QueryMalformedException The mapped query is malformed. + */ + void updatePassword(User user) throws QueryMalformedException; /** * Updates the visibility of the database. @@ -119,5 +105,19 @@ public interface DatabaseService { * @throws DatabaseNotFoundException The database was not found in the metadata database. * @throws UserNotFoundException The new user was not found in the metadata database. */ - Database transfer(Long databaseId, DatabaseTransferDto transferDto) throws DatabaseNotFoundException, UserNotFoundException, KeycloakRemoteException, AccessDeniedException; + Database transfer(Long databaseId, DatabaseTransferDto transferDto) throws DatabaseNotFoundException, + UserNotFoundException; + + /** + * Obtain metadata from database with given id to read table and view information (schema) and write it to the metadata database for management by DBRepo. + * + * @param databaseId The database id. + * @return The updated database. + * @throws DatabaseNotFoundException The database was not found in the metadata database. + * @throws QueryMalformedException The inspect query (table/view) is malformed and has syntax issues. + * @throws DatabaseUnchangedException The metadata database is up-to-date and knows about all tables/views in the data database(s). + * @throws ColumnParseException The columns could not be automatically parsed from the views. + */ + Database obtainMetadata(Long databaseId) throws DatabaseNotFoundException, QueryMalformedException, + DatabaseUnchangedException, ColumnParseException, TableNotFoundException; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/EntityService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/EntityService.java index 48ad06842a3dbce7af876fa43af4b323df6773bd..d8f4e2f306dfee9568186ae2ea6b1466b68e29e2 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/EntityService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/EntityService.java @@ -9,18 +9,18 @@ import java.util.List; public interface EntityService { - List<EntityDto> findByLabel(Ontology ontology, String label) throws QueryMalformedException; + List<EntityDto> findByLabel(Ontology ontology, String label) throws QueryMalformedException, OntologyInvalidException; - List<EntityDto> findByLabel(Ontology ontology, String label, Integer limit) throws QueryMalformedException; + List<EntityDto> findByLabel(Ontology ontology, String label, Integer limit) throws QueryMalformedException, OntologyInvalidException; - List<EntityDto> findByUri(Ontology ontology, String uri) throws QueryMalformedException; + List<EntityDto> findByUri(Ontology ontology, String uri) throws QueryMalformedException, OntologyInvalidException; EntityDto findOneByUri(Ontology ontology, String uri) throws QueryMalformedException, - SemanticEntityNotFoundException; + SemanticEntityNotFoundException, OntologyInvalidException; List<EntityDto> suggestTableSemantics(Long databaseId, Long tableId) throws TableNotFoundException, - QueryMalformedException, DatabaseNotFoundException; + QueryMalformedException, DatabaseNotFoundException, OntologyInvalidException; List<TableColumnEntityDto> suggestTableColumnSemantics(Long databaseId, Long tableId, Long columnId) - throws QueryMalformedException, TableColumnNotFoundException; + throws QueryMalformedException, TableColumnNotFoundException, TableNotFoundException, DatabaseNotFoundException, OntologyInvalidException; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/IdentifierService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/IdentifierService.java index 6a2ccee8388e8c52dee9918a0c6a3f489f80e2bc..e4f823c44e7cb86596c9b6aec6117268b6bbb0a8 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/IdentifierService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/IdentifierService.java @@ -10,7 +10,6 @@ import org.springframework.stereotype.Service; import java.security.Principal; import java.util.List; -import java.util.Optional; @Service public interface IdentifierService { @@ -58,32 +57,34 @@ public interface IdentifierService { * Finds all identifiers in the metadata database which are not deleted. Optionally, the result can be filtered by * database id and/or query id. * + * @param type The query type. * @param databaseId Optional. The database id. * @param queryId Optional. The query id. * @param viewId Optional. The view id. + * @param tableId Optional. The table id. * @return List of identifiers */ - List<Identifier> findAll(IdentifierTypeDto type, Long databaseId, Long queryId, Long viewId); + List<Identifier> findAll(IdentifierTypeDto type, Long databaseId, Long queryId, Long viewId, Long tableId); /** * Creates a new identifier in the metadata database for a query or database. * - * @param data The identifier. - * @param principal The authorization principal. + * @param data The identifier. + * @param principal The authorization principal. * @return The created identifier from the metadata database if successful. * @throws IdentifierPublishingNotAllowedException The identifier with this visibility could not be created. - * @throws QueryNotFoundException The query with this id (in the data) could not be created. + * @throws QueryNotFoundException The query was not found in the data database. * @throws RemoteUnavailableException The connection to the Query Store could not be established by * the database connector. * @throws IdentifierAlreadyExistsException The identifier for this query/database already exists. * @throws UserNotFoundException The user was not found in the metadata database. * @throws DatabaseNotFoundException The database was not found in the metadata database. + * @throws IdentifierNotFoundException The identifier was not found in the metadata database. */ - Identifier create(IdentifierSaveDto data, Principal principal) - throws IdentifierPublishingNotAllowedException, QueryNotFoundException, - RemoteUnavailableException, IdentifierAlreadyExistsException, UserNotFoundException, + Identifier create(IdentifierSaveDto data, Principal principal) throws IdentifierPublishingNotAllowedException, + QueryNotFoundException, RemoteUnavailableException, IdentifierAlreadyExistsException, UserNotFoundException, DatabaseNotFoundException, IdentifierRequestException, ViewNotFoundException, QueryStoreException, - DatabaseConnectionException, ImageNotSupportedException; + DatabaseConnectionException, ImageNotSupportedException, IdentifierNotFoundException; /** * Export metadata for a identifier @@ -103,8 +104,7 @@ public interface IdentifierService { * @throws IdentifierNotFoundException The identifier was not found in the metadata database or was deleted. * @throws IdentifierRequestException The identifier style was not found. */ - String exportBibliography(Long id, BibliographyTypeDto style) throws IdentifierNotFoundException, - IdentifierRequestException; + String exportBibliography(Long id, BibliographyTypeDto style) throws IdentifierNotFoundException, IdentifierRequestException; /** * Exports an identifier to XML @@ -113,27 +113,9 @@ public interface IdentifierService { * @return The XML resource, if successful. * @throws IdentifierNotFoundException The identifier was not found in the metadata database or was deleted. * @throws QueryNotFoundException The query was not found in the metadata database or was deleted. - * @throws RemoteUnavailableException The connection to the Query Store could not be established by the database - * connector. * @throws IdentifierRequestException The identifier does not allow for exporting. */ - InputStreamResource exportResource(Long identifierId, Principal principal) - throws IdentifierNotFoundException, QueryNotFoundException, FileStorageException, - IdentifierRequestException, UserNotFoundException, QueryStoreException, TableMalformedException, - DatabaseConnectionException, QueryMalformedException, DatabaseNotFoundException, ImageNotSupportedException, DataDbSidecarException; - - /** - * Updated the metadata (only) on the identifier for a given id in the metadata database. - * - * @param identifierId The identifier id. - * @param data The metadata. - * @param principal The user principal. - * @return The updated identifier if successful. - */ - Identifier update(Long identifierId, IdentifierSaveDto data, Principal principal) - throws UserNotFoundException, DatabaseNotFoundException, QueryNotFoundException, RemoteUnavailableException, - IdentifierRequestException, IdentifierNotFoundException, QueryStoreException, DatabaseConnectionException, - ImageNotSupportedException; + InputStreamResource exportResource(Long identifierId, Principal principal) throws IdentifierNotFoundException, QueryNotFoundException, FileStorageException, IdentifierRequestException, UserNotFoundException, QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, DatabaseNotFoundException, ImageNotSupportedException, DataDbSidecarException; /** * Soft-deletes an identifier for a given id in the metadata database. Does not actually remove the entity from the @@ -142,5 +124,5 @@ public interface IdentifierService { * @param identifierId The identifier id. * @throws IdentifierNotFoundException The identifier was not found in the metadata database or was deleted. */ - void delete(Long identifierId) throws IdentifierNotFoundException; + void delete(Long identifierId) throws IdentifierNotFoundException, DatabaseNotFoundException; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/OntologyService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/OntologyService.java index 7782aaf2d940e65db3ab16879c21e768a18619e3..0f91626406f47dc290a7bc4ef5e3d3603c369ce8 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/OntologyService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/OntologyService.java @@ -14,6 +14,8 @@ import java.util.List; public interface OntologyService { List<Ontology> findAll(); + List<Ontology> findAllProcessable(); + Ontology find(Long id) throws OntologyNotFoundException; Ontology create(OntologyCreateDto data, Principal principal) throws UserNotFoundException, KeycloakRemoteException, AccessDeniedException; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/QueryService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/QueryService.java index 1bc8fa77c8f1821261e0d548405ad529d1dcbcd6..4ed19c2742196248f9c8f530cdcacebb3316cb3f 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/QueryService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/QueryService.java @@ -7,18 +7,13 @@ import at.tuwien.api.database.query.ImportDto; import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.api.database.table.TableCsvDeleteDto; import at.tuwien.api.database.table.TableCsvDto; -import at.tuwien.api.database.table.TableCsvUpdateDto; -import at.tuwien.entities.database.Database; import at.tuwien.entities.database.View; -import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.exception.*; import at.tuwien.querystore.Query; -import net.sf.jsqlparser.JSQLParserException; import org.springframework.stereotype.Service; import java.security.Principal; import java.time.Instant; -import java.util.List; @Service public interface QueryService { @@ -44,7 +39,8 @@ public interface QueryService { QueryResultDto execute(Long databaseId, ExecuteStatementDto statement, Principal principal, Long page, Long size, SortType sortDirection, String sortColumn) throws DatabaseNotFoundException, ImageNotSupportedException, QueryMalformedException, QueryStoreException, ColumnParseException, - UserNotFoundException, TableMalformedException, DatabaseConnectionException, KeycloakRemoteException, AccessDeniedException; + UserNotFoundException, TableMalformedException, DatabaseConnectionException, KeycloakRemoteException, + AccessDeniedException, QueryNotFoundException; /** * Re-Executes an arbitrary query on the database. We allow the user to only view the data, therefore the @@ -107,8 +103,8 @@ public interface QueryService { * @throws TableMalformedException The table is malformed. * @throws QueryMalformedException The query is malformed. */ - QueryResultDto tableFindAll(Long databaseId, Long tableId, Instant timestamp, - Long page, Long size, Principal principal) throws TableNotFoundException, DatabaseNotFoundException, + QueryResultDto tableFindAll(Long databaseId, Long tableId, Instant timestamp, Long page, Long size, + Principal principal) throws TableNotFoundException, DatabaseNotFoundException, ImageNotSupportedException, DatabaseConnectionException, TableMalformedException, PaginationException, QueryMalformedException, UserNotFoundException; @@ -173,7 +169,8 @@ public interface QueryService { */ ExportResource findOne(Long databaseId, Long queryId, Principal principal) throws DatabaseNotFoundException, ImageNotSupportedException, TableMalformedException, FileStorageException, QueryStoreException, - QueryNotFoundException, QueryMalformedException, DatabaseConnectionException, UserNotFoundException, DataDbSidecarException; + QueryNotFoundException, QueryMalformedException, DatabaseConnectionException, UserNotFoundException, + DataDbSidecarException; /** * Count the total tuples for a given table id within a database id at a given time. @@ -189,7 +186,9 @@ public interface QueryService { * @throws ImageNotSupportedException The image is not supported. */ Long tableCount(Long databaseId, Long tableId, Instant timestamp, Principal principal) - throws DatabaseNotFoundException, TableNotFoundException, TableMalformedException, ImageNotSupportedException, DatabaseConnectionException, QueryMalformedException, QueryStoreException, UserNotFoundException; + throws DatabaseNotFoundException, TableNotFoundException, TableMalformedException, + ImageNotSupportedException, DatabaseConnectionException, QueryMalformedException, QueryStoreException, + UserNotFoundException; /** * Count the total tuples for a given table id within a database id at a given time. @@ -202,25 +201,9 @@ public interface QueryService { * @throws TableMalformedException The view columns are messed up what we got from the metadata database. * @throws ImageNotSupportedException The image is not supported. */ - Long viewCount(Long databaseId, View view, Principal principal) - throws DatabaseNotFoundException, TableMalformedException, ImageNotSupportedException, DatabaseConnectionException, QueryMalformedException, QueryStoreException, UserNotFoundException; - - /** - * @param databaseId The database id. - * @param tableId The table id. - * @param data - * @param principal The user principal. - * @throws ImageNotSupportedException The image is not supported. - * @throws TableMalformedException The table does not exist in the metadata database. - * @throws DatabaseNotFoundException The database was not found in the remote database. - * @throws TableNotFoundException The table was not found in the metadata database. - * @throws DatabaseConnectionException The database was not found in the remote database. - * @throws QueryMalformedException The query is malformed. - */ - @Deprecated - void update(Long databaseId, Long tableId, TableCsvUpdateDto data, Principal principal) - throws ImageNotSupportedException, TableMalformedException, DatabaseNotFoundException, - TableNotFoundException, DatabaseConnectionException, QueryMalformedException, UserNotFoundException; + Long viewCount(Long databaseId, View view, Principal principal) throws DatabaseNotFoundException, + TableMalformedException, ImageNotSupportedException, DatabaseConnectionException, QueryMalformedException, + QueryStoreException, UserNotFoundException; /** * Insert data from AMQP client into a table of a table-database id tuple, we need the "root" role for this as the @@ -236,7 +219,8 @@ public interface QueryService { * @throws TableNotFoundException The table is not found in the metadata database. */ void insert(Long databaseId, Long tableId, TableCsvDto data, Principal principal) throws ImageNotSupportedException, - TableMalformedException, DatabaseNotFoundException, TableNotFoundException, DatabaseConnectionException, UserNotFoundException; + TableMalformedException, DatabaseNotFoundException, TableNotFoundException, DatabaseConnectionException, + UserNotFoundException; /** * Deletes a tuple by given constraint set @@ -270,15 +254,6 @@ public interface QueryService { * @throws QueryMalformedException The query is malformed. */ void insert(Long databaseId, Long tableId, ImportDto data, Principal principal) throws ImageNotSupportedException, - TableMalformedException, DatabaseNotFoundException, TableNotFoundException, DatabaseConnectionException, QueryMalformedException, UserNotFoundException, DataDbSidecarException; - - /** - * Parses the stored columns from a given query. - * - * @param query The query. - * @param database The database that contains the list of tables with list of columns. - * @return List of columns in the order they are referenced in the query. - * @throws JSQLParserException The columns could not be extracted from the query. - */ - List<TableColumn> parseColumns(String query, Database database) throws JSQLParserException; + TableMalformedException, DatabaseNotFoundException, TableNotFoundException, DatabaseConnectionException, + QueryMalformedException, UserNotFoundException, DataDbSidecarException; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/SemanticService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/SemanticService.java index c2bc27cf4c0e669d2138043a20bc8ecf3ad7c23f..bfa1928ec02048594e36c4f6a9ed1e2ba5483efa 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/SemanticService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/SemanticService.java @@ -1,12 +1,8 @@ package at.tuwien.service; -import at.tuwien.api.database.table.columns.concepts.ConceptSaveDto; -import at.tuwien.api.database.table.columns.concepts.UnitSaveDto; import at.tuwien.entities.database.table.columns.TableColumnConcept; import at.tuwien.entities.database.table.columns.TableColumnUnit; import at.tuwien.exception.ConceptNotFoundException; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.SemanticEntityNotFoundException; import at.tuwien.exception.UnitNotFoundException; import java.util.List; @@ -17,43 +13,7 @@ public interface SemanticService { List<TableColumnUnit> findAllUnits(); - TableColumnConcept saveConcept(ConceptSaveDto data); - - TableColumnUnit saveUnit(UnitSaveDto data); - - /** - * Finds a ColumnConcept with given uri. - * - * @param uri The uri. - * @return The concept, if successful. - * @throws ConceptNotFoundException The ColumnConcept was not found in the metadata database. - */ - TableColumnConcept findConcept(String uri) throws ConceptNotFoundException; - - /** - * Finds a unit with given uri. - * - * @param uri The uri. - * @return The unit, if successful. - * @throws UnitNotFoundException The unit was not found in the metadata database. - */ TableColumnUnit findUnit(String uri) throws UnitNotFoundException; - /** - * Saves a concept with uri and authorization information for retrieving information from the semantics service. - * - * @param uri The uri. - * @return The saved column concept. - * @throws SemanticEntityNotFoundException The semantic information could not be found. - */ - TableColumnConcept saveConcept(String uri) throws SemanticEntityNotFoundException, QueryMalformedException; - - /** - * Saves a unit with uri and authorization information for retrieving information from the semantics service. - * - * @param uri The uri. - * @return The saved column unit. - * @throws SemanticEntityNotFoundException The semantic information could not be found. - */ - TableColumnUnit saveUnit(String uri) throws SemanticEntityNotFoundException, QueryMalformedException; + TableColumnConcept findConcept(String uri) throws ConceptNotFoundException; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/StoreService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/StoreService.java index f737a79c85c700d901c3b6477c2200c774943ab8..d62b959713a273b8ab81334f96e8a7830ca29c9f 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/StoreService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/StoreService.java @@ -56,7 +56,7 @@ public interface StoreService { * @throws DatabaseConnectionException The database connection to the remote container failed. */ Query insert(Long databaseId, ExecuteStatementDto metadata, Principal principal) throws QueryStoreException, - DatabaseNotFoundException, ImageNotSupportedException, UserNotFoundException, DatabaseConnectionException, KeycloakRemoteException, AccessDeniedException; + DatabaseNotFoundException, ImageNotSupportedException, UserNotFoundException, DatabaseConnectionException, KeycloakRemoteException, AccessDeniedException, QueryNotFoundException; /** * Persists a query to be displayed in the frontend. diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/TableService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/TableService.java index 7b37e4d8b94f6a542401ad22313ca3a0ea5fd321..9c09b94cc1e5a7883790bdad936c0b99e0d71e6e 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/TableService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/TableService.java @@ -6,6 +6,7 @@ import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; import at.tuwien.entities.database.table.Table; import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.exception.*; +import org.springframework.transaction.annotation.Transactional; import java.security.Principal; import java.util.List; @@ -23,8 +24,11 @@ public interface TableService { */ Table find(Long databaseId, Long tableId) throws DatabaseNotFoundException, TableNotFoundException; + @Transactional(readOnly = true) + Table find(Long databaseId, String internalName) throws DatabaseNotFoundException, TableNotFoundException; + /** - * Finds all tables in the metdata database. + * Finds all tables in the metadata database. * * @return The list of tables. */ @@ -53,33 +57,6 @@ public interface TableService { */ List<Table> findAll(Long databaseId) throws DatabaseNotFoundException; - /** - * Deletes a table for a fiven database-table id pair. - * - * @param databaseId The database id. - * @param tableId The table id. - * @throws TableNotFoundException The table was not found in the metadata database. - * @throws DatabaseNotFoundException The database was not found in the metadata database. - * @throws ImageNotSupportedException The image is not supported. - * @throws DataProcessingException The deletion did not work. - */ - void deleteTable(Long databaseId, Long tableId) - throws TableNotFoundException, DatabaseNotFoundException, - ImageNotSupportedException, DataProcessingException, ContainerNotFoundException, TableMalformedException, - QueryMalformedException; - - /** - * Find a table by database-table id pair - * - * @param databaseId The database id. - * @param tableId The table id. - * @return The table. - * @throws TableNotFoundException The table was not found in the metadata database. - * @throws DatabaseNotFoundException The database was not found in the metadata database. - */ - Table findById(Long databaseId, Long tableId) - throws TableNotFoundException, DatabaseNotFoundException; - /** * Creates a table for a database id with given schema as data @@ -93,10 +70,12 @@ public interface TableService { * @throws TableNameExistsException The table name exists already in this database. * @throws ContainerNotFoundException The container was not found. * @throws TableMalformedException The table seems malformed by the mapper. + * @throws QueryMalformedException The query to create the table is malformed. */ Table createTable(Long databaseId, TableCreateDto createDto, Principal principal) throws ImageNotSupportedException, DatabaseNotFoundException, TableMalformedException, - TableNameExistsException, ContainerNotFoundException, UserNotFoundException, QueryMalformedException; + TableNameExistsException, ContainerNotFoundException, UserNotFoundException, QueryMalformedException, + TableNotFoundException; /** @@ -111,10 +90,25 @@ public interface TableService { * @throws DatabaseNotFoundException The database was not found in the metadata database. * @throws ContainerNotFoundException The container was not found. * @throws TableMalformedException The table seems malformed by the mapper. + * @throws QueryMalformedException The query to update the table is malformed. + */ + TableColumn update(Long databaseId, Long tableId, Long columnId, ColumnSemanticsUpdateDto updateDto, + String authorization) throws TableNotFoundException, DatabaseNotFoundException, + ContainerNotFoundException, TableMalformedException, SemanticEntityPersistException, + SemanticEntityNotFoundException, QueryMalformedException; + + /** + * Deletes a table from the database in the metadata database and data database. + * + * @param databaseId The database id. + * @param tableId The table id. + * @throws TableNotFoundException The table was not found in the metadata database. + * @throws DatabaseNotFoundException The database was not found in the metadata database. + * @throws ImageNotSupportedException The image is not supported. + * @throws TableMalformedException The table seems malformed by the mapper. + * @throws QueryMalformedException The query to delete the table is malformed. */ - TableColumn update(Long databaseId, Long tableId, Long columnId, - ColumnSemanticsUpdateDto updateDto, String authorization) - throws TableNotFoundException, DatabaseNotFoundException, ContainerNotFoundException, - TableMalformedException, SemanticEntityPersistException, SemanticEntityNotFoundException, - QueryMalformedException; + void deleteTable(Long databaseId, Long tableId) + throws TableNotFoundException, DatabaseNotFoundException, ImageNotSupportedException, + TableMalformedException, QueryMalformedException; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ViewService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ViewService.java index 626b74495c198bbc42b8cd458ecb38e7b8aa1f1d..208f55fe45dc9acf7c09831bc00bed2725bfad0b 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ViewService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ViewService.java @@ -9,7 +9,7 @@ import java.util.List; public interface ViewService { - View findById(Long id) throws ViewNotFoundException; + View findById(Long id) throws ViewNotFoundException, DatabaseNotFoundException; /** * Find all views by database id. @@ -19,7 +19,7 @@ public interface ViewService { * @return A list of views. * @throws UserNotFoundException The user with authorization principal was not found. */ - List<View> findAll(Long databaseId, Principal principal) throws UserNotFoundException; + List<View> findAll(Long databaseId, Principal principal) throws UserNotFoundException, DatabaseNotFoundException; /** * Find a view by database id and view id. @@ -31,7 +31,8 @@ public interface ViewService { * @throws ViewNotFoundException The view was not found in the metadata database. * @throws UserNotFoundException The user with authorization principal was not found. */ - View findById(Long databaseId, Long id, Principal principal) throws ViewNotFoundException, UserNotFoundException; + View findById(Long databaseId, Long id, Principal principal) throws ViewNotFoundException, UserNotFoundException, + DatabaseNotFoundException; /** * Delete view in the container with the given id and database with id and the given view id. diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java index ccf6560b4e56d7ba3fe1ac5d393b12d1256f75f0..60dbcc40f98f496b1b4aef267d83e02712691f45 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java @@ -8,7 +8,8 @@ import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.mapper.DatabaseMapper; -import at.tuwien.repository.mdb.DatabaseAccessRepository; +import at.tuwien.repository.mdb.DatabaseRepository; +import at.tuwien.repository.sdb.DatabaseIdxRepository; import at.tuwien.service.AccessService; import at.tuwien.service.DatabaseService; import at.tuwien.service.UserService; @@ -21,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; +import java.util.LinkedList; import java.util.List; import java.util.Optional; import java.util.UUID; @@ -32,27 +34,37 @@ public class AccessServiceImpl extends HibernateConnector implements AccessServi private final UserService userService; private final DatabaseMapper databaseMapper; private final DatabaseService databaseService; - private final DatabaseAccessRepository databaseAccessRepository; + private final DatabaseRepository databaseRepository; + private final DatabaseIdxRepository databaseIdxRepository; @Autowired public AccessServiceImpl(UserService userService, DatabaseMapper databaseMapper, DatabaseService databaseService, - DatabaseAccessRepository databaseAccessRepository) { + DatabaseRepository databaseRepository, DatabaseIdxRepository databaseIdxRepository) { this.userService = userService; this.databaseMapper = databaseMapper; this.databaseService = databaseService; - this.databaseAccessRepository = databaseAccessRepository; + this.databaseRepository = databaseRepository; + this.databaseIdxRepository = databaseIdxRepository; } @Override @Transactional(readOnly = true) - public List<DatabaseAccess> list(Long databaseId) { - return databaseAccessRepository.findByDatabaseId(databaseId); + public List<DatabaseAccess> list(Long databaseId) throws DatabaseNotFoundException { + return databaseService.find(databaseId) + .getAccesses(); } @Override @Transactional(readOnly = true) - public DatabaseAccess find(Long databaseId, UUID userId) throws AccessDeniedException { - final Optional<DatabaseAccess> optional = databaseAccessRepository.findByDatabaseIdAndUserId(databaseId, userId); + public DatabaseAccess find(Long databaseId, UUID userId) throws AccessDeniedException, DatabaseNotFoundException { + final Database database = databaseService.find(databaseId); + if (database.getAccesses() == null) { + database.setAccesses(new LinkedList<>()) /* FIXME proper hibernate mapping needed */; + } + final Optional<DatabaseAccess> optional = database.getAccesses() + .stream() + .filter(a -> a.getUser().getId().equals(userId)) + .findFirst(); if (optional.isEmpty()) { log.error("Failed to find database access for database with id {}", databaseId); throw new AccessDeniedException("Failed to find database access for database with id " + databaseId); @@ -60,28 +72,21 @@ public class AccessServiceImpl extends HibernateConnector implements AccessServi return optional.get(); } - @Override - @Transactional(readOnly = true) - public DatabaseAccess hasAccess(Long databaseId, UUID userId) throws NotAllowedException { - final Optional<DatabaseAccess> optional = databaseAccessRepository.findByDatabaseIdAndUserId(databaseId, userId); - if (optional.isEmpty()) { - log.error("Failed to retrieve access, not found"); - throw new NotAllowedException("Failed to retrieve access"); - } - return optional.get(); - } - @Override @Transactional - public void create(Long databaseId, UUID userId, DatabaseGiveAccessDto accessDto) throws DatabaseNotFoundException, - UserNotFoundException, NotAllowedException, QueryMalformedException, DatabaseMalformedException { + public void create(Long databaseId, UUID userId, DatabaseGiveAccessDto accessDto) + throws DatabaseNotFoundException, UserNotFoundException, NotAllowedException, QueryMalformedException, + DatabaseMalformedException { /* check */ final Database database = databaseService.findById(databaseId); final Container container = database.getContainer(); final User user = userService.find(userId); - if (databaseAccessRepository.findByDatabaseIdAndUserId(databaseId, user.getId()).isPresent()) { + try { + find(databaseId, userId); log.error("Failed to give access to user with id {}: has already permission", userId); throw new NotAllowedException("Failed to give access to user with id " + userId + ": has already permission"); + } catch (AccessDeniedException e) { + /* ignore */ } final ComboPooledDataSource dataSource = getPrivilegedDataSource(container.getImage(), container, database); try { @@ -97,15 +102,24 @@ public class AccessServiceImpl extends HibernateConnector implements AccessServi final PreparedStatement preparedStatement4 = databaseMapper.rawFlushPrivileges(connection); preparedStatement4.executeUpdate(); } catch (SQLException e) { - log.error("Failed to give database access {}, reason {}", accessDto, e.getMessage()); + log.error("Failed to give database access {}: {}", accessDto, e.getMessage()); throw new DatabaseMalformedException("Failed to execute query", e); } finally { dataSource.close(); } - /* update access */ - final DatabaseAccess entity = databaseMapper.databaseGiveAccessDtoToDatabaseAccess(database, user.getId(), accessDto); - databaseAccessRepository.save(entity); - log.info("Handed access to database with id {} for user with username {}", databaseId, user.getUsername()); + /* update in metadat database */ + final DatabaseAccess access = DatabaseAccess.builder() + .hdbid(databaseId) + .database(database) + .huserid(userId) + .type(databaseMapper.accessTypeDtoToAccessType(accessDto.getType())) + .build(); + database.getAccesses() + .add(access); + databaseRepository.save(database); + /* update in opensearch database */ + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(databaseService.find(databaseId))); + log.info("Created access to database with id {} for user with id {} in metadata database & search database", databaseId, userId); } @Override @@ -140,20 +154,34 @@ public class AccessServiceImpl extends HibernateConnector implements AccessServi } finally { dataSource.close(); } - /* update access */ - databaseAccessRepository.save(databaseMapper.databaseModifyAccessDtoToDatabaseAccess(database, user, accessDto)); - log.info("Modified access to database with id {} for user with username {}", databaseId, user.getUsername()); + /* update in metadata database */ + final DatabaseAccess access = DatabaseAccess.builder() + .hdbid(databaseId) + .database(database) + .huserid(userId) + .user(user) + .type(databaseMapper.accessTypeDtoToAccessType(accessDto.getType())) + .build(); + final int idx = database.getAccesses().indexOf(access); + if (idx == -1) { + log.error("Failed to find access in database with id {}", databaseId); + throw new NotAllowedException("Failed to find access in database with id " + databaseId); + } + database.getAccesses().set(idx, access); + databaseRepository.save(database); + /* update in opensearch database */ + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(databaseService.find(databaseId))); + log.info("Updated access to database with id {} for user with id {} in metadata database & search database", databaseId, userId); } @Override @Transactional - public void delete(Long databaseId, UUID userId) - throws DatabaseNotFoundException, UserNotFoundException, NotAllowedException, QueryMalformedException, - DatabaseMalformedException { + public void delete(Long databaseId, UUID userId) throws DatabaseNotFoundException, UserNotFoundException, + NotAllowedException, QueryMalformedException, DatabaseMalformedException, AccessDeniedException { /* check */ final Database database = databaseService.findById(databaseId); final Container container = database.getContainer(); - final User user = userService.find(userId); + final DatabaseAccess access = find(databaseId, userId); if (database.getOwnedBy().equals(userId)) { log.error("Failed to revoke database access of user with id {}: is the owner", userId); throw new NotAllowedException("Failed to revoke database access of user with id " + userId + ": is the owner"); @@ -162,9 +190,9 @@ public class AccessServiceImpl extends HibernateConnector implements AccessServi try { final Connection connection = dataSource.getConnection(); /* create user */ - final PreparedStatement preparedStatement1 = databaseMapper.rawRevokeUserAccessQuery(connection, user.getUsername()); + final PreparedStatement preparedStatement1 = databaseMapper.rawRevokeUserAccessQuery(connection, access.getUser().getUsername()); preparedStatement1.executeUpdate(); - final PreparedStatement preparedStatement2 = databaseMapper.userToRawDropUserQuery(connection, user.getUsername()); + final PreparedStatement preparedStatement2 = databaseMapper.userToRawDropUserQuery(connection, access.getUser().getUsername()); preparedStatement2.executeUpdate(); } catch (SQLException e) { log.error("Failed to revoke database access, reason {}", e.getMessage()); @@ -172,10 +200,12 @@ public class AccessServiceImpl extends HibernateConnector implements AccessServi } finally { dataSource.close(); } - /* update access */ - databaseAccessRepository.deleteByHdbidAndHuserid(databaseId, user.getId()); - log.info("Revoked access to database with id {} for user with username {}", databaseId, user.getId()); - log.trace("revoked access to database for user {}", user); + /* update in metadata database */ + database.getAccesses().remove(access); + databaseRepository.save(database); + /* update in opensearch database */ + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(databaseService.find(databaseId))); + log.info("Deleted access to database with id {} for user with id {} in metadata database & search database", databaseId, userId); } } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java index f537bc3137b1d8568196ef7a272f588bf94845ef..29db821a09850b4078ea48f785efcf9a7cb558b0 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java @@ -30,43 +30,47 @@ public class ContainerServiceImpl implements ContainerService { private final ContainerRepository containerRepository; @Autowired - public ContainerServiceImpl(ContainerRepository containerRepository, ImageRepository imageRepository, - ContainerMapper containerMapper) { + public ContainerServiceImpl(ContainerMapper containerMapper, ImageRepository imageRepository, + ContainerRepository containerRepository) { + this.containerMapper = containerMapper; this.imageRepository = imageRepository; this.containerRepository = containerRepository; - this.containerMapper = containerMapper; } @Override @Transactional - public Container create(ContainerCreateRequestDto createDto, Principal principal) throws ImageNotFoundException, + public Container create(ContainerCreateRequestDto data, Principal principal) throws ImageNotFoundException, ContainerAlreadyExistsException { - final Optional<ContainerImage> image = imageRepository.findById(createDto.getImageId()); - if (image.isEmpty()) { - log.error("failed to get image with id {}", createDto.getImageId()); - throw new ImageNotFoundException("image was not found in metadata database."); - } - /* entity */ - Container container = new Container(); - container.setImageId(image.get().getId()); - container.setName(createDto.getName()); - container.setInternalName(containerMapper.containerToInternalContainerName(container)); - /* check duplicate */ - final Optional<Container> optional = containerRepository.findByInternalName(container.getInternalName()); + /* check */ + final Optional<Container> optional = containerRepository.findByInternalName( + containerMapper.containerToInternalContainerName(data.getName())); if (optional.isPresent()) { - log.error("Failed to create container with internal name {}, it already exists", container.getInternalName()); - throw new ContainerAlreadyExistsException("Container name already exists"); + log.error("Failed to create container with name {}: already exists in metadata database", data.getName()); + throw new ContainerAlreadyExistsException("Failed to create container with name " + data.getName() + ": already exists in metadata database"); + } + final Optional<ContainerImage> optional2 = imageRepository.findById(data.getImageId()); + if (optional2.isEmpty()) { + log.error("Failed to find image with id {} in metadata database", data.getImageId()); + throw new ImageNotFoundException("Failed to find image with id " + data.getImageId() + " in metadata database"); } - log.info("Created container {}", container.getId()); + /* entity */ + final Container container = Container.builder() + .image(optional2.get()) + .name(data.getName()) + .internalName(containerMapper.containerToInternalContainerName(data.getName())) + .build(); + log.info("Created container with id {} in metadata database", container.getId()); return container; } @Override @Transactional public void remove(Long containerId) throws ContainerNotFoundException { - final Container container = find(containerId); + /* check */ + find(containerId); + /* delete */ containerRepository.deleteById(containerId); - log.info("Removed container with id {}", containerId); + log.info("Deleted container with id {} in metadata database", containerId); } @Override @@ -74,8 +78,8 @@ public class ContainerServiceImpl implements ContainerService { public Container find(Long id) throws ContainerNotFoundException { final Optional<Container> container = containerRepository.findById(id); if (container.isEmpty()) { - log.error("failed to get container with id {}", id); - throw new ContainerNotFoundException("no container with this id in metadata database"); + log.error("Failed to find container with id {} in metadata database", id); + throw new ContainerNotFoundException("Failed to find container with id " + id + " in metadata database"); } return container.get(); } @@ -83,14 +87,11 @@ public class ContainerServiceImpl implements ContainerService { @Override @Transactional(readOnly = true) public List<Container> getAll(Integer limit) { - final List<Container> containers; if (limit == null) { - containers = containerRepository.findAll(Sort.by(Sort.Direction.DESC, "created")); + return containerRepository.findAll(Sort.by(Sort.Direction.DESC, "created")); } else { - containers = containerRepository.findAll(PageRequest.of(0, limit, Sort.by(Sort.Direction.DESC, "created"))) + return containerRepository.findAll(PageRequest.of(0, limit, Sort.by(Sort.Direction.DESC, "created"))) .toList(); } - log.info("Found {} containers", containers.size()); - return containers; } } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DataCiteIdentifierServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DataCiteIdentifierServiceImpl.java index 9d10b155a1f6f36f91f4f6730e94cb1db2f5d8dc..6a9ed0de7f90e32be4b4948a490df9df1b681aaf 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DataCiteIdentifierServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DataCiteIdentifierServiceImpl.java @@ -39,29 +39,29 @@ import java.util.List; public class DataCiteIdentifierServiceImpl implements IdentifierService { private final DataCiteConfig dataCiteConfig; - private final EndpointConfig endpointConfig; private final DataCiteMapper dataCiteMapper; + private final EndpointConfig endpointConfig; + private final IdentifierService identifierService; private final RestTemplateBuilder restTemplateBuilder; private final IdentifierRepository identifierRepository; - private final IdentifierService identifierService; public DataCiteIdentifierServiceImpl(DataCiteConfig dataCiteConfig, DataCiteMapper dataCiteMapper, - RestTemplateBuilder restTemplateBuilder, EndpointConfig endpointConfig, - IdentifierRepository identifierRepository, IdentifierServiceImpl identifierService) { + EndpointConfig endpointConfig, IdentifierRepository identifierRepository, + RestTemplateBuilder restTemplateBuilder, IdentifierServiceImpl identifierService) { this.dataCiteConfig = dataCiteConfig; this.dataCiteMapper = dataCiteMapper; + this.endpointConfig = endpointConfig; + this.identifierService = identifierService; this.restTemplateBuilder = restTemplateBuilder.basicAuthentication(dataCiteConfig.getUsername(), dataCiteConfig.getPassword()) .uriTemplateHandler(new DefaultUriBuilderFactory(dataCiteConfig.getUrl())); - this.endpointConfig = endpointConfig; this.identifierRepository = identifierRepository; - this.identifierService = identifierService; } @Override @Transactional(readOnly = true) - public List<Identifier> findAll(IdentifierTypeDto type, Long databaseId, Long queryId, Long viewId) { - return identifierService.findAll(type, databaseId, queryId, viewId); + public List<Identifier> findAll(IdentifierTypeDto type, Long databaseId, Long queryId, Long viewId, Long tableId) { + return identifierService.findAll(type, databaseId, queryId, viewId, tableId); } @Override @@ -86,7 +86,7 @@ public class DataCiteIdentifierServiceImpl implements IdentifierService { throws IdentifierPublishingNotAllowedException, QueryNotFoundException, RemoteUnavailableException, IdentifierAlreadyExistsException, UserNotFoundException, DatabaseNotFoundException, IdentifierRequestException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, - ImageNotSupportedException { + ImageNotSupportedException, IdentifierNotFoundException { final Identifier identifier = identifierService.create(data, principal); /* https://stackoverflow.com/questions/55090541/spring-data-jpa-lombok-unsupportedoperationexception-during-saving */ if (identifier.getCreators() != null) { @@ -196,63 +196,9 @@ public class DataCiteIdentifierServiceImpl implements IdentifierService { return identifierService.exportResource(identifierId, principal); } - @Override - @Transactional(rollbackFor = {Exception.class}) - public Identifier update(Long identifierId, IdentifierSaveDto data, Principal principal) - throws UserNotFoundException, QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, - IdentifierRequestException, IdentifierNotFoundException, QueryStoreException, DatabaseConnectionException, - ImageNotSupportedException { - Identifier identifier = identifierService.update(identifierId, data, principal); - if (identifier.getDoi() == null) { - return identifier; - } - - RestTemplate restTemplate = restTemplateBuilder.build(); - - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - headers.setBasicAuth(dataCiteConfig.getUsername(), dataCiteConfig.getPassword()); - HttpEntity<DataCiteBody<DataCiteCreateDoi>> request = new HttpEntity<>( - DataCiteBody.<DataCiteCreateDoi>builder() - .data(DataCiteData.<DataCiteCreateDoi>builder() - .type("dois") - .attributes(dataCiteMapper.identifierToDataCiteCreateDoi(identifier, - endpointConfig.getWebsiteUrl() + "/pid/" + identifier.getId(), - dataCiteConfig.getPrefix())) - .build()) - .build(), - headers - ); - - try { - ResponseEntity<DataCiteBody<DataCiteDoi>> response = restTemplate.exchange("dois/{doi}", HttpMethod.PUT, - request, - new ParameterizedTypeReference<>() { - }, - identifier.getDoi() - ); - - if (response.getStatusCode() != HttpStatus.OK || response.getBody() == null) { - log.error("Could not successfully create DOI. Response: {}", response); - throw new IdentifierRequestException("Could not successfully create DOI."); - } - - identifier.setDoi(response.getBody().getData().getAttributes().getDoi()); - this.identifierRepository.save(identifier); - } catch (HttpClientErrorException e) { - log.error("Invalid DOI metadata.", e); - throw new IdentifierRequestException("Invalid DOI metadata.", e); - } catch (RestClientException e) { - log.error("Could not fulfil request to DataCite server.", e); - throw new InternalError("Could not fulfil request to DataCite server.", e); - } - - return identifier; - } - @Override @Transactional - public void delete(Long identifierId) throws IdentifierNotFoundException { + public void delete(Long identifierId) throws IdentifierNotFoundException, DatabaseNotFoundException { identifierService.delete(identifierId); } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/EntityServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/EntityServiceImpl.java index 638942837e91b85353d7bce909e3eee7a2d992a1..1c0ca06c39e8cde9f2d4c0a0e066beefb41324b3 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/EntityServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/EntityServiceImpl.java @@ -2,14 +2,12 @@ package at.tuwien.service.impl; import at.tuwien.api.semantics.EntityDto; import at.tuwien.api.semantics.TableColumnEntityDto; +import at.tuwien.config.JenaConfig; import at.tuwien.entities.database.table.Table; import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.entities.semantics.Ontology; import at.tuwien.exception.*; import at.tuwien.mapper.OntologyMapper; -import at.tuwien.repository.mdb.OntologyRepository; -import at.tuwien.repository.mdb.TableColumnRepository; -import at.tuwien.repository.mdb.TableRepository; import at.tuwien.service.EntityService; import at.tuwien.service.OntologyService; import at.tuwien.service.TableService; @@ -26,46 +24,60 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Optional; +import java.util.concurrent.TimeUnit; @Log4j2 @Service public class EntityServiceImpl implements EntityService { private final Dataset dataset; + private final JenaConfig jenaConfig; + private final TableService tableService; private final OntologyMapper ontologyMapper; - private final OntologyRepository ontologyRepository; private final OntologyService ontologyService; - private final TableRepository tableRepository; - private final TableColumnRepository tableColumnRepository; @Autowired - public EntityServiceImpl(OntologyRepository ontologyRepository, OntologyMapper ontologyMapper, - OntologyService ontologyService, TableRepository tableRepository, - TableColumnRepository tableColumnRepository) { + public EntityServiceImpl(Dataset dataset, JenaConfig jenaConfig, TableService tableService, + OntologyMapper ontologyMapper, OntologyService ontologyService) { + this.dataset = dataset; + this.jenaConfig = jenaConfig; + this.tableService = tableService; this.ontologyMapper = ontologyMapper; - this.ontologyRepository = ontologyRepository; - this.dataset = DatasetFactory.create(); this.ontologyService = ontologyService; - this.tableRepository = tableRepository; - this.tableColumnRepository = tableColumnRepository; + } + + public void validateOntology(Ontology ontology) throws OntologyInvalidException { + if (ontology.getRdfPath() == null && ontology.getSparqlEndpoint() == null) { + log.error("Ontology with uri {} is invalid: no RDF file present and no SPARQL endpoint found", ontology.getUri()); + throw new OntologyInvalidException("Ontology with uri " + ontology.getUri() + " is invalid: no RDF file present and no SPARQL endpoint found"); + } } @Override - public List<EntityDto> findByLabel(Ontology ontology, String label) throws QueryMalformedException { + public List<EntityDto> findByLabel(Ontology ontology, String label) throws QueryMalformedException, + OntologyInvalidException { return findByLabel(ontology, label, 10); } @Override - public List<EntityDto> findByLabel(Ontology ontology, String label, Integer limit) throws QueryMalformedException { - final List<Ontology> ontologies = ontologyRepository.findAll(); + public List<EntityDto> findByLabel(Ontology ontology, String label, Integer limit) throws QueryMalformedException, + OntologyInvalidException { + /* check */ + validateOntology(ontology); + /* find */ + final List<Ontology> ontologies = ontologyService.findAll(); final String statement = ontologyMapper.ontologyToFindByLabelQuery(ontologies, ontology, label, limit); log.trace("execute sparql query:\n{}", statement); final List<EntityDto> results = new LinkedList<>(); if (ontology.getSparqlEndpoint() == null && ontology.getRdfPath() != null) { - log.debug("load RDF model from path {}", ontology.getRdfPath()); + log.debug("load rdf model from path {}", ontology.getRdfPath()); this.dataset.setDefaultModel(RDFDataMgr.loadModel(ontology.getRdfPath())); } - try (QueryExecution execution = QueryExecutionFactory.create(statement, this.dataset.getDefaultModel())) { + try (QueryExecution execution = QueryExecutionDatasetBuilder.create() + .model(this.dataset.getDefaultModel()) + .query(statement) + .timeout(jenaConfig.getConnectionTimeout(), TimeUnit.MILLISECONDS) + .build()) { final Iterator<QuerySolution> resultSet = execution.execSelect(); while (resultSet.hasNext()) { final QuerySolution solution = resultSet.next(); @@ -85,11 +97,19 @@ public class EntityServiceImpl implements EntityService { } @Override - public List<EntityDto> findByUri(Ontology ontology, String uri) throws QueryMalformedException { - final List<Ontology> ontologies = ontologyRepository.findAll(); + public List<EntityDto> findByUri(Ontology ontology, String uri) throws QueryMalformedException, + OntologyInvalidException { + /* check */ + validateOntology(ontology); + /* find */ + final List<Ontology> ontologies = ontologyService.findAll(); final String statement = ontologyMapper.ontologyToFindByUriQuery(ontologies, ontology, uri); log.trace("execute sparql query:\n{}", statement); - try (QueryExecution execution = QueryExecutionFactory.create(statement, this.dataset.getDefaultModel())) { + try (QueryExecution execution = QueryExecutionDatasetBuilder.create() + .model(this.dataset.getDefaultModel()) + .query(statement) + .timeout(jenaConfig.getConnectionTimeout(), TimeUnit.MILLISECONDS) + .build()) { final Iterator<QuerySolution> resultSet = execution.execSelect(); final List<EntityDto> results = new LinkedList<>(); while (resultSet.hasNext()) { @@ -106,13 +126,16 @@ public class EntityServiceImpl implements EntityService { return results; } catch (QueryParseException | IllegalArgumentException | RiotException e) { log.error("Failed to parse query: {}", e.getMessage()); - throw new QueryMalformedException("Failed to parse query: " + e.getMessage(), e); + throw new QueryMalformedException("Failed to parse query", e); } } @Override public EntityDto findOneByUri(Ontology ontology, String uri) throws QueryMalformedException, - SemanticEntityNotFoundException { + SemanticEntityNotFoundException, OntologyInvalidException { + /* check */ + validateOntology(ontology); + /* find */ final List<EntityDto> results = findByUri(ontology, uri); if (results.size() != 1) { log.error("None or multiple entities found for uri {}", uri); @@ -124,30 +147,32 @@ public class EntityServiceImpl implements EntityService { @Override @Transactional(readOnly = true) public List<EntityDto> suggestTableSemantics(Long databaseId, Long tableId) throws TableNotFoundException, - QueryMalformedException { - final Optional<Table> table = tableRepository.findByDatabaseIdAndId(databaseId, tableId); - if(table.isEmpty()) { - throw new TableNotFoundException("Failed to find table with database id " + databaseId + " and id " + tableId); - } + QueryMalformedException, DatabaseNotFoundException, OntologyInvalidException { + final Table table = tableService.find(databaseId, tableId); final List<EntityDto> suggestions = new LinkedList<>(); - for (Ontology ontology : ontologyService.findAll()) { - suggestions.addAll(findByLabel(ontology, table.get().getName(), 3)); + for (Ontology ontology : ontologyService.findAllProcessable()) { + suggestions.addAll(findByLabel(ontology, table.getName(), 3)); } - log.debug("suggested {} semantic entities total", suggestions.size()); + log.debug("suggested {} semantic entit{}", suggestions.size(), suggestions.size() == 1 ? "y" : "ies"); return suggestions; } @Override @Transactional(readOnly = true) public List<TableColumnEntityDto> suggestTableColumnSemantics(Long databaseId, Long tableId, Long columnId) - throws QueryMalformedException, TableColumnNotFoundException { - final Optional<TableColumn> optional = tableColumnRepository.findById(columnId); + throws QueryMalformedException, TableColumnNotFoundException, TableNotFoundException, + DatabaseNotFoundException, OntologyInvalidException { + final Optional<TableColumn> optional = tableService.find(databaseId, tableId) + .getColumns() + .stream() + .filter(c -> c.getId().equals(columnId)) + .findFirst(); if (optional.isEmpty()) { log.error("Failed to find column with id {}", columnId); throw new TableColumnNotFoundException("Failed to find column with id " + columnId); } final List<TableColumnEntityDto> suggestions = new LinkedList<>(); - for (Ontology ontology : ontologyService.findAll()) { + for (Ontology ontology : ontologyService.findAllProcessable()) { suggestions.addAll(findByLabel(ontology, optional.get().getName(), 3) .stream() .map(e -> TableColumnEntityDto.builder() @@ -160,7 +185,7 @@ public class EntityServiceImpl implements EntityService { .build()) .toList()); } - log.debug("suggested {} semantic entities total", suggestions.size()); + log.debug("suggested {} semantic entit{}", suggestions.size(), suggestions.size() == 1 ? "y" : "ies"); return suggestions; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java index 2cfc3b74ca9276530047b67e0729ffd235ca7124..5e57b6c0f5f4ad2e9c46bb0569a0af1654a73de1 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java @@ -1,6 +1,7 @@ package at.tuwien.service.impl; import at.tuwien.ExportResource; +import at.tuwien.api.database.DatabaseDto; import at.tuwien.api.identifier.*; import at.tuwien.config.MetadataConfig; import at.tuwien.entities.database.Database; @@ -10,11 +11,12 @@ import at.tuwien.entities.identifier.Identifier; import at.tuwien.entities.identifier.IdentifierTitle; import at.tuwien.entities.identifier.IdentifierType; import at.tuwien.exception.*; +import at.tuwien.mapper.DatabaseMapper; import at.tuwien.mapper.IdentifierMapper; import at.tuwien.mapper.MetadataMapper; import at.tuwien.querystore.Query; import at.tuwien.repository.mdb.IdentifierRepository; -import at.tuwien.repository.sdb.IdentifierIdxRepository; +import at.tuwien.repository.sdb.DatabaseIdxRepository; import at.tuwien.service.*; import at.tuwien.utils.UserUtil; import lombok.extern.slf4j.Slf4j; @@ -28,9 +30,7 @@ import org.thymeleaf.exceptions.TemplateInputException; import java.nio.charset.Charset; import java.security.Principal; -import java.util.List; -import java.util.Objects; -import java.util.Optional; +import java.util.*; import java.util.stream.Stream; @Slf4j @@ -40,29 +40,32 @@ public class IdentifierServiceImpl implements IdentifierService { private final ViewService viewService; private final QueryService queryService; private final StoreService storeService; + private final DatabaseMapper databaseMapper; private final MetadataConfig metadataConfig; private final MetadataMapper metadataMapper; private final TemplateEngine templateEngine; private final DatabaseService databaseService; private final IdentifierMapper identifierMapper; private final IdentifierRepository identifierRepository; - private final IdentifierIdxRepository identifierIdxRepository; + private final DatabaseIdxRepository databaseIdxRepository; public IdentifierServiceImpl(ViewService viewService, TemplateEngine templateEngine, DatabaseService databaseService, IdentifierMapper identifierMapper, - QueryService queryService, StoreService storeService, MetadataConfig metadataConfig, - MetadataMapper metadataMapper, IdentifierRepository identifierRepository, - IdentifierIdxRepository identifierIdxRepository) { + QueryService queryService, StoreService storeService, DatabaseMapper databaseMapper, + MetadataConfig metadataConfig, MetadataMapper metadataMapper, + IdentifierRepository identifierRepository, + DatabaseIdxRepository databaseIdxRepository) { this.viewService = viewService; this.queryService = queryService; this.storeService = storeService; + this.databaseMapper = databaseMapper; this.metadataConfig = metadataConfig; this.metadataMapper = metadataMapper; this.templateEngine = templateEngine; this.databaseService = databaseService; this.identifierMapper = identifierMapper; this.identifierRepository = identifierRepository; - this.identifierIdxRepository = identifierIdxRepository; + this.databaseIdxRepository = databaseIdxRepository; } @Override @@ -116,8 +119,9 @@ public class IdentifierServiceImpl implements IdentifierService { @Override @Transactional(readOnly = true) - public List<Identifier> findAll(IdentifierTypeDto type, Long databaseId, Long queryId, Long viewId) { + public List<Identifier> findAll(IdentifierTypeDto type, Long databaseId, Long queryId, Long viewId, Long tableId) { final List<Identifier> identifiers = this.identifierRepository.findAll(); + log.trace("found {} identifiers before applying filter(s)", identifiers.size()); Stream<Identifier> stream = identifiers.stream(); if (type != null) { log.trace("filter by type: {}", type); @@ -139,6 +143,11 @@ public class IdentifierServiceImpl implements IdentifierService { stream = stream.filter(i -> Objects.nonNull(i.getViewId())) .filter(i -> i.getViewId().equals(viewId)); } + if (tableId != null) { + log.trace("filter by table id: {}", tableId); + stream = stream.filter(i -> Objects.nonNull(i.getTableId())) + .filter(i -> i.getTableId().equals(tableId)); + } return stream.toList(); } @@ -148,47 +157,44 @@ public class IdentifierServiceImpl implements IdentifierService { throws QueryNotFoundException, RemoteUnavailableException, IdentifierAlreadyExistsException, UserNotFoundException, DatabaseNotFoundException, IdentifierPublishingNotAllowedException, IdentifierRequestException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, - ImageNotSupportedException { - /* check */ - if (data.getType().equals(IdentifierTypeDto.DATABASE) && identifierRepository.existsByDatabaseIdAndType(data.getDatabaseId(), IdentifierType.DATABASE)) { - log.error("Identifier already issued for database with id {}", data.getDatabaseId()); - throw new IdentifierAlreadyExistsException("Database identifier already exists"); - } else if (data.getType().equals(IdentifierTypeDto.SUBSET) && identifierRepository.existsByDatabaseIdAndQueryIdAndType(data.getDatabaseId(), data.getQueryId(), IdentifierType.SUBSET)) { - log.error("Identifier already issued for database with id {} and query with id {}", data.getDatabaseId(), data.getQueryId()); - throw new IdentifierAlreadyExistsException("Subset identifier already exists"); - } + ImageNotSupportedException, IdentifierNotFoundException { /* create identifier */ - final Identifier identifier = identifierMapper.identifierCreateDtoToIdentifier(data); - identifier.setCreatedBy(UserUtil.getId(principal)); - identifier.setDatabaseId(data.getDatabaseId()); + final Identifier entity = identifierMapper.identifierCreateDtoToIdentifier(data); + entity.setCreatedBy(UserUtil.getId(principal)); + entity.setDatabaseId(data.getDatabaseId()); final Database database = databaseService.find(data.getDatabaseId()); - identifier.setDatabase(database); - if (data.getType().equals(IdentifierTypeDto.SUBSET)) { - log.debug("identifier type: subset"); - final Query query = storeService.findOne(data.getDatabaseId(), data.getQueryId(), principal); - identifier.setQuery(query.getQuery()); - identifier.setQueryId(query.getId()); - identifier.setQueryNormalized(query.getQueryNormalized()); - identifier.setQueryHash(query.getQueryHash()); - identifier.setExecution(query.getExecuted()); - identifier.setResultNumber(query.getResultNumber()); - identifier.setResultHash(query.getResultHash()); - } else if (data.getType().equals(IdentifierTypeDto.VIEW)) { - log.debug("identifier type: view"); - final View view = viewService.findById(data.getViewId()); - identifier.setViewId(view.getId()); - identifier.setQuery(view.getQuery()); - identifier.setQueryNormalized(view.getQuery()); - identifier.setQueryHash(view.getQueryHash()); + entity.setDatabase(database); + switch (data.getType()) { + case SUBSET -> { + log.debug("identifier type: subset with id {} and database with id {}", data.getQueryId(), data.getDatabaseId()); + final Query query = storeService.findOne(data.getDatabaseId(), data.getQueryId(), principal); + entity.setQuery(query.getQuery()); + entity.setQueryId(query.getId()); + entity.setQueryNormalized(query.getQueryNormalized()); + entity.setQueryHash(query.getQueryHash()); + entity.setExecution(query.getExecuted()); + entity.setResultNumber(query.getResultNumber()); + entity.setResultHash(query.getResultHash()); + } + case VIEW -> { + log.debug("identifier type: view with id {} and database with id {}", data.getViewId(), data.getDatabaseId()); + final View view = viewService.findById(data.getViewId()); + entity.setViewId(view.getId()); + entity.setQuery(view.getQuery()); + entity.setQueryNormalized(view.getQuery()); + entity.setQueryHash(view.getQueryHash()); + } + case DATABASE -> log.debug("identifier type: database with id {}", data.getDatabaseId()); + case TABLE -> log.debug("identifier type: table with id {}", data.getTableId()); } /* create in metadata database */ - final Identifier entity = saveIdentifier(identifier, data.getCreators(), data.getRelatedIdentifiers(), + final Identifier identifier = saveIdentifier(database, entity, data.getCreators(), data.getRelatedIdentifiers(), data.getTitles(), data.getDescriptions(), data.getFunders()); - log.info("Created identifier with id {} in metadata database", entity.getId()); - /* create in open search database */ - identifierIdxRepository.save(identifierMapper.identifierToIdentifierDto(entity)); - log.info("Created identifier with id {} in open search database", entity.getId()); - return entity; + /* create in search database */ + final DatabaseDto dto = databaseMapper.databaseToDatabaseDto(database); + databaseIdxRepository.save(dto); + log.info("Created identifier with id {} in metadata database & search database", identifier.getId()); + return identifier; } @Override @@ -258,57 +264,13 @@ public class IdentifierServiceImpl implements IdentifierService { @Override @Transactional - public Identifier update(Long identifierId, IdentifierSaveDto data, Principal principal) - throws UserNotFoundException, DatabaseNotFoundException, QueryNotFoundException, RemoteUnavailableException, - IdentifierNotFoundException, QueryStoreException, DatabaseConnectionException, ImageNotSupportedException { - /* find doi */ - final Identifier oldIdentifier = find(identifierId); - /* create identifier */ - final Identifier identifier = identifierMapper.identifierUpdateDtoToIdentifier(data); - identifier.setId(identifierId); - identifier.setDoi(oldIdentifier.getDoi()); - identifier.setCreatedBy(UserUtil.getId(principal)); - final Database database = databaseService.find(data.getDatabaseId()); - identifier.setDatabase(database); - if (data.getType().equals(IdentifierTypeDto.SUBSET)) { - log.debug("identifier describes a subset"); - final IdentifierSaveDto payload = identifierMapper.identifierUpdateDtoToIdentifierCreateDto(data); - final Query query = storeService.findOne(data.getDatabaseId(), payload.getQueryId(), principal); - identifier.setQuery(query.getQuery()); - identifier.setQueryId(query.getId()); - identifier.setQueryNormalized(query.getQueryNormalized()); - identifier.setQueryHash(query.getQueryHash()); - identifier.setExecution(query.getExecuted()); - identifier.setResultNumber(query.getResultNumber()); - identifier.setResultHash(query.getResultHash()); - } - /* update in metadata database */ - final Identifier entity = saveIdentifier(identifier, data.getCreators(), data.getRelatedIdentifiers(), - data.getTitles(), data.getDescriptions(), data.getFunders()); - log.info("Updated identifier with id {} in metadata database", identifierId); - /* update in open search database */ - identifierIdxRepository.save(identifierMapper.identifierToIdentifierDto(entity)); - log.info("Updated identifier with id {} in open search database", identifierId); - return entity; - } - - @Override - @Transactional - public void delete(Long identifierId) throws IdentifierNotFoundException { + public void delete(Long identifierId) throws IdentifierNotFoundException, DatabaseNotFoundException { /* delete in metadata database */ - if (!identifierRepository.existsById(identifierId)) { - log.error("Failed to find identifier with id {} in metadata database", identifierId); - throw new IdentifierNotFoundException("Failed to find identifier with id " + identifierId + " in metadata database"); - } + final Identifier identifier = find(identifierId); identifierRepository.deleteById(identifierId); - log.info("Deleted identifier with id {} in metadata database", identifierId); - /* delete in elastic search */ - if (!identifierIdxRepository.existsById(identifierId)) { - log.error("Failed to find identifier with id {} in open search database", identifierId); - throw new IdentifierNotFoundException("Failed to find identifier with id " + identifierId + " in open search database"); - } - identifierIdxRepository.deleteById(identifierId); - log.info("Deleted identifier with id {} in open search database", identifierId); + /* delete in opensearch database */ + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(databaseService.find(identifier.getDatabaseId()))); + log.info("Deleted identifier with id {} in metadata database & search database", identifierId); } public IdentifierTitle preferTitle(List<IdentifierTitle> titles) { @@ -319,49 +281,53 @@ public class IdentifierServiceImpl implements IdentifierService { return optional.orElseGet(() -> titles.get(0)); } - public Identifier saveIdentifier(Identifier identifier, List<CreatorSaveDto> creators, + public Identifier saveIdentifier(Database database, Identifier entity, List<CreatorSaveDto> creators, List<RelatedIdentifierSaveDto> relatedIdentifiers, List<IdentifierSaveTitleDto> titles, List<IdentifierSaveDescriptionDto> descriptions, List<IdentifierFunderSaveDto> funders) { /* create in metadata database */ if (creators != null) { - identifier.setCreators(creators.stream() + entity.setCreators(creators.stream() .map(identifierMapper::creatorCreateDtoToCreator) - .peek(c -> c.setIdentifier(identifier)) + .peek(c -> c.setIdentifier(entity)) .toList()); - log.debug("set {} creator(s)", identifier.getCreators().size()); + log.debug("set {} creator(s)", entity.getCreators().size()); } if (relatedIdentifiers != null) { - identifier.setRelatedIdentifiers(relatedIdentifiers.stream() + entity.setRelatedIdentifiers(relatedIdentifiers.stream() .map(identifierMapper::relatedIdentifierCreateDtoToRelatedIdentifier) - .peek(r -> r.setIdentifier(identifier)) + .peek(r -> r.setIdentifier(entity)) .toList()); - log.debug("set {} related identifier(s)", identifier.getRelatedIdentifiers().size()); + log.debug("set {} related identifier(s)", entity.getRelatedIdentifiers().size()); } if (titles != null) { - identifier.setTitles(null); - identifier.setTitles(titles.stream() + entity.setTitles(null); + entity.setTitles(titles.stream() .map(identifierMapper::identifierCreateTitleDtoToIdentifierTitle) - .peek(t -> t.setIdentifier(identifier)) + .peek(t -> t.setIdentifier(entity)) .toList()); - log.debug("set {} title(s)", identifier.getTitles().size()); + log.debug("set {} title(s)", entity.getTitles().size()); } if (descriptions != null) { - identifier.setDescriptions(descriptions.stream() + entity.setDescriptions(descriptions.stream() .map(identifierMapper::identifierCreateDescriptionDtoToIdentifierDescription) - .peek(d -> d.setIdentifier(identifier)) + .peek(d -> d.setIdentifier(entity)) .toList()); - log.debug("set {} description(s)", identifier.getDescriptions().size()); + log.debug("set {} description(s)", entity.getDescriptions().size()); } if (funders != null) { - identifier.setFunders(funders.stream() + entity.setFunders(funders.stream() .map(identifierMapper::identifierFunderSaveDtoToIdentifierFunder) - .peek(d -> d.setIdentifier(identifier)) + .peek(d -> d.setIdentifier(entity)) .toList()); - log.debug("set {} funder(s)", identifier.getFunders().size()); + log.debug("set {} funder(s)", entity.getFunders().size()); } - return identifierRepository.save(identifier); + /* create new identifier */ + final Identifier identifier = identifierRepository.save(entity); + database.setIdentifiers(new ArrayList<>(database.getIdentifiers())); + database.getIdentifiers().add(identifier); + return identifier; } } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java index 260f95dd9c8c09c50dafbd4382c1298eb136fe6f..28ada413a74d01b6d363ebc8d30353c7e9c2c321 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java @@ -46,7 +46,7 @@ public class ImageServiceImpl implements ImageService { final Optional<ContainerImage> image = imageRepository.findById(imageId); if (image.isEmpty()) { log.error("Failed to find image with id {} in metadata database", imageId); - throw new ImageNotFoundException("Failed to find image"); + throw new ImageNotFoundException("Failed to find image with id " + imageId + " in metadata database"); } return image.get(); } @@ -56,9 +56,9 @@ public class ImageServiceImpl implements ImageService { public ContainerImage create(ImageCreateDto createDto, Principal principal) throws ImageAlreadyExistsException { final ContainerImage image = imageMapper.createImageDtoToContainerImage(createDto); if (imageRepository.findByNameAndVersion(createDto.getName(), createDto.getVersion()).isPresent()) { - log.error("Failed to create image {}:{}, it already exists in the metadata database", + log.error("Failed to create image {}:{}: exists in the metadata database", createDto.getName(), createDto.getVersion()); - throw new ImageAlreadyExistsException("Failed to create image " + createDto.getName() + ":" + createDto.getVersion()); + throw new ImageAlreadyExistsException("Failed to create image " + createDto.getName() + ":" + createDto.getVersion() + ": exists in the metadata database"); } final ContainerImage dto; try { @@ -67,8 +67,7 @@ public class ImageServiceImpl implements ImageService { log.error("Failed to create image: {}", e.getMessage()); throw new ImageAlreadyExistsException("Failed to create image", e); } - log.info("Created image {}", dto.getId()); - log.trace("created image {}", dto); + log.info("Created image with id {} in metadata database", dto.getId()); return dto; } @@ -86,22 +85,20 @@ public class ImageServiceImpl implements ImageService { image.setJdbcMethod(changeDto.getJdbcMethod()); /* update metadata db */ final ContainerImage out = imageRepository.save(image); - log.info("Updated image with id {}", out.getId()); + log.info("Updated image with id {} in metadata database", out.getId()); return out; } @Override @Transactional public void delete(Long imageId) throws ImageNotFoundException { - if (!imageRepository.existsById(imageId)) { - throw new ImageNotFoundException("Image with id " + imageId + " not found"); - } + find(imageId); try { imageRepository.deleteById(imageId); - log.info("Deleted image {}", imageId); + log.info("Deleted image with id {} in metadata database", imageId); } catch (EntityNotFoundException | EmptyResultDataAccessException | DataIntegrityViolationException e) { - log.error("Failed to delete image with id {} with constraint, reason: {}", imageId, e.getMessage()); - throw new ImageNotFoundException("Failed to delete image with constraint", e); + log.error("Failed to delete image with id {} with constraint: {}", imageId, e.getMessage()); + throw new ImageNotFoundException("Failed to delete image with id " + imageId + " with constraint", e); } } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/LicenseServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/LicenseServiceImpl.java index 22a7634c3c29728ecb2ddf4f6b0c88869b4bf405..3f558d93edc76cde93fd9f64ed279fba925d0625 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/LicenseServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/LicenseServiceImpl.java @@ -29,8 +29,8 @@ public class LicenseServiceImpl implements LicenseService { public License find(String identifier) throws LicenseNotFoundException { final Optional<License> license = licenseRepository.findByIdentifier(identifier); if (license.isEmpty()) { - log.error("Failed to find license for identifier {}", identifier); - throw new LicenseNotFoundException("Failed to find license"); + log.error("Failed to find license with identifier {} in metadata database", identifier); + throw new LicenseNotFoundException("Failed to find license with identifier " + identifier + " in metadata database"); } return license.get(); } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java index cc669575fff1d6b38df045e8a8bc1735cc08a949..0fa65b87a8f9ace956c9a0bef9c49f4511ac3d67 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java @@ -5,10 +5,19 @@ import at.tuwien.api.database.DatabaseModifyVisibilityDto; import at.tuwien.api.database.DatabaseTransferDto; import at.tuwien.config.QueryConfig; import at.tuwien.entities.container.Container; +import at.tuwien.entities.container.image.ContainerImageDate; import at.tuwien.entities.database.Database; +import at.tuwien.entities.database.View; +import at.tuwien.entities.database.table.Table; +import at.tuwien.entities.database.table.constraints.Constraints; +import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKey; +import at.tuwien.entities.database.table.constraints.unique.Unique; import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.mapper.DatabaseMapper; +import at.tuwien.mapper.QueryMapper; +import at.tuwien.mapper.TableMapper; +import at.tuwien.repository.mdb.ContainerRepository; import at.tuwien.repository.mdb.DatabaseRepository; import at.tuwien.repository.sdb.DatabaseIdxRepository; import at.tuwien.service.ContainerService; @@ -16,6 +25,7 @@ import at.tuwien.service.DatabaseService; import at.tuwien.service.UserService; import com.mchange.v2.c3p0.ComboPooledDataSource; import lombok.extern.log4j.Log4j2; +import net.sf.jsqlparser.JSQLParserException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -23,31 +33,37 @@ import org.springframework.transaction.annotation.Transactional; import java.security.Principal; import java.sql.Connection; import java.sql.PreparedStatement; +import java.sql.ResultSet; import java.sql.SQLException; -import java.util.List; -import java.util.Optional; -import java.util.UUID; +import java.util.*; @Log4j2 @Service public class MariaDbServiceImpl extends HibernateConnector implements DatabaseService { private final QueryConfig queryConfig; + private final QueryMapper queryMapper; + private final TableMapper tableMapper; private final UserService userService; private final DatabaseMapper databaseMapper; private final ContainerService containerService; private final DatabaseRepository databaseRepository; + private final ContainerRepository containerRepository; private final DatabaseIdxRepository databaseIdxRepository; @Autowired - public MariaDbServiceImpl(QueryConfig queryConfig, UserService userService, DatabaseMapper databaseMapper, - ContainerService containerService, DatabaseRepository databaseRepository, + public MariaDbServiceImpl(QueryConfig queryConfig, QueryMapper queryMapper, TableMapper tableMapper, + UserService userService, DatabaseMapper databaseMapper, ContainerService containerService, + DatabaseRepository databaseRepository, ContainerRepository containerRepository, DatabaseIdxRepository databaseIdxRepository) { this.queryConfig = queryConfig; + this.queryMapper = queryMapper; + this.tableMapper = tableMapper; this.userService = userService; this.databaseMapper = databaseMapper; this.containerService = containerService; this.databaseRepository = databaseRepository; + this.containerRepository = containerRepository; this.databaseIdxRepository = databaseIdxRepository; } @@ -65,8 +81,8 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe public Database find(Long databaseId) throws DatabaseNotFoundException { final Optional<Database> database = databaseRepository.findById(databaseId); if (database.isEmpty()) { - log.error("Failed to find database with id {}", databaseId); - throw new DatabaseNotFoundException("could not find database with this id"); + log.error("Failed to find database with id {} in metadata database", databaseId); + throw new DatabaseNotFoundException("could not find database with id " + databaseId + " in metadata database"); } return database.get(); } @@ -83,8 +99,8 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe database = databaseRepository.findPublicOrMine(databaseId, userId); } if (database.isEmpty()) { - log.error("Failed to find database with id {}", databaseId); - throw new DatabaseNotFoundException("Failed to find database with id " + databaseId); + log.error("Failed to find database with id {} in metadata database", databaseId); + throw new DatabaseNotFoundException("Failed to find database with id " + databaseId + " in metadata database"); } return database.get(); } @@ -94,46 +110,12 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe public Database findById(Long id) throws DatabaseNotFoundException { final Optional<Database> database = databaseRepository.findById(id); if (database.isEmpty()) { - log.error("Failed to find database with id {}", id); - throw new DatabaseNotFoundException("could not find database with id " + id); + log.error("Failed to find database with id {} in metadata database", id); + throw new DatabaseNotFoundException("could not find database with id " + id + " in metadata database"); } return database.get(); } - @Override - @Transactional - public void delete(Long databaseId, UUID userId) throws DatabaseNotFoundException, - ImageNotSupportedException, DatabaseMalformedException, DatabaseConnectionException, - QueryMalformedException, UserNotFoundException { - final Database database = findById(databaseId); - if (!database.getContainer().getImage().getName().equals("mariadb")) { - log.error("Currently only MariaDB is supported"); - throw new ImageNotSupportedException("Currently only MariaDB is supported"); - } - if (!database.getOwnedBy().equals(userId)) { - log.error("Failed to delete database: user is not owner"); - throw new DatabaseMalformedException("Failed to delete database: user is not owner"); - } - /* run query */ - final ComboPooledDataSource dataSource = getPrivilegedDataSource(database.getContainer().getImage(), database.getContainer(), database); - try { - final Connection connection = dataSource.getConnection(); - final PreparedStatement preparedStatement = databaseMapper.databaseToRawDeleteDatabaseQuery(connection, database); - preparedStatement.executeUpdate(); - } catch (SQLException e) { - log.error("Failed to delete database {}, reason: {}", database, e.getMessage()); - throw new DatabaseMalformedException("Failed to delete database", e); - } finally { - dataSource.close(); - } - /* save in metadata database */ - databaseRepository.deleteById(databaseId); - log.info("Deleted database with id {} in metadata database", databaseId); - /* save in open search database */ - databaseIdxRepository.deleteById(databaseId); - log.info("Deleted database with id {} in open search database", databaseId); - } - @Override @Transactional public Database create(DatabaseCreateDto createDto, Principal principal) @@ -162,24 +144,22 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe final PreparedStatement preparedStatement3 = databaseMapper.rawGrantCreatorAccessQuery(connection, database.getInternalName(), principal.getName(), queryConfig.getGrantPrivileges()); preparedStatement3.executeUpdate(); } catch (SQLException e) { - log.error("Failed to create database with internal name {}, reason: {}", database.getInternalName(), e.getMessage()); - throw new DatabaseMalformedException("Failed to create database: " + e.getMessage(), e); + log.error("Failed to create database/-user: {}", e.getMessage()); + throw new DatabaseMalformedException("Failed to create database/-user", e); } finally { dataSource.close(); } - log.info("Created user {} on database with owner access", owner.getUsername()); /* save in metadata database */ final Database entity = databaseRepository.save(database); - log.info("Created database with id {} in metadata database", entity.getId()); /* save in open search database */ databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(entity)); - log.info("Created database with id {} in open search database", entity.getId()); + log.info("Created database with id {} and saved it in the metadata database & search database", entity.getId()); return entity; } @Override @Transactional(readOnly = true) - public void updatePassword(User user) throws DatabaseMalformedException, QueryMalformedException { + public void updatePassword(User user) throws QueryMalformedException { /* start the object */ final List<Database> databases = databaseRepository.findReadAccess(user.getId()) .stream() @@ -195,12 +175,13 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe preparedStatement.executeUpdate(); } catch (SQLException e) { log.error("Failed to update user password in database with internal name {}: {}", database.getInternalName(), e.getMessage()); - throw new DatabaseMalformedException("Failed to update user password in database with internal name " + database.getInternalName() + ": " + e.getMessage(), e); + throw new QueryMalformedException("Failed to update user password in database with internal name " + database.getInternalName() + ": " + e.getMessage(), e); } finally { dataSource.close(); } log.debug("updated user password in database with internal name {}", database.getInternalName()); } + log.info("Updated user password in {} database(s)", databases.size()); } @Override @@ -212,10 +193,9 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe database.setIsPublic(data.getIsPublic()); /* update entity in metadata database */ final Database entity = databaseRepository.save(database); - log.info("Updated database visibility of database with id {} in metadata database", entity.getId()); /* update in open search database */ databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(entity)); - log.info("Updated database visibility of database with id {} in open search database", entity.getId()); + log.info("Updated database visibility of database with id {} in metadata database & search database", entity.getId()); return entity; } @@ -229,11 +209,116 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe /* update in metadata database */ database.setOwnedBy(user.getId()); final Database entity = databaseRepository.save(database); - log.info("Updated database owner of database with id {} in metadata database", entity.getId()); /* save in open search database */ databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(entity)); - log.info("Updated database owner of database with id {} in open search database", entity.getId()); + log.info("Updated database owner of database with id {} in metadata database & search database", entity.getId()); + return entity; + } + + @Override + @Transactional + public Database obtainMetadata(Long databaseId) throws DatabaseNotFoundException, QueryMalformedException, + DatabaseUnchangedException, ColumnParseException { + /* check */ + final Database database = findById(databaseId); + final List<Table> diffTables; + final List<View> diffViews; + final ComboPooledDataSource dataSource = getPrivilegedDataSource(database.getContainer().getImage(), database.getContainer()); + try { + final Connection connection = dataSource.getConnection(); + final PreparedStatement preparedStatement0 = databaseMapper.databaseToDatabaseMetadata(connection, database); + diffTables = tableMapper.resultListToTableList(preparedStatement0.executeQuery(), database) + .stream() + .filter(table -> database.getTables() + .stream() + .noneMatch(t -> t.getInternalName().equals(table.getInternalName()))) + .toList(); + diffViews = tableMapper.resultListToViewList(preparedStatement0.executeQuery(), database) + .stream() + .filter(view -> database.getViews() + .stream() + .noneMatch(v -> v.getInternalName().equals(view.getInternalName()))) + .toList(); + if (diffTables.isEmpty() && diffViews.isEmpty()) { + log.debug("database with id {} does not contain any unknown tables and any unknown views", databaseId); + throw new DatabaseUnchangedException("Database with id " + databaseId + " does not contain any unknown tables and any unknown views"); + } + /* default times */ + final Optional<ContainerImageDate> defaultDateFormat = containerRepository.findDefaultDateFormat(); + if (defaultDateFormat.isEmpty()) { + log.error("Failed to find default date format in metadata database"); + throw new ColumnParseException("Failed to find default date format in metadata database"); + } + final Optional<ContainerImageDate> defaultTimestampFormat = containerRepository.findDefaultTimestampFormat(); + if (defaultTimestampFormat.isEmpty()) { + log.error("Failed to find default timestamp format in metadata database"); + throw new ColumnParseException("Failed to find default timestamp format in metadata database"); + } + /* obtain table schema */ + log.info("Database with id {} contains {} unknown table(s) and {} unknown view(s)", databaseId, diffTables.size(), diffViews.size()); + log.debug("database with id {} misses table(s) in metadata database: {}", databaseId, diffTables.stream().map(Table::getInternalName).toList()); + for (Table table : diffTables) { + final PreparedStatement preparedStatement1 = queryMapper.obtainTableMetadataRawQuery(connection, table.getDatabase().getInternalName(), table.getInternalName()); + table = tableMapper.resultSetTableToObtainedMetadata(preparedStatement1.executeQuery(), table, + defaultDateFormat.get(), defaultTimestampFormat.get()); + if (!table.getIsVersioned()) { + log.debug("table with name {} is not system-versioned", table.getInternalName()); + final PreparedStatement preparedStatement2 = queryMapper.tableEnableSystemVersioning(connection, table.getDatabase().getInternalName(), table.getInternalName()); + preparedStatement2.execute(); + log.info("Enabled system-versioning for table with name {}", table.getInternalName()); + } + final PreparedStatement preparedStatement2 = queryMapper.databaseToDatabaseConstraintMetadata(connection, table.getDatabase().getInternalName(), table.getInternalName()); + table.setConstraints(resultSetTableToObtainedConstraintsMetadata(preparedStatement2.executeQuery(), table)); + database.getTables().add(table); + } + } catch (SQLException e) { + log.error("Failed to obtain schema information in database with id {}: {}", database.getId(), e.getMessage()); + throw new QueryMalformedException("Failed to obtain schema information in database with id " + database.getId() + ": " + e.getMessage(), e); + } finally { + dataSource.close(); + } + /* obtain view schema */ + log.debug("database with id {} misses view(s) in metadata database: {}", databaseId, diffViews.stream().map(View::getInternalName).toList()); + for (View view : diffViews) { + try { + view.setColumns(queryMapper.parseColumns(view.getQuery(), database)); + } catch (JSQLParserException e) { + log.error("Failed to map/parse columns: {}", e.getMessage()); + throw new ColumnParseException("Failed to map/parse columns: " + e.getMessage(), e); + } + database.getViews() + .add(view); + } + /* update in metadata database */ + final Database entity = databaseRepository.save(database); + /* save in open search database */ + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(entity)); + log.info("Updated database with id {} in metadata database & search database", entity.getId()); return entity; } + @Transactional + public Constraints resultSetTableToObtainedConstraintsMetadata(ResultSet resultSet, Table table) + throws SQLException { + final Set<String> checks = new LinkedHashSet<>(); + final List<Unique> uniques = new LinkedList<>(); + final List<ForeignKey> foreignKeys = new LinkedList<>(); + while (resultSet.next()) { + if (resultSet.getString(1).equals("CHECK")) { + checks.add(resultSet.getString(4)); + } else if (resultSet.getString(1).equals("FOREIGN KEY")) { + // TODO + } + } + final Constraints constraints = Constraints.builder() + .uniques(uniques) + .checks(checks) + .foreignKeys(foreignKeys) + .build(); + log.debug("mapped result set to {} check,- {} unique- & {} foreign key constraint(s)", + constraints.getChecks().size(), constraints.getUniques().size(), constraints.getForeignKeys().size()); + log.trace("mapped result set to constraints: {}", constraints); + return constraints; + } + } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java index 02227ea0a44fc9ccf989f871fc275e9618f96d6c..44278be9dfc1e3a703f0154ece898c1f51646595 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java @@ -32,28 +32,28 @@ import java.util.List; @Service public class MetadataServiceImpl implements MetadataService { - private final MetadataConfig metadataConfig; - private final TemplateEngine templateEngine; - private final MetadataMapper metadataMapper; - private final IdentifierService identifierService; private final RorGateway rorGateway; private final OrcidGateway orcidGateway; private final ExternalMapper externalMapper; + private final MetadataConfig metadataConfig; + private final MetadataMapper metadataMapper; + private final TemplateEngine templateEngine; private final CrossrefGateway crossrefGateway; + private final IdentifierService identifierService; @Autowired - public MetadataServiceImpl(MetadataConfig metadataConfig, TemplateEngine templateEngine, - MetadataMapper metadataMapper, IdentifierService identifierService, - RorGateway rorGateway, OrcidGateway orcidGateway, ExternalMapper externalMapper, - CrossrefGateway crossrefGateway) { - this.metadataConfig = metadataConfig; - this.templateEngine = templateEngine; - this.metadataMapper = metadataMapper; - this.identifierService = identifierService; + public MetadataServiceImpl(RorGateway rorGateway, OrcidGateway orcidGateway, ExternalMapper externalMapper, + MetadataConfig metadataConfig, MetadataMapper metadataMapper, + TemplateEngine templateEngine, CrossrefGateway crossrefGateway, + IdentifierService identifierService) { this.rorGateway = rorGateway; this.orcidGateway = orcidGateway; this.externalMapper = externalMapper; + this.metadataConfig = metadataConfig; + this.metadataMapper = metadataMapper; + this.templateEngine = templateEngine; this.crossrefGateway = crossrefGateway; + this.identifierService = identifierService; } @Override diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/OntologyServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/OntologyServiceImpl.java index 02ca623695339b8f395d110469c37492dab9c127..a629754c4fb24358723557b3152538fd6043fbf6 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/OntologyServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/OntologyServiceImpl.java @@ -36,12 +36,17 @@ public class OntologyServiceImpl implements OntologyService { return ontologyRepository.findAll(); } + @Override + public List<Ontology> findAllProcessable() { + return ontologyRepository.findAllProcessable(); + } + @Override public Ontology find(Long id) throws OntologyNotFoundException { final Optional<Ontology> optional = ontologyRepository.findById(id); if (optional.isEmpty()) { - log.error("Failed to find ontology with id {}", id); - throw new OntologyNotFoundException("Failed to find ontology with id " + id); + log.error("Failed to find ontology with id {} in metadata database", id); + throw new OntologyNotFoundException("Failed to find ontology with id " + id + " in metadata database"); } return optional.get(); } @@ -51,7 +56,7 @@ public class OntologyServiceImpl implements OntologyService { KeycloakRemoteException, AccessDeniedException { final Ontology entity = ontologyMapper.ontologyCreateDtoToOntology(data); final Ontology ontology = ontologyRepository.save(entity); - log.info("Created ontology with id {}", ontology.getId()); + log.info("Created ontology with id {} in metadata database", ontology.getId()); return ontology; } @@ -63,15 +68,15 @@ public class OntologyServiceImpl implements OntologyService { entity.setSparqlEndpoint(data.getSparqlEndpoint()); entity.setRdfPath(data.getRdfPath()); final Ontology ontology = ontologyRepository.save(entity); - log.info("Update ontology with id {}", ontology.getId()); + log.info("Update ontology with id {} in metadata database", ontology.getId()); return ontology; } @Override public void delete(Long id) throws OntologyNotFoundException { if (!ontologyRepository.existsById(id)) { - log.error("Failed to delete ontology: ontology with id {} does not exist", id); - throw new OntologyNotFoundException("Failed to delete ontology: ontology with id " + id + " does not exist"); + log.error("Failed to delete ontology with id {} in metadata database: does not exist", id); + throw new OntologyNotFoundException("Failed to delete ontology with id " + id + " in metadata database: does not exist"); } ontologyRepository.deleteById(id); log.info("Deleted ontology with id {}", id); diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java index ca2aca3e1d9b6e83e01511d95cf5403e18b48163..e8f64ab7203dfd7228dee7691f7a9369add43b31 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java @@ -7,8 +7,7 @@ import at.tuwien.api.database.query.ImportDto; import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.api.database.table.TableCsvDeleteDto; import at.tuwien.api.database.table.TableCsvDto; -import at.tuwien.api.database.table.TableCsvUpdateDto; -import at.tuwien.config.QueryConfig; +import at.tuwien.config.S3Config; import at.tuwien.entities.container.Container; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.View; @@ -18,7 +17,6 @@ import at.tuwien.exception.*; import at.tuwien.gateway.DataDbSidecarGateway; import at.tuwien.mapper.QueryMapper; import at.tuwien.querystore.Query; -import at.tuwien.repository.mdb.TableColumnRepository; import at.tuwien.service.DatabaseService; import at.tuwien.service.QueryService; import at.tuwien.service.StoreService; @@ -29,22 +27,14 @@ import io.minio.MinioClient; import io.minio.errors.*; import lombok.extern.log4j.Log4j2; import net.sf.jsqlparser.JSQLParserException; -import net.sf.jsqlparser.parser.CCJSqlParserManager; -import net.sf.jsqlparser.schema.Column; -import net.sf.jsqlparser.statement.Statement; -import net.sf.jsqlparser.statement.select.*; -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.RandomStringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.io.StringReader; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.Principal; @@ -54,37 +44,31 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.time.Instant; import java.time.format.DateTimeParseException; -import java.util.ArrayList; import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; @Log4j2 @Service public class QueryServiceImpl extends HibernateConnector implements QueryService { + private final S3Config s3Config; private final MinioClient minioClient; private final QueryMapper queryMapper; private final StoreService storeService; private final TableService tableService; private final DatabaseService databaseService; private final DataDbSidecarGateway dataDbSidecarGateway; - private final TableColumnRepository tableColumnRepository; - - private static final String BUCKET_NAME_DOWNLOAD = "dbrepo-download"; - private static final String BUCKET_NAME_UPLOAD = "dbrepo-upload"; @Autowired - public QueryServiceImpl(MinioClient minioClient, QueryMapper queryMapper, TableService tableService, - DatabaseService databaseService, StoreService storeService, - DataDbSidecarGateway dataDbSidecarGateway, TableColumnRepository tableColumnRepository) { + public QueryServiceImpl(S3Config s3Config, MinioClient minioClient, QueryMapper queryMapper, + TableService tableService, DatabaseService databaseService, StoreService storeService, + DataDbSidecarGateway dataDbSidecarGateway) { + this.s3Config = s3Config; this.minioClient = minioClient; this.queryMapper = queryMapper; this.tableService = tableService; this.storeService = storeService; this.databaseService = databaseService; this.dataDbSidecarGateway = dataDbSidecarGateway; - this.tableColumnRepository = tableColumnRepository; } @Override @@ -93,10 +77,10 @@ public class QueryServiceImpl extends HibernateConnector implements QueryService Long size, SortType sortDirection, String sortColumn) throws DatabaseNotFoundException, ImageNotSupportedException, QueryMalformedException, QueryStoreException, ColumnParseException, UserNotFoundException, DatabaseConnectionException, TableMalformedException, - KeycloakRemoteException, AccessDeniedException { + KeycloakRemoteException, AccessDeniedException, QueryNotFoundException { if (statement.getStatement().contains(";")) { - log.error("Failed to execute query since it contains ';'"); - throw new QueryMalformedException("Failed to execute query since it contains ';'"); + log.error("Failed to execute query: contains ';'"); + throw new QueryMalformedException("Failed to execute query: contains ';'"); } final Query query = storeService.insert(databaseId, statement, principal); return reExecute(databaseId, query, page, size, sortDirection, sortColumn, principal); @@ -115,7 +99,7 @@ public class QueryServiceImpl extends HibernateConnector implements QueryService /* map the result to the tables (with respective columns) from the statement metadata */ final List<TableColumn> columns; try { - columns = parseColumns(query.getQuery(), database); + columns = queryMapper.parseColumns(query.getQuery(), database); } catch (JSQLParserException e) { log.error("Failed to map/parse columns: {}", e.getMessage()); throw new ColumnParseException("Failed to map/parse columns: " + e.getMessage(), e); @@ -139,7 +123,7 @@ public class QueryServiceImpl extends HibernateConnector implements QueryService } /* run query */ try { - parseColumns(query.getQuery(), database); + queryMapper.parseColumns(query.getQuery(), database); } catch (JSQLParserException e) { log.error("Failed to map/parse columns: {}", e.getMessage()); throw new ColumnParseException("Failed to map/parse columns: " + e.getMessage(), e); @@ -152,7 +136,7 @@ public class QueryServiceImpl extends HibernateConnector implements QueryService try { return connection.prepareStatement(statement); } catch (SQLException e) { - log.error("Failed to prepare statement {}m reason: {}", statement, e.getMessage()); + log.error("Failed to prepare statement: {}", e.getMessage()); throw new QueryMalformedException("Failed to prepare statement", e); } } @@ -172,7 +156,7 @@ public class QueryServiceImpl extends HibernateConnector implements QueryService return queryMapper.resultListToQueryResultDto(columns, resultSet); } catch (SQLException e) { log.error("Failed to execute and map time-versioned query: {}", e.getMessage()); - throw new TableMalformedException("Failed to execute and map time-versioned query: " + e.getMessage(), e); + throw new TableMalformedException("Failed to execute and map time-versioned query", e); } finally { dataSource.close(); } @@ -192,7 +176,7 @@ public class QueryServiceImpl extends HibernateConnector implements QueryService return queryMapper.resultSetToNumber(resultSet); } catch (SQLException e) { log.error("Failed to map object: {}", e.getMessage()); - throw new TableMalformedException("Failed to map object: " + e.getMessage(), e); + throw new TableMalformedException("Failed to map object", e); } finally { dataSource.close(); } @@ -257,7 +241,7 @@ public class QueryServiceImpl extends HibernateConnector implements QueryService preparedStatement.executeUpdate(); } catch (SQLException e) { log.error("Failed to execute query and/or export file: {}", e.getMessage()); - throw new FileStorageException("Failed to execute query and/or export file: " + e.getMessage(), e); + throw new FileStorageException("Failed to execute query and/or export file", e); } finally { dataSource.close(); } @@ -269,8 +253,8 @@ public class QueryServiceImpl extends HibernateConnector implements QueryService dataDbSidecarGateway.exportFile(container.getSidecarHost(), container.getSidecarPort(), filename); /* export file from blob storage */ try { - final InputStream stream = minioClient.getObject(GetObjectArgs.builder().bucket(BUCKET_NAME_DOWNLOAD).object(filename).build()); - log.debug("found object with key {} in bucket {}", filename, BUCKET_NAME_DOWNLOAD); + final InputStream stream = minioClient.getObject(GetObjectArgs.builder().bucket(s3Config.getS3ExportBucket()).object(filename).build()); + log.debug("found object with key {} in bucket {}", filename, s3Config.getS3ExportBucket()); return ExportResource.builder() .resource(new InputStreamResource(stream)) .filename(filename) @@ -278,8 +262,8 @@ public class QueryServiceImpl extends HibernateConnector implements QueryService } catch (ServerException | InsufficientDataException | ErrorResponseException | IOException | NoSuchAlgorithmException | InvalidKeyException | InvalidResponseException | XmlParserException | InternalException e) { - log.error("Failed to find object {} in bucket {}", filename, BUCKET_NAME_DOWNLOAD); - throw new FileStorageException("Failed to find object " + filename + " in bucket " + BUCKET_NAME_DOWNLOAD); + log.error("Failed to find object {} in bucket {}", filename, s3Config.getS3ExportBucket()); + throw new FileStorageException("Failed to find object " + filename + " in bucket " + s3Config.getS3ExportBucket()); } } @@ -307,37 +291,13 @@ public class QueryServiceImpl extends HibernateConnector implements QueryService preparedStatement.executeUpdate(); } catch (SQLException e) { log.error("Failed to execute query: {}", e.getMessage()); - throw new QueryStoreException("Failed to execute query: " + e.getMessage(), e); + throw new QueryStoreException("Failed to execute query", e); } finally { dataSource.close(); } return retrieveBlobAsResource(database.getContainer(), filename); } - @Override - @Transactional - public void update(Long databaseId, Long tableId, TableCsvUpdateDto data, Principal principal) - throws ImageNotSupportedException, TableMalformedException, DatabaseNotFoundException, - TableNotFoundException, QueryMalformedException { - /* find */ - final Database database = databaseService.find(databaseId); - final Table table = tableService.find(databaseId, tableId); - /* run query */ - if (data.getData().size() == 0 || data.getKeys().size() == 0) return; - final ComboPooledDataSource dataSource = getPrivilegedDataSource(database.getContainer().getImage(), - database.getContainer(), database); - try { - final Connection connection = dataSource.getConnection(); - final PreparedStatement preparedStatement = queryMapper.tableCsvDtoToRawUpdateQuery(connection, table, data); - preparedStatement.executeUpdate(); - } catch (SQLException e) { - log.error("Failed to update tuples: {}", e.getMessage()); - throw new TableMalformedException("Failed to update tuples: " + e.getMessage(), e); - } finally { - dataSource.close(); - } - } - @Override @Transactional public void insert(Long databaseId, Long tableId, TableCsvDto data, Principal principal) @@ -356,13 +316,13 @@ public class QueryServiceImpl extends HibernateConnector implements QueryService preparedStatement.executeUpdate(); } catch (DateTimeParseException e) { log.error("Failed to parse date: {}", e.getMessage()); - throw new TableMalformedException("Failed to parse date: " + e.getMessage(), e); + throw new TableMalformedException("Failed to parse date", e); } catch (NumberFormatException e) { log.error("Failed to parse number: {}", e.getMessage()); - throw new TableMalformedException("Failed to parse number: " + e.getMessage(), e); + throw new TableMalformedException("Failed to parse number", e); } catch (Exception e) { log.error("Database failed to accept tuple: {}", e.getMessage()); - throw new TableMalformedException("Database failed to accept tuple: " + e.getMessage(), e); + throw new TableMalformedException("Database failed to accept tuple", e); } finally { dataSource.close(); } @@ -387,7 +347,7 @@ public class QueryServiceImpl extends HibernateConnector implements QueryService preparedStatement.executeUpdate(); } catch (SQLException e) { log.error("Failed to delete tuples: {}", e.getMessage()); - throw new TableMalformedException("Failed to delete tuples: " + e.getMessage(), e); + throw new TableMalformedException("Failed to delete tuples", e); } finally { dataSource.close(); } @@ -417,102 +377,4 @@ public class QueryServiceImpl extends HibernateConnector implements QueryService } } - /** - * Parses the stored columns from a given query. - * - * @param query The query. - * @param database The database that contains the list of tables with list of columns. - * @return List of columns in the order they are referenced in the query. - * @throws JSQLParserException The columns could not be extracted from the query. - */ - @Transactional(readOnly = true) - public List<TableColumn> parseColumns(String query, Database database) throws JSQLParserException { - final List<TableColumn> columns = new ArrayList<>(); - final CCJSqlParserManager parserRealSql = new CCJSqlParserManager(); - final Statement statement = parserRealSql.parse(new StringReader(query)); - /* check */ - if (!(statement instanceof Select)) { - log.error("Query attempts to update the dataset, not a SELECT statement"); - throw new JSQLParserException("Query attempts to update the dataset"); - } - /* start parsing */ - final Select selectStatement = (Select) statement; - final PlainSelect ps = (PlainSelect) selectStatement.getSelectBody(); - final List<SelectItem> clauses = ps.getSelectItems(); - log.trace("columns referenced in the from-clause: {}", clauses); - /* Parse all tables */ - final List<FromItem> tablesOrViews = new ArrayList<>(); - tablesOrViews.add(ps.getFromItem()); - if (ps.getJoins() != null && ps.getJoins().size() > 0) { - log.trace("query contains join items: {}", ps.getJoins()); - for (Join j : ps.getJoins()) { - if (j.getRightItem() != null) { - tablesOrViews.add(j.getRightItem()); - } - } - } - final List<TableColumn> allColumns = tableColumnRepository.findAllByDatabaseId(database.getId()); - log.trace("columns referenced in the from-clause and join-clause(s): {}", clauses); - /* Checking if all tables or views exist */ - log.trace("table(s) or view(s) referenced in the statement: {}", tablesOrViews.stream().map(t -> ((net.sf.jsqlparser.schema.Table) t).getName()).collect(Collectors.toList())); - /* Checking if all columns exist */ - for (SelectItem clause : clauses) { - final SelectExpressionItem item = (SelectExpressionItem) clause; - final Column column = (Column) item.getExpression(); - final Optional<net.sf.jsqlparser.schema.Table> optionalTableOrView = tablesOrViews.stream() - .map(t -> (net.sf.jsqlparser.schema.Table) t) - .filter(t -> { - if (column.getTable() == null) { - /* column does not reference a specific table, so there is only one table */ - final String tableName = ((net.sf.jsqlparser.schema.Table) tablesOrViews.get(0)).getName().replace("`", ""); - if (t.getAlias() == null) { - /* table is non-aliased */ - return t.getName().replace("`", "").equals(tableName); - } - /* has alias */ - return t.getAlias().getName().equals(tableName); - } - final String tableName = column.getTable().getName().replace("`", ""); - if (t.getAlias() == null) { - /* table is non-aliased */ - return t.getName().replace("`", "").equals(tableName); - } - /* has alias */ - return t.getAlias().getName().equals(tableName); - }) - .findFirst(); - if (optionalTableOrView.isEmpty()) { - log.error("Failed to find table or view with alias '{}'", column.getTable().getAlias()); - throw new JSQLParserException("Failed to find table or view with alias " + column.getTable().getAlias()); - } - final Optional<TableColumn> optionalColumn = allColumns.stream() - .filter(c -> c.getInternalName().equals(column.getColumnName().replace("`", ""))) - .filter(c -> columnMatches(c, optionalTableOrView.get().getName().replace("`", ""))) - .findFirst(); - if (optionalColumn.isEmpty()) { - log.error("Failed to find column with name {} in {}", column.getColumnName(), allColumns.stream().map(TableColumn::getInternalName).toList()); - throw new JSQLParserException("Failed to find column with name " + column.getColumnName() + " in " + allColumns.stream().map(TableColumn::getInternalName).toList()); - } - final TableColumn aliasColumn = optionalColumn.get(); - if (item.getAlias() != null) { - aliasColumn.setAlias(item.getAlias().getName()); - } - log.trace("found column with internal name {} and alias {}", aliasColumn.getInternalName(), aliasColumn.getAlias()); - columns.add(aliasColumn); - } - return columns; - } - - @Transactional(readOnly = true) - public boolean columnMatches(TableColumn column, String tableOrView) { - if (column.getTable().getInternalName().equals(tableOrView)) { - /* matches table name */ - return true; - } - /* maybe matches one of the views */ - return column.getViews() - .stream() - .anyMatch(v -> v.getInternalName().equals(tableOrView)); - } - } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/QueryStoreServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/QueryStoreServiceImpl.java index 4f65dca2afcd2138c3c04441db3317f2b0d14445..411e6cc1fa3f933f667983463e41817d0b39a236 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/QueryStoreServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/QueryStoreServiceImpl.java @@ -41,16 +41,15 @@ public class QueryStoreServiceImpl extends HibernateConnector implements QuerySt executeQuery(connection, query); } } catch (SQLException e) { - log.error("Failed to create query store {}, reason: {}", database, e.getMessage()); - throw new DatabaseMalformedException("Failed to create database", e); + log.error("Failed to create query store in database with id {}: {}", databaseId, e.getMessage()); + throw new DatabaseMalformedException("Failed to create query store in database with id " + databaseId, e); } catch (IOException e) { - log.error("Failed to load query store init script, reason: {}", e.getMessage()); - throw new QueryStoreException("Failed to load query store init script"); + log.error("Failed to load query store init script: {}", e.getMessage()); + throw new QueryStoreException("Failed to load query store init script", e); } finally { dataSource.close(); } log.info("Created query store in database with id {}", databaseId); - log.trace("created query store in database {}", database); } public void executeQuery(Connection connection, String statement, String... data) throws SQLException { diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java index 64e39c4db75199b0220839066b1844cb45bda581..fcadf5acfde72ce6803db79dce9e4b2a9a875b4c 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java @@ -29,11 +29,13 @@ public class RabbitMqServiceImpl implements MessageQueueService { @Override public void createUser(String username, String password) throws BrokerRemoteException, BrokerVirtualHostModificationException { brokerServiceGateway.createUser(username, password); + log.info("Created user with username {} at broker service", username); } @Override public void deleteUser(String username) throws BrokerRemoteException, BrokerVirtualHostModificationException { brokerServiceGateway.deleteUser(username); + log.info("Deleted user with username {} at broker service", username); } @Override @@ -45,6 +47,7 @@ public class RabbitMqServiceImpl implements MessageQueueService { .build(); log.debug("user with username {} has virtual host permissions {}", username, permissions); brokerServiceGateway.grantPermission(username, permissions); + log.info("Granted user with username {} permissions at broker service", username); } @Override @@ -58,6 +61,7 @@ public class RabbitMqServiceImpl implements MessageQueueService { .build(); log.debug("user with username {} has exchange permissions {}", user.getUsername(), permissions); brokerServiceGateway.grantTopicPermission(user.getUsername(), permissions); + log.info("Granted user with username {} topic permissions at broker service", user.getUsername()); } @Transactional(readOnly = true) diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java index 4e0887db8edc163a559da3e846c32a5add965035..cd3871cb482dd8596fd0bf5064fe3999ddccfc50 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java @@ -1,20 +1,13 @@ package at.tuwien.service.impl; -import at.tuwien.api.database.table.columns.concepts.ConceptSaveDto; -import at.tuwien.api.database.table.columns.concepts.UnitSaveDto; +import at.tuwien.entities.database.Database; +import at.tuwien.entities.database.table.Table; +import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.entities.database.table.columns.TableColumnConcept; import at.tuwien.entities.database.table.columns.TableColumnUnit; -import at.tuwien.entities.semantics.Ontology; import at.tuwien.exception.ConceptNotFoundException; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.SemanticEntityNotFoundException; import at.tuwien.exception.UnitNotFoundException; -import at.tuwien.mapper.OntologyMapper; -import at.tuwien.mapper.TableMapper; import at.tuwien.repository.mdb.*; -import at.tuwien.repository.sdb.ConceptIdxRepository; -import at.tuwien.repository.sdb.UnitIdxRepository; -import at.tuwien.service.EntityService; import at.tuwien.service.SemanticService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; @@ -22,148 +15,88 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Objects; import java.util.Optional; @Log4j2 @Service public class SemanticServiceImpl implements SemanticService { - private final TableMapper tableMapper; - private final OntologyMapper ontologyMapper; - private final UnitIdxRepository unitIdxRepository; - private final ConceptIdxRepository conceptIdxRepository; - private final UnitRepository unitRepository; - private final ConceptRepository conceptRepository; - private final OntologyRepository ontologyRepository; - private final TableColumnUnitRepository tableColumnUnitRepository; - private final TableColumnConceptRepository tableColumnConceptRepository; - private final EntityService entityService; + private final DatabaseRepository databaseRepository; @Autowired - public SemanticServiceImpl(TableMapper tableMapper, UnitRepository unitRepository, - ConceptRepository conceptRepository, OntologyRepository ontologyRepository, - EntityService entityService, TableColumnConceptRepository tableColumnConceptRepository, - TableColumnUnitRepository tableColumnUnitRepository, OntologyMapper ontologyMapper, - UnitIdxRepository unitIdxRepository, ConceptIdxRepository conceptIdxRepository) { - this.tableMapper = tableMapper; - this.ontologyMapper = ontologyMapper; - this.unitIdxRepository = unitIdxRepository; - this.conceptIdxRepository = conceptIdxRepository; - this.unitRepository = unitRepository; - this.ontologyRepository = ontologyRepository; - this.conceptRepository = conceptRepository; - this.tableColumnUnitRepository = tableColumnUnitRepository; - this.tableColumnConceptRepository = tableColumnConceptRepository; - this.entityService = entityService; + public SemanticServiceImpl(DatabaseRepository databaseRepository) { + this.databaseRepository = databaseRepository; } @Override @Transactional(readOnly = true) public List<TableColumnConcept> findAllConcepts() { - return tableColumnConceptRepository.findAll(); + return databaseRepository.findAll() + .stream() + .map(Database::getTables) + .flatMap(List::stream) + .map(Table::getColumns) + .flatMap(List::stream) + .map(TableColumn::getConcept) + .filter(Objects::nonNull) + .distinct() + .toList(); } @Override @Transactional(readOnly = true) public List<TableColumnUnit> findAllUnits() { - return tableColumnUnitRepository.findAll(); - } - - @Override - @Transactional - public TableColumnConcept saveConcept(ConceptSaveDto data) { - final TableColumnConcept entity = ontologyMapper.conceptSaveDtoToTableColumnConcept(data); - /* save in metadata database */ - final TableColumnConcept concept = tableColumnConceptRepository.save(entity); - log.info("Saved concept with id {} in metadata database", concept.getId()); - /* save in open search database */ - conceptIdxRepository.save(ontologyMapper.tableColumnConceptToConceptDto(concept)); - log.info("Saved concept with id {} in open search database", concept.getId()); - return concept; - } - - @Override - @Transactional - public TableColumnUnit saveUnit(UnitSaveDto data) { - final TableColumnUnit entity = ontologyMapper.unitSaveDtoToTableColumnUnit(data); - /* save in metadata database */ - final TableColumnUnit unit = tableColumnUnitRepository.save(entity); - log.info("Saved unit with id {} in metadata database", unit.getId()); - /* save in open search database */ - unitIdxRepository.save(ontologyMapper.tableColumnUnitToUnitDto(unit)); - log.info("Saved unit with id {} in open search database", unit.getId()); - return unit; - } - - @Override - public TableColumnConcept findConcept(String uri) throws ConceptNotFoundException { - final Optional<TableColumnConcept> optional = conceptRepository.findByUri(uri); - if (optional.isEmpty()) { - log.error("Failed to find column concept with uri {}", uri); - throw new ConceptNotFoundException("Failed to find concept with uri " + uri); - } - return optional.get(); + return databaseRepository.findAll() + .stream() + .map(Database::getTables) + .flatMap(List::stream) + .map(Table::getColumns) + .flatMap(List::stream) + .map(TableColumn::getUnit) + .filter(Objects::nonNull) + .distinct() + .toList(); } @Override + @Transactional(readOnly = true) public TableColumnUnit findUnit(String uri) throws UnitNotFoundException { - final Optional<TableColumnUnit> optional = unitRepository.findByUri(uri); + final Optional<TableColumnUnit> optional = databaseRepository.findAll() + .stream() + .map(Database::getTables) + .flatMap(List::stream) + .map(Table::getColumns) + .flatMap(List::stream) + .map(TableColumn::getUnit) + .filter(Objects::nonNull) + .filter(u -> u.getUri().equals(uri)) + .findFirst(); if (optional.isEmpty()) { - log.error("Failed to find unit with uri {}", uri); - throw new UnitNotFoundException("Failed to find unit with uri " + uri); + log.error("Failed to find unit with uri {} in metadata database", uri); + throw new UnitNotFoundException("Failed to find unit with uri " + uri + " in metadata database"); } return optional.get(); } @Override - public TableColumnConcept saveConcept(String uri) throws QueryMalformedException, SemanticEntityNotFoundException { - /* check compatible ontologies */ - final Ontology ontology = getCompatibleOntology(uri); - if (ontology == null) { - return TableColumnConcept.builder() - .uri(uri) - .build(); - } - /* save in metadata database */ - final TableColumnConcept concept = tableMapper.entityDtoToTableColumnConcept(entityService.findOneByUri(ontology, uri)); - final TableColumnConcept entity = tableColumnConceptRepository.save(concept); - log.info("Saved concept with uri {} in metadata database", entity.getUri()); - /* save in open search database */ - conceptIdxRepository.save(tableMapper.tableColumnConceptToConceptDto(entity)); - log.info("Saved concept with uri {} in open search database", entity.getUri()); - return entity; - } - - @Override - public TableColumnUnit saveUnit(String uri) throws SemanticEntityNotFoundException, QueryMalformedException { - final Ontology ontology = getCompatibleOntology(uri); - if (ontology == null) { - return TableColumnUnit.builder() - .uri(uri) - .build(); - } - /* save in metadata database */ - final TableColumnUnit unit = tableMapper.entityDtoToTableColumnUnit(entityService.findOneByUri(ontology, uri)); - final TableColumnUnit entity = tableColumnUnitRepository.save(unit); - log.info("Saved unit with uri {} in metadata database", entity.getUri()); - /* save in open search database */ - unitIdxRepository.save(tableMapper.tableColumnUnitToUnitDto(entity)); - log.info("Saved unit with uri {} in open search database", entity.getUri()); - return entity; - } - - private Ontology getCompatibleOntology(String uri) { - final List<Ontology> ontologies = ontologyRepository.findAll() + @Transactional(readOnly = true) + public TableColumnConcept findConcept(String uri) throws ConceptNotFoundException { + final Optional<TableColumnConcept> optional = databaseRepository.findAll() .stream() - .filter(o -> uri.startsWith(o.getUri())) - .toList(); - if (ontologies.size() != 1) { - log.warn("Failed to find registered ontology for entity with uri {}", uri); - return null; + .map(Database::getTables) + .flatMap(List::stream) + .map(Table::getColumns) + .flatMap(List::stream) + .map(TableColumn::getConcept) + .filter(Objects::nonNull) + .filter(c -> c.getUri().equals(uri)) + .findFirst(); + if (optional.isEmpty()) { + log.error("Failed to find concept with uri {} in metadata database", uri); + throw new ConceptNotFoundException("Failed to find concept with uri " + uri + " in metadata database"); } - final Ontology ontology = ontologies.get(0); - log.debug("found available compatible ontology with id {}", ontology.getId()); - return ontology; + return optional.get(); } } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/StoreServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/StoreServiceImpl.java index e7ac6a4cf35bef63bbbc9b5400694647db72d9c8..743529122a43023d200b971e981e53992fc63471 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/StoreServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/StoreServiceImpl.java @@ -55,10 +55,14 @@ public class StoreServiceImpl extends HibernateConnector implements StoreService final Connection connection = dataSource.getConnection(); final PreparedStatement preparedStatement = storeMapper.queryStoreRawSelectAllQuery(connection, persisted); final ResultSet resultSet = preparedStatement.executeQuery(); - return resultSetToQueryList(resultSet); + final List<Query> queries = new LinkedList<>(); + while (resultSet.next()) { + queries.add(storeMapper.resultSetToQuery(resultSet)); + } + return queries; } catch (SQLException e) { - log.error("Failed to find queries in container with database with id {}, reason: {}", databaseId, e.getMessage()); - throw new QueryStoreException("Failed to find queries: " + e.getMessage()); + log.error("Failed to find queries in database with id {}: {}", databaseId, e.getMessage()); + throw new QueryStoreException("Failed to find queries in database with id " + database); } finally { dataSource.close(); } @@ -82,12 +86,12 @@ public class StoreServiceImpl extends HibernateConnector implements StoreService final PreparedStatement preparedStatement = storeMapper.queryStoreRawSelectOneQuery(connection, queryId); final ResultSet resultSet = preparedStatement.executeQuery(); if (!resultSet.next()) { - log.error("Query not found with id {}", queryId); - throw new QueryNotFoundException("Query not found with id " + queryId); + log.error("Query not found with id {} in database with id {}", queryId, databaseId); + throw new QueryNotFoundException("Query not found with id " + queryId + " in database with id " + databaseId); } return storeMapper.resultSetToQuery(resultSet); } catch (SQLException e) { - log.error("Failed to retrieve first row for query with id {}, because {}", queryId, e.getMessage()); + log.error("Failed to retrieve first row for query with id {}: {}", queryId, e.getMessage()); throw new QueryStoreException("Failed to retrieve first row for query with id " + queryId); } finally { dataSource.close(); @@ -98,7 +102,8 @@ public class StoreServiceImpl extends HibernateConnector implements StoreService @Transactional(readOnly = true) public Query insert(Long databaseId, ExecuteStatementDto metadata, Principal principal) throws QueryStoreException, DatabaseNotFoundException, ImageNotSupportedException, - UserNotFoundException, DatabaseConnectionException, KeycloakRemoteException, AccessDeniedException { + UserNotFoundException, DatabaseConnectionException, KeycloakRemoteException, AccessDeniedException, + QueryNotFoundException { /* find */ final Database database = databaseService.find(databaseId); if (!database.getContainer().getImage().getName().equals("mariadb")) { @@ -124,8 +129,8 @@ public class StoreServiceImpl extends HibernateConnector implements StoreService final PreparedStatement preparedStatement = storeMapper.queryStoreRawSelectOneQuery(connection, queryId); final ResultSet resultSet = preparedStatement.executeQuery(); if (!resultSet.next()) { - log.error("Failed to retrieve query with id {}", queryId); - throw new QueryStoreException("Failed to retrieve query with id " + queryId); + log.error("Query not found with id {} in database with id {}", queryId, databaseId); + throw new QueryNotFoundException("Query not found with id " + queryId + " in database with id " + databaseId); } final Query query = storeMapper.resultSetToQuery(resultSet); log.info("Found query with id {} into the query store of database with id {}", queryId, databaseId); @@ -159,12 +164,12 @@ public class StoreServiceImpl extends HibernateConnector implements StoreService final PreparedStatement preparedStatement1 = storeMapper.queryStoreRawSelectOneQuery(connection, queryId); final ResultSet resultSet = preparedStatement1.executeQuery(); if (!resultSet.next()) { - log.error("Failed to retrieve first row for query with id {}", queryId); - throw new QueryStoreException("Failed to retrieve first row for query with id " + queryId); + log.error("Failed to retrieve first row for query with id {} in database with id {}", queryId, databaseId); + throw new QueryStoreException("Failed to retrieve first row for query with id " + queryId + "in database with id " + databaseId); } out = storeMapper.resultSetToQuery(resultSet); } catch (SQLException e) { - log.error("Failed to update query, reason: {}", e.getMessage()); + log.error("Failed to update query: {}", e.getMessage()); throw new QueryStoreException("Failed to update query", e); } finally { dataSource.close(); @@ -173,7 +178,7 @@ public class StoreServiceImpl extends HibernateConnector implements StoreService } @Override - @Transactional + @Transactional(readOnly = true) public void deleteStaleQueries() throws ImageNotSupportedException, QueryStoreException { /* find */ final List<Database> databases = databaseService.findAll(); @@ -192,21 +197,13 @@ public class StoreServiceImpl extends HibernateConnector implements StoreService final int affected = preparedStatement.executeUpdate(); log.debug("delete stale queries affected {} rows", affected); } catch (SQLException e) { - log.error("Failed to delete stale queries in database with id {}, reason: {}", database.getId(), e.getMessage()); - throw new QueryStoreException("Failed to delete stale queries in database with id " + database.getId() + ": " + e.getMessage()); + log.error("Failed to delete stale queries in database with id {}: {}", database.getId(), e.getMessage()); + throw new QueryStoreException("Failed to delete stale queries in database with id " + database.getId(), e); } finally { dataSource.close(); } } } - protected List<Query> resultSetToQueryList(ResultSet resultSet) throws SQLException { - final List<Query> queries = new LinkedList<>(); - while (resultSet.next()) { - queries.add(storeMapper.resultSetToQuery(resultSet)); - } - return queries; - } - } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java index 16bfa35731097aa91de4d7417bf7cc8b4b6903f3..8ca16099652fd0ec07921e6131391ec03b527b8d 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java @@ -1,33 +1,29 @@ package at.tuwien.service.impl; import at.tuwien.api.database.table.TableCreateDto; -import at.tuwien.api.database.table.TableCreateRawQuery; import at.tuwien.api.database.table.TableHistoryDto; -import at.tuwien.api.database.table.columns.ColumnDto; import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.table.Table; import at.tuwien.entities.database.table.columns.TableColumn; +import at.tuwien.entities.database.table.columns.TableColumnConcept; +import at.tuwien.entities.database.table.columns.TableColumnUnit; import at.tuwien.exception.*; +import at.tuwien.mapper.DatabaseMapper; import at.tuwien.mapper.QueryMapper; import at.tuwien.mapper.TableMapper; -import at.tuwien.repository.mdb.TableColumnRepository; -import at.tuwien.repository.mdb.TableRepository; -import at.tuwien.repository.sdb.TableColumnIdxRepository; -import at.tuwien.repository.sdb.TableIdxRepository; +import at.tuwien.repository.mdb.DatabaseRepository; +import at.tuwien.repository.sdb.DatabaseIdxRepository; import at.tuwien.service.DatabaseService; import at.tuwien.service.SemanticService; import at.tuwien.service.TableService; -import at.tuwien.service.UserService; import at.tuwien.utils.UserUtil; -import ch.qos.logback.core.testUtil.RandomUtil; import com.mchange.v2.c3p0.ComboPooledDataSource; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.math.BigDecimal; import java.security.Principal; import java.sql.Connection; import java.sql.PreparedStatement; @@ -35,44 +31,58 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.Optional; -import java.util.Random; -import java.util.concurrent.ThreadLocalRandom; @Log4j2 @Service public class TableServiceImpl extends HibernateConnector implements TableService { - private final TableMapper tableMapper; private final QueryMapper queryMapper; + private final TableMapper tableMapper; + private final DatabaseMapper databaseMapper; private final DatabaseService databaseService; private final SemanticService semanticService; - private final TableRepository tableRepository; - private final TableIdxRepository tableIdxRepository; - private final TableColumnRepository tableColumnRepository; - private final TableColumnIdxRepository tableColumnIdxRepository; + private final DatabaseRepository databaseRepository; + private final DatabaseIdxRepository databaseIdxRepository; @Autowired - public TableServiceImpl(TableMapper tableMapper, QueryMapper queryMapper, SemanticService semanticService, - TableRepository tableRepository, DatabaseService databaseService, - TableIdxRepository tableIdxRepository, TableColumnRepository tableColumnRepository, - TableColumnIdxRepository tableColumnIdxRepository) { - this.tableMapper = tableMapper; + public TableServiceImpl(QueryMapper queryMapper, TableMapper tableMapper, DatabaseMapper databaseMapper, + DatabaseService databaseService, SemanticService semanticService, + DatabaseRepository databaseRepository, DatabaseIdxRepository databaseIdxRepository) { this.queryMapper = queryMapper; - this.semanticService = semanticService; - this.tableRepository = tableRepository; + this.tableMapper = tableMapper; + this.databaseMapper = databaseMapper; this.databaseService = databaseService; - this.tableIdxRepository = tableIdxRepository; - this.tableColumnRepository = tableColumnRepository; - this.tableColumnIdxRepository = tableColumnIdxRepository; + this.semanticService = semanticService; + this.databaseRepository = databaseRepository; + this.databaseIdxRepository = databaseIdxRepository; } @Override @Transactional(readOnly = true) public Table find(Long databaseId, Long tableId) throws DatabaseNotFoundException, TableNotFoundException { - final Optional<Table> table = tableRepository.find(databaseId, tableId); + final Optional<Table> table = databaseService.find(databaseId) + .getTables() + .stream() + .filter(t -> t.getId().equals(tableId)) + .findFirst(); + if (table.isEmpty()) { + log.error("Failed to find table with id {} in metadata database", tableId); + throw new TableNotFoundException("Failed to find table with id " + tableId + " in metadata database"); + } + return table.get(); + } + + @Override + @Transactional(readOnly = true) + public Table find(Long databaseId, String internalName) throws DatabaseNotFoundException, TableNotFoundException { + final Optional<Table> table = databaseService.find(databaseId) + .getTables() + .stream() + .filter(t -> t.getInternalName().equals(internalName)) + .findFirst(); if (table.isEmpty()) { - log.error("Failed to find table with id {} in database with id {}", tableId, databaseId); - throw new TableNotFoundException("Failed to find table with id " + tableId + " in database with id " + databaseId); + log.error("Failed to find table with internal name {} in metadata database", internalName); + throw new TableNotFoundException("Failed to find table with internal name " + internalName + " in metadata database"); } return table.get(); } @@ -80,7 +90,12 @@ public class TableServiceImpl extends HibernateConnector implements TableService @Override @Transactional(readOnly = true) public List<Table> findAll() { - return tableRepository.findAll(); + return databaseService.findAll() + .stream() + .map(Database::getTables) + .flatMap(List::stream) + .distinct() + .toList(); } @Override @@ -101,7 +116,7 @@ public class TableServiceImpl extends HibernateConnector implements TableService return queryMapper.resultListToTableHistoryDto(resultSet); } catch (SQLException e) { log.error("Failed to map table history: {}", e.getMessage()); - throw new QueryStoreException("Failed to map table history: " + e.getMessage(), e); + throw new QueryStoreException("Failed to map table history", e); } finally { dataSource.close(); } @@ -110,131 +125,86 @@ public class TableServiceImpl extends HibernateConnector implements TableService @Override @Transactional(readOnly = true) public List<Table> findAll(Long databaseId) throws DatabaseNotFoundException { - final Database database = databaseService.find(databaseId); - final List<Table> tables = tableRepository.findByDatabaseOrderByCreatedDesc(database); - log.trace("found {} table(s) in database with id {}", tables.size(), databaseId); - return tables; - } - - @Override - @Transactional - public void deleteTable(Long databaseId, Long tableId) - throws TableNotFoundException, DatabaseNotFoundException, ImageNotSupportedException, - TableMalformedException, QueryMalformedException { - /* find */ - final Database database = databaseService.find(databaseId); - final Table table = findById(databaseId, tableId); - /* run query */ - final ComboPooledDataSource dataSource = getPrivilegedDataSource(database.getContainer().getImage(), database.getContainer(), database); - try { - final Connection connection = dataSource.getConnection(); - tableMapper.tableToDropTableRawQuery(connection, table); - } catch (SQLException e) { - log.error("Failed to drop table: {}", e.getMessage()); - throw new TableMalformedException("Failed to drop table", e); - } finally { - dataSource.close(); - } - /* delete in metadata database */ - tableRepository.delete(table); - log.info("Deleted table with id {} in metadata database", table.getId()); - /* delete in open search database */ - tableIdxRepository.delete(tableMapper.tableToTableDto(table)); - log.info("Deleted table with id {} in open search database", table.getId()); - } - - @Override - @Transactional(readOnly = true) - public Table findById(Long databaseId, Long tableId) - throws TableNotFoundException, DatabaseNotFoundException { - final Database database = databaseService.find(databaseId); - final Optional<Table> optional = tableRepository.findByDatabaseAndId(database, tableId); - if (optional.isEmpty()) { - log.error("Failed to find table with id {} in metadata database", tableId); - throw new TableNotFoundException("Table not found"); - } - return optional.get(); + return databaseService.find(databaseId) + .getTables(); } @Override @Transactional public Table createTable(Long databaseId, TableCreateDto createDto, Principal principal) throws ImageNotSupportedException, DatabaseNotFoundException, TableMalformedException, - TableNameExistsException, QueryMalformedException { + TableNameExistsException, QueryMalformedException, TableNotFoundException { /* find */ final Database database = databaseService.find(databaseId); if (!database.getContainer().getImage().getName().equals("mariadb")) { log.error("Currently only MariaDB is supported"); throw new ImageNotSupportedException("Currently only MariaDB is supported"); } - final Optional<Table> optional = tableRepository.findByDatabaseAndInternalName(database, - tableMapper.nameToInternalName(createDto.getName())); + final String internalName = tableMapper.nameToInternalName(createDto.getName()); + final Optional<Table> optional = database.getTables() + .stream() + .filter(t -> t.getInternalName().equals(internalName)) + .findFirst(); if (optional.isPresent()) { - log.error("Table '{}' exists in metadata database", optional.get().getInternalName()); - throw new TableNameExistsException("Table exists in metadata database"); + log.error("Failed to create table with name {}: exists in metadata database", internalName); + throw new TableNameExistsException("Failed to create table with name " + internalName + ": exists in metadata database"); } + final Table table = tableMapper.tableCreateDtoToTable(createDto); /* run query */ final ComboPooledDataSource dataSource = getPrivilegedDataSource(database.getContainer().getImage(), database.getContainer(), database); final Boolean generatedSequence; try { final Connection connection = dataSource.getConnection(); generatedSequence = tableMapper.tableToCreateTableRawQuery(connection, createDto); - } catch (Exception e) { - log.error("Failed to create table: {}", e.getMessage()); - throw new TableMalformedException("Failed to create table", e); - } finally { - dataSource.close(); - } - int[] idx = {0}; - /* map table */ - final Table entity = tableMapper.tableCreateDtoToTable(createDto); - entity.setInternalName(tableMapper.nameToInternalName(entity.getName())); - entity.setQueueName("dbrepo"); - entity.setRoutingKey("dbrepo." + database.getInternalName() + "." + entity.getInternalName()); - entity.setIsVersioned(true); - entity.setTdbid(databaseId); - entity.setDatabase(database); - entity.setConstraints(null); - entity.setCreatedBy(UserUtil.getId(principal)); - entity.setOwnedBy(UserUtil.getId(principal)); - /* map columns */ - entity.setColumns(createDto.getColumns() - .stream() - .map(column -> tableMapper.columnCreateDtoToTableColumn(column, database.getContainer().getImage())) - .map(column -> tableMapper.tableColumnToTableColumn(entity, column, generatedSequence)) - .toList()); - /* set the ordinal position for the columns */ - entity.getColumns() - .forEach(column -> { - column.setOrdinalPosition(idx[0]++); - }); - /* set constraints */ - entity.setConstraints(tableMapper.constraintsCreateDtoToConstraints(tableRepository, entity, createDto.getConstraints())); - /* create history view */ - final ComboPooledDataSource dataSource1 = getPrivilegedDataSource(database.getContainer().getImage(), database.getContainer(), database); - try { - final Connection connection = dataSource1.getConnection(); - final PreparedStatement preparedStatement = tableMapper.tableToCreateHistoryViewRawQuery(connection, entity); + /* create history view */ + int[] idx = {0}; + /* map table */ + table.setInternalName(tableMapper.nameToInternalName(table.getName())); + table.setQueueName("dbrepo"); + table.setRoutingKey("dbrepo." + database.getInternalName() + "." + table.getInternalName()); + table.setIsVersioned(true); + table.setTdbid(databaseId); + table.setDatabase(database); + table.setConstraints(null); + table.setCreatedBy(UserUtil.getId(principal)); + table.setOwnedBy(UserUtil.getId(principal)); + /* map columns */ + table.setColumns(createDto.getColumns() + .stream() + .map(column -> tableMapper.columnCreateDtoToTableColumn(column, database.getContainer().getImage())) + .map(column -> tableMapper.tableColumnToTableColumn(table, column, generatedSequence)) + .toList()); + /* set the ordinal position for the columns */ + table.getColumns() + .forEach(column -> { + column.setOrdinalPosition(idx[0]++); + }); + /* set constraints */ + table.setConstraints(tableMapper.constraintsCreateDtoToConstraints(table, createDto.getConstraints())); + final PreparedStatement preparedStatement = tableMapper.tableToCreateHistoryViewRawQuery(connection, table); preparedStatement.executeUpdate(); } catch (SQLException e) { - log.error("failed to create history view, reason: {}", e.getMessage()); - throw new TableMalformedException("Failed to create history view", e); + log.error("Failed to create table or history view: {}", e.getMessage()); + throw new TableMalformedException("Failed to create table or history view", e); } finally { - dataSource1.close(); + dataSource.close(); } + database.getTables().add(table); /* create in metadata database */ - final Table table = tableRepository.save(entity); - log.info("Created table with id {} in metadata database", table.getId()); - /* create in open search database */ - tableIdxRepository.save(tableMapper.tableToTableDto(table)); - log.info("Created table with id {} in open search database", table.getId()); - final List<ColumnDto> columns = table.getColumns() + final Optional<Table> optionalEntity = databaseRepository.save(database) + .getTables() .stream() - .map(tableMapper::tableColumnToColumnDto) - .toList(); - tableColumnIdxRepository.saveAll(columns); - log.info("Created table columns with table id {} in open search database", table.getId()); - return table; + .filter(t -> t.getDatabase().getId().equals(databaseId)) + .filter(t -> t.getInternalName().equals(table.getInternalName())) + .findFirst(); + if (optionalEntity.isEmpty()) { + log.error("Failed to find table of database with id {} and internal name {}", databaseId, table.getInternalName()); + throw new TableNotFoundException("Failed to find table of database with id " + databaseId + " and internal name " + table.getInternalName()); + } + /* create in open search database */ + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(databaseService.find(databaseId))); + log.info("Created table with id {} in metadata database & search database", optionalEntity.get().getId()); + return optionalEntity.get(); } @Override @@ -243,61 +213,70 @@ public class TableServiceImpl extends HibernateConnector implements TableService ColumnSemanticsUpdateDto updateDto, String authorization) throws TableNotFoundException, DatabaseNotFoundException, TableMalformedException, SemanticEntityNotFoundException, QueryMalformedException { - final Table table = findById(databaseId, tableId); + final Table table = find(databaseId, tableId); final TableColumn column = findColumn(table, columnId); /* assign */ if (updateDto.getUnitUri() != null) { - // FIXME BEGIN democode - if (updateDto.getConceptUri().equals("http://www.wikidata.org/entity/Q11466")) { - if (updateDto.getUnitUri().equals("http://www.ontology-of-units-of-measure.org/resource/om-2/degreeFahrenheit")) { - column.setValMin(BigDecimal.valueOf(ThreadLocalRandom.current().nextDouble(32, 68))) /* 0-20 */; - column.setValMax(BigDecimal.valueOf(ThreadLocalRandom.current().nextDouble(67, 104)).add(column.getValMin())) /* 20-40 */; - column.setMean(BigDecimal.valueOf(ThreadLocalRandom.current().nextDouble(32, 104))); - column.setMedian(BigDecimal.valueOf(ThreadLocalRandom.current().nextDouble(32, 104))); - column.setStdDev(BigDecimal.valueOf(ThreadLocalRandom.current().nextDouble(0, 20))); - log.warn("Faked demo statistical values (deg. Fahrenheit) for column with id {}", columnId); - } else if (updateDto.getUnitUri().equals("http://www.ontology-of-units-of-measure.org/resource/om-2/degreeCelsius")) { - column.setValMin(BigDecimal.valueOf(ThreadLocalRandom.current().nextDouble(0, 20))) /* 0-20 */; - column.setValMax(BigDecimal.valueOf(ThreadLocalRandom.current().nextDouble(20, 40)).add(column.getValMin())) /* 20-40 */; - column.setMean(BigDecimal.valueOf(ThreadLocalRandom.current().nextDouble(0, 40))); - column.setMedian(BigDecimal.valueOf(ThreadLocalRandom.current().nextDouble(0, 40))); - column.setStdDev(BigDecimal.valueOf(ThreadLocalRandom.current().nextDouble(0, 10))); - log.warn("Faked demo statistical values (deg. Celsius) for column with id {}", columnId); - } - } - // FIXME END democode try { column.setUnit(semanticService.findUnit(updateDto.getUnitUri())); - log.debug("Found unit with uri {} in metadata database", updateDto.getUnitUri()); + log.debug("found unit with uri {} in metadata database", updateDto.getUnitUri()); } catch (UnitNotFoundException e) { - column.setUnit(semanticService.saveUnit(updateDto.getUnitUri())); - log.info("Unit with uri {} was created in metadata database", updateDto.getUnitUri()); + final TableColumnUnit unit = TableColumnUnit.builder() + .uri(updateDto.getUnitUri()) + .build(); + column.setUnit(unit); } } else { column.setUnit(null); - log.debug("remove unit of column with id={}", columnId); } if (updateDto.getConceptUri() != null) { try { column.setConcept(semanticService.findConcept(updateDto.getConceptUri())); - log.debug("Found concept with uri {} in metadata database", updateDto.getConceptUri()); + log.debug("found concept with uri {} in metadata database", updateDto.getConceptUri()); } catch (ConceptNotFoundException e) { - column.setConcept(semanticService.saveConcept(updateDto.getConceptUri())); - log.info("Concept with uri {} was created in metadata database", updateDto.getConceptUri()); + final TableColumnConcept concept = TableColumnConcept.builder() + .uri(updateDto.getConceptUri()) + .build(); + column.setConcept(concept); } } else { column.setConcept(null); - log.debug("remove ColumnConcept of column with id={}", columnId); } /* update in metadata database */ - final TableColumn out = tableColumnRepository.save(column); - log.info("Updated table column with id {} of table with id {} in metadata database", columnId, tableId); - /* update in open search database */ table.getColumns().set(table.getColumns().indexOf(column), column); - tableIdxRepository.save(tableMapper.tableToTableDto(table)); - tableColumnIdxRepository.save(tableMapper.tableColumnToColumnDto(column)); - log.info("Updated table column with id {} of table with id {} in open search database", columnId, tableId); - return out; + databaseRepository.save(table.getDatabase()); + /* update in open search database */ + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(databaseService.find(databaseId))); + log.info("Updated table column with id {} of table with id {} in metadata database & search database", columnId, tableId); + return column; + } + + @Override + @Transactional + public void deleteTable(Long databaseId, Long tableId) + throws TableNotFoundException, DatabaseNotFoundException, ImageNotSupportedException, + TableMalformedException, QueryMalformedException { + /* find */ + final Database database = databaseService.find(databaseId); + final Table table = find(databaseId, tableId); + /* run query */ + final ComboPooledDataSource dataSource = getPrivilegedDataSource(database.getContainer().getImage(), database.getContainer(), database); + try { + final Connection connection = dataSource.getConnection(); + tableMapper.tableToDropTableRawQuery(connection, table); + } catch (SQLException e) { + log.error("Failed to drop table: {}", e.getMessage()); + throw new TableMalformedException("Failed to drop table", e); + } finally { + dataSource.close(); + } + /* delete in metadata database */ + database.getTables().remove(table); + databaseRepository.save(database); + log.info("Deleted table with id {} in metadata database", table.getId()); + /* delete in open search database */ + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(databaseService.find(databaseId))); + log.info("Deleted table with id {} in open search database", table.getId()); } /** @@ -314,8 +293,8 @@ public class TableServiceImpl extends HibernateConnector implements TableService .filter(c -> c.getId().equals(columnId)) .findFirst(); if (optional.isEmpty()) { - log.error("Failed to find column with id {}", columnId); - throw new TableMalformedException("Failed to find column with id " + columnId); + log.error("Failed to find column with id {} in metadata database", columnId); + throw new TableMalformedException("Failed to find column with id " + columnId + " in metadata database"); } return optional.get(); } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java index 7fe58ca156b1e0821ca55dc4638c3d1e8c89be22..d7c40db36f7fc4a09090d76eae9f8c125289c740 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java @@ -4,10 +4,7 @@ import at.tuwien.api.auth.SignupRequestDto; import at.tuwien.api.user.*; import at.tuwien.entities.user.User; import at.tuwien.exception.*; -import at.tuwien.gateway.KeycloakGateway; -import at.tuwien.mapper.UserMapper; import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.repository.sdb.UserIdxRepository; import at.tuwien.service.UserService; import lombok.extern.log4j.Log4j2; import org.apache.commons.codec.digest.DigestUtils; @@ -23,18 +20,11 @@ import java.util.UUID; @Service public class UserServiceImpl implements UserService { - private final UserMapper userMapper; private final UserRepository userRepository; - private final KeycloakGateway keycloakGateway; - private final UserIdxRepository userIdxRepository; @Autowired - public UserServiceImpl(UserMapper userMapper, UserRepository userRepository, KeycloakGateway keycloakGateway, - UserIdxRepository userIdxRepository) { - this.userMapper = userMapper; + public UserServiceImpl(UserRepository userRepository) { this.userRepository = userRepository; - this.keycloakGateway = keycloakGateway; - this.userIdxRepository = userIdxRepository; } @Override @@ -46,8 +36,8 @@ public class UserServiceImpl implements UserService { public User findByUsername(String username) throws UserNotFoundException { final Optional<User> optional = userRepository.findByUsername(username); if (optional.isEmpty()) { - log.error("Failed to find user with username {}: not present in metadata database", username); - throw new UserNotFoundException("Failed to find user with username " + username + ": not present in metadata database"); + log.error("Failed to find user with username {} in metadata database", username); + throw new UserNotFoundException("Failed to find user with username " + username + " in metadata database"); } return optional.get(); } @@ -56,8 +46,8 @@ public class UserServiceImpl implements UserService { public User find(UUID id) throws UserNotFoundException { final Optional<User> optional = userRepository.findById(id); if (optional.isEmpty()) { - log.error("Failed to find user with id {}: not present in metadata database", id); - throw new UserNotFoundException("Failed to find user with id " + id + ": not present in metadata database"); + log.error("Failed to find user with id {} in metadata database", id); + throw new UserNotFoundException("Failed to find user with id " + id + " in metadata database"); } return optional.get(); } @@ -76,9 +66,6 @@ public class UserServiceImpl implements UserService { /* create at metadata database */ final User user = userRepository.save(entity); log.info("Created user with id {} in metadata database", user.getId()); - /* save in open search database */ - userIdxRepository.save(userMapper.userToUserDto(user)); - log.info("Created user with id {} in open search database", user.getId()); return user; } @@ -91,10 +78,7 @@ public class UserServiceImpl implements UserService { entity.setOrcid(data.getOrcid()); /* create at metadata database */ final User user = userRepository.save(entity); - log.info("Updated user data for user with id {}", user.getId()); - /* save in open search database */ - userIdxRepository.save(userMapper.userToUserDto(user)); - log.info("Created user with id {} in open search database", user.getId()); + log.info("Modified user with id {} in metadata database", user.getId()); return user; } @@ -103,7 +87,7 @@ public class UserServiceImpl implements UserService { final User user = find(id); user.setMariadbPassword(getMariaDbPassword(data.getPassword())); userRepository.save(user); - log.info("Updated user password with id {}", id); + log.info("Updated password of user with id {} in metadata database", id); } @Override @@ -111,14 +95,13 @@ public class UserServiceImpl implements UserService { final User entity = find(id); entity.setThemeDark(data.getThemeDark()); final User user = userRepository.save(entity); - log.info("Updated theme by updating attribute with id {}", id); + log.info("Updated theme of user with id {} in metadata database", id); return user; } @Override public void validateUsernameNotExists(String username) throws UserAlreadyExistsException { if (userRepository.existsByUsername(username)) { - log.error("User with username {} already exists in metadata database", username); throw new UserAlreadyExistsException("User with username " + username + " already exists in metadata database"); } } @@ -126,7 +109,6 @@ public class UserServiceImpl implements UserService { @Override public void validateEmailNotExists(String email) throws UserEmailAlreadyExistsException { if (userRepository.existsByEmail(email)) { - log.error("User with email {} already exists in metadata database", email); throw new UserEmailAlreadyExistsException("User with email " + email + " already exists in metadata database"); } } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java index af1c574167d6badd839a8b5716bef3712156b4c2..dae45fb07ea2081bd0f48f633c24975c09ec1ee6 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java @@ -5,12 +5,12 @@ import at.tuwien.entities.database.Database; import at.tuwien.entities.database.View; import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.exception.*; +import at.tuwien.mapper.DatabaseMapper; +import at.tuwien.mapper.QueryMapper; import at.tuwien.mapper.ViewMapper; -import at.tuwien.repository.mdb.ViewRepository; -import at.tuwien.repository.sdb.ViewIdxRepository; +import at.tuwien.repository.mdb.DatabaseRepository; +import at.tuwien.repository.sdb.DatabaseIdxRepository; import at.tuwien.service.DatabaseService; -import at.tuwien.service.QueryService; -import at.tuwien.service.UserService; import at.tuwien.service.ViewService; import at.tuwien.utils.UserUtil; import com.google.common.hash.Hashing; @@ -34,58 +34,71 @@ import java.util.Optional; public class ViewServiceImpl extends HibernateConnector implements ViewService { private final ViewMapper viewMapper; - private final UserService userService; - private final ViewRepository viewRepository; + private final QueryMapper queryMapper; + private final DatabaseMapper databaseMapper; private final DatabaseService databaseService; - private final ViewIdxRepository viewIdxRepository; - private final QueryService queryService; + private final DatabaseRepository databaseRepository; + private final DatabaseIdxRepository databaseIdxRepository; @Autowired - public ViewServiceImpl(ViewMapper viewMapper, UserService userService, ViewRepository viewRepository, - DatabaseService databaseService, ViewIdxRepository viewIdxRepository, QueryService queryService) { + public ViewServiceImpl(ViewMapper viewMapper, QueryMapper queryMapper, DatabaseMapper databaseMapper, + DatabaseService databaseService, DatabaseRepository databaseRepository, + DatabaseIdxRepository databaseIdxRepository) { this.viewMapper = viewMapper; - this.userService = userService; - this.viewRepository = viewRepository; + this.queryMapper = queryMapper; + this.databaseMapper = databaseMapper; this.databaseService = databaseService; - this.viewIdxRepository = viewIdxRepository; - this.queryService = queryService; + this.databaseRepository = databaseRepository; + this.databaseIdxRepository = databaseIdxRepository; } @Override - public View findById(Long id) throws ViewNotFoundException { - final Optional<View> optional = viewRepository.findById(id); + public View findById(Long id) throws ViewNotFoundException, DatabaseNotFoundException { + final Optional<View> optional = databaseService.find(id) + .getViews() + .stream() + .filter(v -> v.getId().equals(id)) + .findFirst(); if (optional.isEmpty()) { - log.error("Failed to find view with id: {}", id); - throw new ViewNotFoundException("Failed to find view with id: " + id); + log.error("Failed to find view with id {} in metadata database", id); + throw new ViewNotFoundException("Failed to find view with id " + id + " in metadata database"); } return optional.get(); } @Override @Transactional(readOnly = true) - public List<View> findAll(Long databaseId, Principal principal) throws UserNotFoundException { + public List<View> findAll(Long databaseId, Principal principal) throws UserNotFoundException, + DatabaseNotFoundException { if (principal == null) { - log.trace("principal is null, list only public views"); - return viewRepository.findAllPublicByDatabaseId(databaseId); + final List<View> views = databaseService.find(databaseId) + .getViews() + .stream() + .filter(v -> v.getDatabase().getId().equals(databaseId)) + .toList(); + log.debug("list {} public view(s)", views.size()); + return views; } - log.trace("principal is not null, list public views and mine"); - return viewRepository.findAllPublicOrMineByDatabaseId(databaseId, UserUtil.getId(principal)); + final List<View> views = databaseService.find(databaseId) + .getViews() + .stream() + .filter(v -> v.getDatabase().getId().equals(databaseId) || v.getCreatedBy().equals(UserUtil.getId(principal))) + .toList(); + log.debug("list {} public or private self-owned view(s)", views.size()); + return views; } @Override @Transactional(readOnly = true) - public View findById(Long databaseId, Long id, Principal principal) throws ViewNotFoundException { - final Optional<View> optional; - if (principal == null) { - log.trace("principal is null, find only public view"); - optional = viewRepository.findPublicByDatabaseIdAndId(databaseId, id); - } else { - log.trace("principal is not null, find public view or mine"); - optional = viewRepository.findPublicOrMineByDatabaseIdAndId(databaseId, id, UserUtil.getId(principal)); - } + public View findById(Long databaseId, Long id, Principal principal) throws ViewNotFoundException, + UserNotFoundException, DatabaseNotFoundException { + final Optional<View> optional = findAll(databaseId, principal) + .stream() + .filter(v -> v.getId().equals(id)) + .findFirst(); if (optional.isEmpty()) { - log.error("Failed to find view with id {}", id); - throw new ViewNotFoundException("Failed to find view with id " + id); + log.error("Failed to find view with id {} in metadata database", id); + throw new ViewNotFoundException("Failed to find view with id " + id + " in metadata database"); } return optional.get(); } @@ -111,10 +124,11 @@ public class ViewServiceImpl extends HibernateConnector implements ViewService { dataSource.close(); } /* delete in metadata database */ - viewRepository.delete(view); - log.info("Deleted view with id {} in metadata database", id); - viewIdxRepository.deleteById(id); - log.info("Deleted view with id {} in open search database", id); + database.getViews().remove(view); + databaseRepository.save(database); + /* delete in opensearch database */ + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(databaseService.find(databaseId))); + log.info("Deleted view with id {} in metadata database & search database", id); } @Override @@ -129,7 +143,7 @@ public class ViewServiceImpl extends HibernateConnector implements ViewService { database.getContainer(), database); final List<TableColumn> columns; try { - columns = queryService.parseColumns(data.getQuery(), database); + columns = queryMapper.parseColumns(data.getQuery(), database); } catch (JSQLParserException e) { log.error("Failed to map/parse columns: {}", e.getMessage()); throw new QueryMalformedException(e.getMessage(), e); @@ -159,11 +173,21 @@ public class ViewServiceImpl extends HibernateConnector implements ViewService { .isPublic(data.getIsPublic()) .columns(columns) .build(); - final View view = viewRepository.save(entity); - log.info("Created view with id {} in metadata database", view.getId()); - viewIdxRepository.save(viewMapper.viewToViewDto(view)); - log.info("Created view with id {} in open search database", view.getId()); - return view; + database.getViews() + .add(entity); + final Optional<View> optional = databaseRepository.save(database) + .getViews() + .stream() + .filter(v -> v.getInternalName().equals(entity.getInternalName())) + .findFirst(); + if (optional.isEmpty()) { + log.error("Failed to find created view from database with id {}", databaseId); + throw new ViewMalformedException("Failed to find created view from database with id " + databaseId); + } + /* save in opensearch database */ + databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(databaseService.find(databaseId))); + log.info("Created view with id {} in metadata database & search database", optional.get().getId()); + return optional.get(); } } diff --git a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java index 91fc524226b74c251917359c075fb85a73b5fdaf..a32cd2b2f724e9072b58447353f31124748b2e00 100644 --- a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java +++ b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java @@ -9,6 +9,7 @@ import at.tuwien.api.database.*; import at.tuwien.api.database.query.QueryBriefDto; import at.tuwien.api.database.query.QueryDto; import at.tuwien.api.database.query.QueryResultDto; +import at.tuwien.api.database.table.TableBriefDto; import at.tuwien.api.database.table.TableCreateDto; import at.tuwien.api.database.table.TableCsvDto; import at.tuwien.api.database.table.TableDto; @@ -81,25 +82,26 @@ import static java.time.temporal.ChronoUnit.MINUTES; * <li>Table 1</li> * <li>Table 2</li> * <li>Table 3</li> - * <li>Table 7</li> + * <li>Table 4</li> * <li>Query 1</li> * <li>View 1</li> * <li>View 2</li> * <li>View 3</li> * <li>Identifier 1 (Title=en, Description=en, type=database)</li> - * <li>Identifier 5 (Title=en, Description=en, type=subset, queryId=1)</li> - * <li>Identifier 6 (Title=en, Description=en, type=view, viewId=1)</li> + * <li>Identifier 2 (Title=en, Description=en, type=subset, queryId=1)</li> + * <li>Identifier 3 (Title=en, Description=en, type=view, viewId=1)</li> + * <li>Identifier 4 (Title=en, Description=en, type=table, tableId=1)</li> * </ul> * <p> * Database 2 (Private, User 2) -> Container 1 * <ul> - * <li>Table 4</li> * <li>Table 5</li> * <li>Table 6</li> + * <li>Table 7</li> * <li>Query 2</li> * <li>Query 6</li> * <li>View 4</li> - * <li>Identifier 2 (Title=de, Description=de)</li> + * <li>Identifier 5 (Title=de, Description=de)</li> * </ul> * <p> * Database 3 (Public, User 3) -> Container 1 @@ -109,11 +111,11 @@ import static java.time.temporal.ChronoUnit.MINUTES; * <li>Query 4</li> * <li>Query 5</li> * <li>View 5</li> - * <li>Identifier 3 (Title=en, Description=en, Query=3)</li> + * <li>Identifier 6 (Title=en, Description=en, Query=3)</li> * </ul> * <p> * Database 4 (Public, User 4) - * <li>Identifier 4 (Database=4)</li> + * <li>Identifier 7 (Database=4)</li> * <ul> * </ul> * <br /> @@ -141,7 +143,7 @@ public abstract class BaseTest { public final static String[] DEFAULT_DATABASE_HANDLING = new String[]{"default-database-handling", "update-database-access", "modify-database-visibility", "create-database", "modify-database-owner", "delete-database-access", "check-database-access", "list-databases", - "create-database-access", "find-database"}; + "create-database-access", "find-database", "import-database-data"}; public final static String[] ESCALATED_DATABASE_HANDLING = new String[]{"escalated-database-handling", "delete-database"}; @@ -250,7 +252,7 @@ public abstract class BaseTest { public final static Long USER_1_NOT_BEFORE = 0L; public final static Boolean USER_1_ENABLED = true; public final static Boolean USER_1_THEME_DARK = false; - public final static Instant USER_1_CREATED = Instant.ofEpochSecond(1677399441) /* 2023-02-26 08:17:21 (UTC) */; + public final static Instant USER_1_CREATED = Instant.ofEpochSecond(1677399441L) /* 2023-02-26 08:17:21 (UTC) */; public final static Instant USER_1_LAST_MODIFIED = USER_1_CREATED; public final static UUID USER_1_REALM_ID = REALM_DBREPO_ID; @@ -304,6 +306,7 @@ public abstract class BaseTest { .firstname(USER_1_FIRSTNAME) .lastname(USER_1_LASTNAME) .attributes(USER_1_ATTRIBUTES_DTO) + .name(USER_1_NAME) .build(); public final static UserUpdateDto USER_1_UPDATE_DTO = UserUpdateDto.builder() @@ -335,6 +338,7 @@ public abstract class BaseTest { .username(USER_1_USERNAME) .firstname(USER_1_FIRSTNAME) .lastname(USER_1_LASTNAME) + .name(USER_1_NAME) .build(); public final static UserDetails USER_1_DETAILS = UserDetailsDto.builder() @@ -379,7 +383,7 @@ public abstract class BaseTest { public final static Long USER_2_NOT_BEFORE = 0L; public final static Boolean USER_2_ENABLED = true; public final static Boolean USER_2_THEME_DARK = false; - public final static Instant USER_2_CREATED = Instant.ofEpochSecond(1677399528) /* 2023-02-26 08:18:48 (UTC) */; + public final static Instant USER_2_CREATED = Instant.ofEpochSecond(1677399528L) /* 2023-02-26 08:18:48 (UTC) */; public final static Instant USER_2_LAST_MODIFIED = USER_1_CREATED; public final static UUID USER_2_REALM_ID = REALM_DBREPO_ID; @@ -408,6 +412,7 @@ public abstract class BaseTest { .email(USER_2_EMAIL) .firstname(USER_2_FIRSTNAME) .lastname(USER_2_LASTNAME) + .name(USER_2_NAME) .build(); public final static UserBriefDto USER_2_BRIEF_DTO = UserBriefDto.builder() @@ -415,6 +420,7 @@ public abstract class BaseTest { .username(USER_2_USERNAME) .firstname(USER_2_FIRSTNAME) .lastname(USER_2_LASTNAME) + .name(USER_2_NAME) .build(); public final static SignupRequestDto USER_2_SIGNUP_REQUEST_DTO = SignupRequestDto.builder() @@ -464,7 +470,7 @@ public abstract class BaseTest { public final static Long USER_3_NOT_BEFORE = 0L; public final static Boolean USER_3_ENABLED = true; public final static Boolean USER_3_THEME_DARK = false; - public final static Instant USER_3_CREATED = Instant.ofEpochSecond(1677399559) /* 2023-02-26 08:19:19 (UTC) */; + public final static Instant USER_3_CREATED = Instant.ofEpochSecond(1677399559L) /* 2023-02-26 08:19:19 (UTC) */; public final static UUID USER_3_REALM_ID = REALM_DBREPO_ID; public final static UserAttributesDto USER_3_ATTRIBUTES_DTO = UserAttributesDto.builder() @@ -492,6 +498,15 @@ public abstract class BaseTest { .email(USER_3_EMAIL) .firstname(USER_3_FIRSTNAME) .lastname(USER_3_LASTNAME) + .name(USER_3_NAME) + .build(); + + public final static UserBriefDto USER_3_BRIEF_DTO = UserBriefDto.builder() + .id(USER_3_ID) + .username(USER_3_USERNAME) + .firstname(USER_3_FIRSTNAME) + .lastname(USER_3_LASTNAME) + .name(USER_3_NAME) .build(); public final static UserDetails USER_3_DETAILS = UserDetailsDto.builder() @@ -532,7 +547,7 @@ public abstract class BaseTest { public final static Boolean USER_4_VERIFIED = true; public final static Boolean USER_4_ENABLED = true; public final static Boolean USER_4_THEME_DARK = false; - public final static Instant USER_4_CREATED = Instant.ofEpochSecond(1677399592) /* 2023-02-26 08:19:52 (UTC) */; + public final static Instant USER_4_CREATED = Instant.ofEpochSecond(1677399592L) /* 2023-02-26 08:19:52 (UTC) */; public final static UUID USER_4_REALM_ID = REALM_DBREPO_ID; public final static UserAttributesDto USER_4_ATTRIBUTES_DTO = UserAttributesDto.builder() @@ -594,7 +609,7 @@ public abstract class BaseTest { public final static Boolean USER_5_VERIFIED = true; public final static Boolean USER_5_ENABLED = true; public final static Boolean USER_5_THEME_DARK = false; - public final static Instant USER_5_CREATED = Instant.ofEpochSecond(1677399592) /* 2023-02-26 08:19:52 (UTC) */; + public final static Instant USER_5_CREATED = Instant.ofEpochSecond(1677399592L) /* 2023-02-26 08:19:52 (UTC) */; public final static UUID USER_5_REALM_ID = REALM_DBREPO_ID; public final static UserDto USER_5_DTO = UserDto.builder() @@ -640,7 +655,7 @@ public abstract class BaseTest { public final static Boolean USER_6_VERIFIED = true; public final static Boolean USER_6_ENABLED = true; public final static Boolean USER_6_THEME_DARK = false; - public final static Instant USER_6_CREATED = Instant.ofEpochSecond(1677399592) /* 2023-02-26 08:19:52 (UTC) */; + public final static Instant USER_6_CREATED = Instant.ofEpochSecond(1677399592L) /* 2023-02-26 08:19:52 (UTC) */; public final static UUID USER_6_REALM_ID = REALM_DBREPO_ID; public final static UserDto USER_6_DTO = UserDto.builder() @@ -796,16 +811,6 @@ public abstract class BaseTest { .dateFormats(List.of(IMAGE_DATE_1, IMAGE_DATE_2, IMAGE_DATE_3, IMAGE_DATE_4)) .build(); - public final static ContainerImage IMAGE_1_SIMPLE = ContainerImage.builder() - .id(IMAGE_1_ID) - .name(IMAGE_1_NAME) - .version(IMAGE_1_VERSION) - .dialect(IMAGE_1_DIALECT) - .jdbcMethod(IMAGE_1_JDBC) - .driverClass(IMAGE_1_DRIVER) - .defaultPort(IMAGE_1_PORT) - .build(); - public final static ImageDto IMAGE_1_DTO = ImageDto.builder() .id(IMAGE_1_ID) .registry(IMAGE_1_REGISTRY) @@ -840,13 +845,12 @@ public abstract class BaseTest { public final static Integer CONTAINER_1_SIDECAR_PORT = 33081; public final static String CONTAINER_1_PRIVILEGED_USERNAME = "root"; public final static String CONTAINER_1_PRIVILEGED_PASSWORD = "dbrepo"; - public final static Instant CONTAINER_1_CREATED = Instant.ofEpochSecond(1677399629) /* 2023-02-26 08:20:29 (UTC) */; + public final static Instant CONTAINER_1_CREATED = Instant.ofEpochSecond(1677399629L) /* 2023-02-26 08:20:29 (UTC) */; public final static Container CONTAINER_1 = Container.builder() .id(CONTAINER_1_ID) .name(CONTAINER_1_NAME) .internalName(CONTAINER_1_INTERNALNAME) - .imageId(IMAGE_1_ID) .image(CONTAINER_1_IMAGE) .created(CONTAINER_1_CREATED) .host(CONTAINER_1_HOST) @@ -860,21 +864,6 @@ public abstract class BaseTest { .privilegedPassword(CONTAINER_1_PRIVILEGED_PASSWORD) .build(); - public final static Container CONTAINER_1_SIMPLE = Container.builder() - .id(CONTAINER_1_ID) - .name(CONTAINER_1_NAME) - .internalName(CONTAINER_1_INTERNALNAME) - .imageId(IMAGE_1_ID) - .image(null /* for jpa */) - .created(CONTAINER_1_CREATED) - .host(CONTAINER_1_HOST) - .port(CONTAINER_1_PORT) - .sidecarHost(CONTAINER_1_SIDECAR_HOST) - .sidecarPort(CONTAINER_1_SIDECAR_PORT) - .privilegedUsername(CONTAINER_1_PRIVILEGED_USERNAME) - .privilegedPassword(CONTAINER_1_PRIVILEGED_PASSWORD) - .build(); - public final static ContainerDto CONTAINER_1_DTO = ContainerDto.builder() .id(CONTAINER_1_ID) .name(CONTAINER_1_NAME) @@ -908,13 +897,12 @@ public abstract class BaseTest { public final static Boolean CONTAINER_2_RUNNING = true; public final static String CONTAINER_2_PRIVILEGED_USERNAME = "root"; public final static String CONTAINER_2_PRIVILEGED_PASSWORD = "dbrepo"; - public final static Instant CONTAINER_2_CREATED = Instant.ofEpochSecond(1677399655) /* 2023-02-26 08:20:55 (UTC) */; + public final static Instant CONTAINER_2_CREATED = Instant.ofEpochSecond(1677399655L) /* 2023-02-26 08:20:55 (UTC) */; public final static Container CONTAINER_2 = Container.builder() .id(CONTAINER_2_ID) .name(CONTAINER_2_NAME) .internalName(CONTAINER_2_INTERNALNAME) - .imageId(IMAGE_1_ID) .image(CONTAINER_2_IMAGE) .created(CONTAINER_2_CREATED) .host(CONTAINER_2_HOST) @@ -925,21 +913,6 @@ public abstract class BaseTest { .privilegedPassword(CONTAINER_2_PRIVILEGED_PASSWORD) .build(); - public final static Container CONTAINER_2_SIMPLE = Container.builder() - .id(CONTAINER_2_ID) - .name(CONTAINER_2_NAME) - .internalName(CONTAINER_2_INTERNALNAME) - .imageId(IMAGE_1_ID) - .image(null /* for jpa */) - .created(CONTAINER_2_CREATED) - .host(CONTAINER_2_HOST) - .port(CONTAINER_2_PORT) - .sidecarHost(CONTAINER_2_SIDECAR_HOST) - .sidecarPort(CONTAINER_2_SIDECAR_PORT) - .privilegedUsername(CONTAINER_2_PRIVILEGED_USERNAME) - .privilegedPassword(CONTAINER_2_PRIVILEGED_PASSWORD) - .build(); - public final static ContainerDto CONTAINER_2_DTO = ContainerDto.builder() .id(CONTAINER_2_ID) .name(CONTAINER_2_NAME) @@ -971,28 +944,12 @@ public abstract class BaseTest { public final static Integer CONTAINER_3_SIDECAR_PORT = 33101; public final static String CONTAINER_3_PRIVILEGED_USERNAME = "root"; public final static String CONTAINER_3_PRIVILEGED_PASSWORD = "dbrepo"; - public final static Instant CONTAINER_3_CREATED = Instant.ofEpochSecond(1677399672) /* 2023-02-26 08:21:12 (UTC) */; + public final static Instant CONTAINER_3_CREATED = Instant.ofEpochSecond(1677399672L) /* 2023-02-26 08:21:12 (UTC) */; public final static Container CONTAINER_3 = Container.builder() .id(CONTAINER_3_ID) .name(CONTAINER_3_NAME) .internalName(CONTAINER_3_INTERNALNAME) - .imageId(IMAGE_1_ID) - .image(CONTAINER_3_IMAGE) - .created(CONTAINER_3_CREATED) - .host(CONTAINER_3_HOST) - .port(CONTAINER_3_PORT) - .sidecarHost(CONTAINER_3_SIDECAR_HOST) - .sidecarPort(CONTAINER_3_SIDECAR_PORT) - .privilegedUsername(CONTAINER_3_PRIVILEGED_USERNAME) - .privilegedPassword(CONTAINER_3_PRIVILEGED_PASSWORD) - .build(); - - public final static Container CONTAINER_3_SIMPLE = Container.builder() - .id(CONTAINER_3_ID) - .name(CONTAINER_3_NAME) - .internalName(CONTAINER_3_INTERNALNAME) - .imageId(IMAGE_1_ID) .image(CONTAINER_3_IMAGE) .created(CONTAINER_3_CREATED) .host(CONTAINER_3_HOST) @@ -1014,28 +971,12 @@ public abstract class BaseTest { public final static Integer CONTAINER_4_SIDECAR_PORT = 33111; public final static String CONTAINER_4_PRIVILEGED_USERNAME = "root"; public final static String CONTAINER_4_PRIVILEGED_PASSWORD = "dbrepo"; - public final static Instant CONTAINER_4_CREATED = Instant.ofEpochSecond(1677399688) /* 2023-02-26 08:21:28 (UTC) */; + public final static Instant CONTAINER_4_CREATED = Instant.ofEpochSecond(1677399688L) /* 2023-02-26 08:21:28 (UTC) */; public final static Container CONTAINER_4 = Container.builder() .id(CONTAINER_4_ID) .name(CONTAINER_4_NAME) .internalName(CONTAINER_4_INTERNALNAME) - .imageId(IMAGE_1_ID) - .image(CONTAINER_4_IMAGE) - .created(CONTAINER_4_CREATED) - .host(CONTAINER_4_HOST) - .port(CONTAINER_4_PORT) - .sidecarHost(CONTAINER_4_SIDECAR_HOST) - .sidecarPort(CONTAINER_4_SIDECAR_PORT) - .privilegedUsername(CONTAINER_4_PRIVILEGED_USERNAME) - .privilegedPassword(CONTAINER_4_PRIVILEGED_PASSWORD) - .build(); - - public final static Container CONTAINER_4_SIMPLE = Container.builder() - .id(CONTAINER_4_ID) - .name(CONTAINER_4_NAME) - .internalName(CONTAINER_4_INTERNALNAME) - .imageId(IMAGE_1_ID) .image(CONTAINER_4_IMAGE) .created(CONTAINER_4_CREATED) .host(CONTAINER_4_HOST) @@ -1068,8 +1009,8 @@ public abstract class BaseTest { public final static String DATABASE_1_INTERNALNAME = "weather"; public final static Boolean DATABASE_1_PUBLIC = false; public final static String DATABASE_1_EXCHANGE = "dbrepo"; - public final static Instant DATABASE_1_CREATED = Instant.ofEpochSecond(1677399741) /* 2023-02-26 08:22:21 (UTC) */; - public final static Instant DATABASE_1_LAST_MODIFIED = Instant.ofEpochSecond(1677399741) /* 2023-02-26 08:22:21 (UTC) */; + public final static Instant DATABASE_1_CREATED = Instant.ofEpochSecond(1677399741L) /* 2023-02-26 08:22:21 (UTC) */; + public final static Instant DATABASE_1_LAST_MODIFIED = Instant.ofEpochSecond(1677399741L) /* 2023-02-26 08:22:21 (UTC) */; public final static UUID DATABASE_1_OWNER = USER_1_ID; public final static UUID DATABASE_1_CREATOR = USER_1_ID; @@ -1079,141 +1020,6 @@ public abstract class BaseTest { .write("^(dbrepo\\." + DATABASE_1_INTERNALNAME + "\\..)$") .build(); - public final static Database DATABASE_1 = Database.builder() - .id(DATABASE_1_ID) - .created(Instant.now().minus(1, HOURS)) - .lastModified(Instant.now()) - .isPublic(DATABASE_1_PUBLIC) - .name(DATABASE_1_NAME) - .description(DATABASE_1_DESCRIPTION) - .cid(CONTAINER_1_ID) - .container(CONTAINER_1) - .internalName(DATABASE_1_INTERNALNAME) - .exchangeName(DATABASE_1_EXCHANGE) - .created(DATABASE_1_CREATED) - .lastModified(DATABASE_1_LAST_MODIFIED) - .createdBy(DATABASE_1_CREATOR) - .creator(USER_1) - .ownedBy(DATABASE_1_OWNER) - .owner(USER_1) - .contactPerson(USER_1_ID) - .contact(USER_1) - .tables(List.of()) /* TABLE_1, TABLE_2, TABLE_3, TABLE_7 */ - .views(List.of()) /* VIEW_2, VIEW_3 */ - .build(); - - public final static Database DATABASE_1_SIMPLE = Database.builder() - .id(DATABASE_1_ID) - .created(Instant.now().minus(1, HOURS)) - .lastModified(Instant.now()) - .isPublic(DATABASE_1_PUBLIC) - .name(DATABASE_1_NAME) - .description(DATABASE_1_DESCRIPTION) - .cid(CONTAINER_1_ID) - .container(null /* for jpa */) - .internalName(DATABASE_1_INTERNALNAME) - .exchangeName(DATABASE_1_EXCHANGE) - .created(DATABASE_1_CREATED) - .lastModified(DATABASE_1_LAST_MODIFIED) - .createdBy(USER_1_ID) - .ownedBy(USER_1_ID) - .contactPerson(USER_1_ID) - .tables(List.of() /* for jpa */) - .views(List.of() /* for jpa */) - .build(); - - public final static DatabaseDto DATABASE_1_DTO = DatabaseDto.builder() - .id(DATABASE_1_ID) - .created(Instant.now().minus(1, HOURS)) - .isPublic(DATABASE_1_PUBLIC) - .name(DATABASE_1_NAME) - .internalName(DATABASE_1_INTERNALNAME) - .exchangeName(DATABASE_1_EXCHANGE) - .tables(List.of()) /* TABLE_1, TABLE_2, TABLE_3, TABLE_7 */ - .views(List.of()) - .build(); - - public final static DatabaseBriefDto DATABASE_1_DTO_BRIEF = DatabaseBriefDto.builder() - .id(DATABASE_1_ID) - .container(CONTAINER_1_DTO_BRIEF) - .created(Instant.now().minus(1, HOURS)) - .isPublic(DATABASE_1_PUBLIC) - .name(DATABASE_1_NAME) - .internalName(DATABASE_1_INTERNALNAME) - .build(); - - public final static DatabaseAccess DATABASE_1_USER_1_READ_ACCESS = DatabaseAccess.builder() - .type(AccessType.READ) - .hdbid(DATABASE_1_ID) - .database(DATABASE_1) - .huserid(USER_1_ID) - .user(USER_1) - .build(); - - public final static DatabaseAccess DATABASE_1_USER_1_WRITE_OWN_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_OWN) - .hdbid(DATABASE_1_ID) - .database(DATABASE_1) - .huserid(USER_1_ID) - .user(USER_1) - .build(); - - public final static DatabaseAccess DATABASE_1_USER_1_WRITE_ALL_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_ALL) - .hdbid(DATABASE_1_ID) - .database(DATABASE_1) - .huserid(USER_1_ID) - .user(USER_1) - .build(); - - public final static DatabaseAccess DATABASE_1_USER_2_READ_ACCESS = DatabaseAccess.builder() - .type(AccessType.READ) - .hdbid(DATABASE_1_ID) - .database(DATABASE_1) - .huserid(USER_2_ID) - .user(USER_2) - .build(); - - public final static DatabaseAccess DATABASE_1_USER_2_WRITE_OWN_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_OWN) - .hdbid(DATABASE_1_ID) - .database(DATABASE_1) - .huserid(USER_2_ID) - .user(USER_2) - .build(); - - public final static DatabaseAccess DATABASE_1_USER_2_WRITE_ALL_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_ALL) - .hdbid(DATABASE_1_ID) - .database(DATABASE_1) - .huserid(USER_2_ID) - .user(USER_2) - .build(); - - public final static DatabaseAccess DATABASE_1_USER_3_READ_ACCESS = DatabaseAccess.builder() - .type(AccessType.READ) - .hdbid(DATABASE_1_ID) - .database(DATABASE_1) - .huserid(USER_3_ID) - .user(USER_3) - .build(); - - public final static DatabaseAccess DATABASE_1_USER_3_WRITE_OWN_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_OWN) - .hdbid(DATABASE_1_ID) - .database(DATABASE_1) - .huserid(USER_3_ID) - .user(USER_3) - .build(); - - public final static DatabaseAccess DATABASE_1_USER_3_WRITE_ALL_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_ALL) - .hdbid(DATABASE_1_ID) - .database(DATABASE_1) - .huserid(USER_3_ID) - .user(USER_3) - .build(); - public final static DatabaseCreateDto DATABASE_1_CREATE = DatabaseCreateDto.builder() .name(DATABASE_1_NAME) .isPublic(DATABASE_1_PUBLIC) @@ -1226,196 +1032,45 @@ public abstract class BaseTest { public final static String DATABASE_2_INTERNALNAME = "zoo"; public final static Boolean DATABASE_2_PUBLIC = false; public final static String DATABASE_2_EXCHANGE = "dbrepo"; - public final static Instant DATABASE_2_CREATED = Instant.ofEpochSecond(1677399772) /* 2023-02-26 08:22:52 (UTC) */; - public final static Instant DATABASE_2_LAST_MODIFIED = Instant.ofEpochSecond(1677399772) /* 2023-02-26 08:22:52 (UTC) */; + public final static Instant DATABASE_2_CREATED = Instant.ofEpochSecond(1677399772L) /* 2023-02-26 08:22:52 (UTC) */; + public final static Instant DATABASE_2_LAST_MODIFIED = Instant.ofEpochSecond(1677399772L) /* 2023-02-26 08:22:52 (UTC) */; public final static UUID DATABASE_2_OWNER = USER_2_ID; public final static UUID DATABASE_2_CREATOR = USER_2_ID; - public final static Database DATABASE_2 = Database.builder() + public final static DatabaseBriefDto DATABASE_2_DTO_BRIEF = DatabaseBriefDto.builder() .id(DATABASE_2_ID) + .container(CONTAINER_2_DTO_BRIEF) .created(DATABASE_2_CREATED) - .lastModified(Instant.now()) .isPublic(DATABASE_2_PUBLIC) .name(DATABASE_2_NAME) - .description(DATABASE_2_DESCRIPTION) - .cid(CONTAINER_1_ID) - .container(CONTAINER_1) .internalName(DATABASE_2_INTERNALNAME) - .exchangeName(DATABASE_2_EXCHANGE) - .created(DATABASE_2_CREATED) - .lastModified(DATABASE_2_LAST_MODIFIED) - .createdBy(DATABASE_2_CREATOR) - .creator(USER_2) - .ownedBy(DATABASE_2_OWNER) - .owner(USER_2) - .contactPerson(USER_2_ID) - .contact(USER_2) - .tables(List.of()) /* TABLE_4, TABLE_5, TABLE_6 */ - .views(List.of()) /* VIEW_4 */ .build(); - public final static Database DATABASE_2_SIMPLE = Database.builder() - .id(DATABASE_2_ID) - .created(DATABASE_2_CREATED) - .lastModified(Instant.now()) - .isPublic(DATABASE_2_PUBLIC) + public final static DatabaseCreateDto DATABASE_2_CREATE = DatabaseCreateDto.builder() .name(DATABASE_2_NAME) - .description(DATABASE_2_DESCRIPTION) + .isPublic(DATABASE_2_PUBLIC) .cid(CONTAINER_1_ID) - .container(null /* for jpa */) - .internalName(DATABASE_2_INTERNALNAME) - .exchangeName(DATABASE_2_EXCHANGE) - .created(DATABASE_2_CREATED) - .lastModified(DATABASE_2_LAST_MODIFIED) - .createdBy(USER_2_ID) - .ownedBy(USER_2_ID) - .contactPerson(USER_1_ID) - .tables(List.of() /* for jpa */) - .views(List.of() /* for jpa */) .build(); - public final static DatabaseDto DATABASE_2_DTO = DatabaseDto.builder() - .id(DATABASE_2_ID) - .created(DATABASE_2_CREATED) - .isPublic(DATABASE_2_PUBLIC) - .name(DATABASE_2_NAME) - .internalName(DATABASE_2_INTERNALNAME) - .exchangeName(DATABASE_2_EXCHANGE) - .tables(List.of()) /* TABLE_2, TABLE_2, TABLE_3 */ - .views(List.of()) - .build(); - - public final static DatabaseBriefDto DATABASE_2_DTO_BRIEF = DatabaseBriefDto.builder() - .id(DATABASE_2_ID) - .container(CONTAINER_2_DTO_BRIEF) - .created(DATABASE_2_CREATED) - .isPublic(DATABASE_2_PUBLIC) - .name(DATABASE_2_NAME) - .internalName(DATABASE_2_INTERNALNAME) - .build(); - - public final static DatabaseAccess DATABASE_2_USER_1_READ_ACCESS = DatabaseAccess.builder() - .type(AccessType.READ) - .hdbid(DATABASE_2_ID) - .huserid(USER_1_ID) - .build(); - - public final static DatabaseAccess DATABASE_2_USER_1_WRITE_OWN_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_OWN) - .hdbid(DATABASE_2_ID) - .huserid(USER_1_ID) - .build(); - - public final static DatabaseAccess DATABASE_2_USER_1_WRITE_ALL_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_ALL) - .hdbid(DATABASE_2_ID) - .huserid(USER_1_ID) - .build(); - - public final static DatabaseAccess DATABASE_2_USER_2_READ_ACCESS = DatabaseAccess.builder() - .type(AccessType.READ) - .hdbid(DATABASE_2_ID) - .huserid(USER_2_ID) - .build(); - - public final static DatabaseAccess DATABASE_2_USER_2_WRITE_OWN_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_OWN) - .hdbid(DATABASE_2_ID) - .huserid(USER_2_ID) - .build(); - - public final static DatabaseAccess DATABASE_2_USER_2_WRITE_ALL_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_ALL) - .hdbid(DATABASE_2_ID) - .huserid(USER_2_ID) - .build(); - - public final static DatabaseAccess DATABASE_2_USER_3_READ_ACCESS = DatabaseAccess.builder() - .type(AccessType.READ) - .hdbid(DATABASE_2_ID) - .huserid(USER_3_ID) - .build(); - - public final static DatabaseAccess DATABASE_2_USER_3_WRITE_OWN_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_OWN) - .hdbid(DATABASE_2_ID) - .huserid(USER_3_ID) - .build(); - - public final static DatabaseAccess DATABASE_2_USER_3_WRITE_ALL_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_ALL) - .hdbid(DATABASE_2_ID) - .huserid(USER_3_ID) - .build(); - - public final static DatabaseCreateDto DATABASE_2_CREATE = DatabaseCreateDto.builder() - .name(DATABASE_2_NAME) - .isPublic(DATABASE_2_PUBLIC) - .cid(CONTAINER_1_ID) - .build(); - - public final static Long DATABASE_3_ID = 3L; - public final static String DATABASE_3_NAME = "Musicology"; - public final static String DATABASE_3_DESCRIPTION = "Musicology data"; - public final static String DATABASE_3_INTERNALNAME = "musicology"; - public final static Boolean DATABASE_3_PUBLIC = true; - public final static String DATABASE_3_EXCHANGE = "dbrepo"; - public final static Instant DATABASE_3_CREATED = Instant.ofEpochSecond(1677399792) /* 2023-02-26 08:23:12 (UTC) */; - public final static Instant DATABASE_3_LAST_MODIFIED = Instant.ofEpochSecond(1677399792) /* 2023-02-26 08:23:12 (UTC) */; - public final static UUID DATABASE_3_OWNER = USER_3_ID; - public final static UUID DATABASE_3_CREATOR = USER_3_ID; - - public final static Database DATABASE_3 = Database.builder() - .id(DATABASE_3_ID) - .created(Instant.now().minus(1, HOURS)) - .lastModified(Instant.now()) - .isPublic(DATABASE_3_PUBLIC) - .name(DATABASE_3_NAME) - .description(DATABASE_3_DESCRIPTION) - .cid(CONTAINER_1_ID) - .container(CONTAINER_1) - .internalName(DATABASE_3_INTERNALNAME) - .exchangeName(DATABASE_3_EXCHANGE) - .created(DATABASE_3_CREATED) - .lastModified(DATABASE_3_LAST_MODIFIED) - .createdBy(DATABASE_3_CREATOR) - .creator(USER_3) - .ownedBy(DATABASE_3_OWNER) - .owner(USER_3) - .contactPerson(USER_3_ID) - .contact(USER_3) - .tables(List.of()) /* TABLE_8 */ - .views(List.of()) /* VIEW_5 */ - .build(); - - public final static Database DATABASE_3_SIMPLE = Database.builder() - .id(DATABASE_3_ID) - .created(Instant.now().minus(1, HOURS)) - .lastModified(Instant.now()) - .isPublic(DATABASE_3_PUBLIC) - .name(DATABASE_3_NAME) - .description(DATABASE_3_DESCRIPTION) - .cid(CONTAINER_1_ID) - .container(null /* for jpa */) - .internalName(DATABASE_3_INTERNALNAME) - .exchangeName(DATABASE_3_EXCHANGE) - .created(DATABASE_3_CREATED) - .lastModified(DATABASE_3_LAST_MODIFIED) - .contactPerson(USER_3_ID) - .createdBy(USER_3_ID) - .ownedBy(USER_3_ID) - .tables(List.of() /* for jpa */) - .views(List.of() /* for jpa */) - .build(); - - public final static DatabaseDto DATABASE_3_DTO = DatabaseDto.builder() - .id(DATABASE_3_ID) - .created(DATABASE_3_CREATED) - .isPublic(DATABASE_3_PUBLIC) - .name(DATABASE_3_NAME) - .internalName(DATABASE_3_INTERNALNAME) - .exchangeName(DATABASE_3_EXCHANGE) - .tables(List.of()) /* TABLE_3, TABLE_3, TABLE_3 */ + public final static Long DATABASE_3_ID = 3L; + public final static String DATABASE_3_NAME = "Musicology"; + public final static String DATABASE_3_DESCRIPTION = "Musicology data"; + public final static String DATABASE_3_INTERNALNAME = "musicology"; + public final static Boolean DATABASE_3_PUBLIC = true; + public final static String DATABASE_3_EXCHANGE = "dbrepo"; + public final static Instant DATABASE_3_CREATED = Instant.ofEpochSecond(1677399792L) /* 2023-02-26 08:23:12 (UTC) */; + public final static Instant DATABASE_3_LAST_MODIFIED = Instant.ofEpochSecond(1677399792L) /* 2023-02-26 08:23:12 (UTC) */; + public final static UUID DATABASE_3_OWNER = USER_3_ID; + public final static UUID DATABASE_3_CREATOR = USER_3_ID; + + public final static DatabaseDto DATABASE_3_DTO = DatabaseDto.builder() + .id(DATABASE_3_ID) + .created(DATABASE_3_CREATED) + .isPublic(DATABASE_3_PUBLIC) + .name(DATABASE_3_NAME) + .internalName(DATABASE_3_INTERNALNAME) + .exchangeName(DATABASE_3_EXCHANGE) + .tables(List.of()) /* TABLE_3, TABLE_3, TABLE_3 */ .views(List.of()) .build(); @@ -1427,60 +1082,6 @@ public abstract class BaseTest { .internalName(DATABASE_3_INTERNALNAME) .build(); - public final static DatabaseAccess DATABASE_3_USER_1_READ_ACCESS = DatabaseAccess.builder() - .type(AccessType.READ) - .hdbid(DATABASE_3_ID) - .huserid(USER_1_ID) - .build(); - - public final static DatabaseAccess DATABASE_3_USER_1_WRITE_OWN_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_OWN) - .hdbid(DATABASE_3_ID) - .huserid(USER_1_ID) - .build(); - - public final static DatabaseAccess DATABASE_3_USER_1_WRITE_ALL_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_ALL) - .hdbid(DATABASE_3_ID) - .huserid(USER_1_ID) - .build(); - - public final static DatabaseAccess DATABASE_3_USER_2_READ_ACCESS = DatabaseAccess.builder() - .type(AccessType.READ) - .hdbid(DATABASE_3_ID) - .huserid(USER_2_ID) - .build(); - - public final static DatabaseAccess DATABASE_3_USER_2_WRITE_OWN_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_OWN) - .hdbid(DATABASE_3_ID) - .huserid(USER_2_ID) - .build(); - - public final static DatabaseAccess DATABASE_3_USER_2_WRITE_ALL_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_ALL) - .hdbid(DATABASE_3_ID) - .huserid(USER_2_ID) - .build(); - - public final static DatabaseAccess DATABASE_3_USER_3_READ_ACCESS = DatabaseAccess.builder() - .type(AccessType.READ) - .hdbid(DATABASE_3_ID) - .huserid(USER_3_ID) - .build(); - - public final static DatabaseAccess DATABASE_3_USER_3_WRITE_OWN_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_OWN) - .hdbid(DATABASE_3_ID) - .huserid(USER_3_ID) - .build(); - - public final static DatabaseAccess DATABASE_3_USER_3_WRITE_ALL_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_ALL) - .hdbid(DATABASE_3_ID) - .huserid(USER_3_ID) - .build(); - public final static DatabaseCreateDto DATABASE_3_CREATE = DatabaseCreateDto.builder() .name(DATABASE_3_NAME) .isPublic(DATABASE_3_PUBLIC) @@ -1493,34 +1094,11 @@ public abstract class BaseTest { public final static Boolean DATABASE_4_PUBLIC = true; public final static String DATABASE_4_INTERNALNAME = "weather_at"; public final static String DATABASE_4_EXCHANGE = "dbrepo"; - public final static Instant DATABASE_4_CREATED = Instant.ofEpochSecond(1677399813) /* 2023-02-26 08:23:33 (UTC) */; - public final static Instant DATABASE_4_LAST_MODIFIED = Instant.ofEpochSecond(1677399813) /* 2023-02-26 08:23:33 (UTC) */; + public final static Instant DATABASE_4_CREATED = Instant.ofEpochSecond(1677399813L) /* 2023-02-26 08:23:33 (UTC) */; + public final static Instant DATABASE_4_LAST_MODIFIED = Instant.ofEpochSecond(1677399813L) /* 2023-02-26 08:23:33 (UTC) */; public final static UUID DATABASE_4_OWNER = USER_4_ID; public final static UUID DATABASE_4_CREATOR = USER_4_ID; - public final static Database DATABASE_4 = Database.builder() - .id(DATABASE_4_ID) - .created(Instant.now().minus(4, HOURS)) - .lastModified(Instant.now()) - .isPublic(DATABASE_4_PUBLIC) - .name(DATABASE_4_NAME) - .description(DATABASE_4_DESCRIPTION) - .cid(CONTAINER_4_ID) - .container(CONTAINER_4) - .internalName(DATABASE_4_INTERNALNAME) - .exchangeName(DATABASE_4_EXCHANGE) - .created(DATABASE_4_CREATED) - .lastModified(DATABASE_4_LAST_MODIFIED) - .createdBy(DATABASE_4_CREATOR) - .creator(USER_4) - .ownedBy(DATABASE_4_OWNER) - .owner(USER_4) - .contactPerson(USER_4_ID) - .contact(USER_4) - .tables(List.of()) - .views(List.of()) - .build(); - public final static DatabaseDto DATABASE_4_DTO = DatabaseDto.builder() .id(DATABASE_4_ID) .created(Instant.now().minus(4, HOURS)) @@ -1530,8 +1108,8 @@ public abstract class BaseTest { .internalName(DATABASE_4_INTERNALNAME) .exchangeName(DATABASE_4_EXCHANGE) .created(DATABASE_4_CREATED) - .creator(USER_4_BRIEF_DTO) - .owner(USER_4_BRIEF_DTO) + .creator(USER_4_DTO) + .owner(USER_4_DTO) .tables(List.of()) .views(List.of()) .build(); @@ -1548,131 +1126,61 @@ public abstract class BaseTest { .owner(USER_4_BRIEF_DTO) .build(); - public final static Database DATABASE_4_SIMPLE = Database.builder() - .id(DATABASE_4_ID) - .created(Instant.now().minus(4, HOURS)) - .lastModified(Instant.now()) - .isPublic(DATABASE_4_PUBLIC) - .name(DATABASE_4_NAME) - .description(DATABASE_4_DESCRIPTION) - .cid(CONTAINER_4_ID) - .container(CONTAINER_4) - .internalName(DATABASE_4_INTERNALNAME) - .exchangeName(DATABASE_4_EXCHANGE) - .created(DATABASE_4_CREATED) - .lastModified(DATABASE_4_LAST_MODIFIED) - .contactPerson(USER_4_ID) - .createdBy(USER_4_ID) - .ownedBy(USER_4_ID) - .tables(List.of() /* for jpa */) - .views(List.of() /* for jpa */) + public final static Long TABLE_1_ID = 1L; + public final static String TABLE_1_NAME = "Weather AUS"; + public final static String TABLE_1_INTERNALNAME = "weather_aus"; + public final static Boolean TABLE_1_VERSIONED = true; + public final static String TABLE_1_DESCRIPTION = "Weather in the world"; + public final static String TABLE_1_QUEUE_NAME = TABLE_1_INTERNALNAME; + public final static String TABLE_1_ROUTING_KEY = "dbrepo\\." + DATABASE_1_EXCHANGE + "\\." + TABLE_1_QUEUE_NAME; + public final static Long TABLE_1_DATABASE_ID = DATABASE_1_ID; + public final static Instant TABLE_1_CREATED = Instant.ofEpochSecond(1677399975L) /* 2023-02-26 08:26:15 (UTC) */; + public final static Instant TABLE_1_LAST_MODIFIED = Instant.ofEpochSecond(1677399975L) /* 2023-02-26 08:26:15 (UTC) */; + + public final static Table TABLE_1 = Table.builder() + .id(TABLE_1_ID) + .tdbid(DATABASE_1_ID) + .database(null /* DATABASE_1 */) + .created(TABLE_1_CREATED) + .internalName(TABLE_1_INTERNALNAME) + .isVersioned(TABLE_1_VERSIONED) + .description(TABLE_1_DESCRIPTION) + .name(TABLE_1_NAME) + .queueName(TABLE_1_QUEUE_NAME) + .routingKey(TABLE_1_ROUTING_KEY) + .columns(List.of() /* TABLE_1_COLUMNS */) + .constraints(null /* TABLE_1_CONSTRAINTS */) + .createdBy(USER_1_ID) + .creator(USER_1) + .ownedBy(USER_1_ID) + .owner(USER_1) + .lastModified(TABLE_1_LAST_MODIFIED) .build(); - public final static DatabaseAccess DATABASE_4_USER_1_READ_ACCESS = DatabaseAccess.builder() - .type(AccessType.READ) - .hdbid(DATABASE_4_ID) - .huserid(USER_1_ID) + public final static TableDto TABLE_1_DTO = TableDto.builder() + .id(TABLE_1_ID) + .tdbid(DATABASE_1_ID) + .created(TABLE_1_CREATED) + .internalName(TABLE_1_INTERNALNAME) + .isVersioned(TABLE_1_VERSIONED) + .description(TABLE_1_DESCRIPTION) + .name(TABLE_1_NAME) + .queueName(TABLE_1_QUEUE_NAME) + .routingKey(TABLE_1_ROUTING_KEY) + .columns(List.of() /* TABLE_1_COLUMNS */) + .constraints(null /* TABLE_1_CONSTRAINTS */) + .createdBy(USER_1_ID) + .owner(USER_1_DTO) .build(); - public final static DatabaseAccess DATABASE_4_USER_1_WRITE_OWN_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_OWN) - .hdbid(DATABASE_4_ID) - .huserid(USER_1_ID) - .build(); - - public final static DatabaseAccess DATABASE_4_USER_1_WRITE_ALL_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_ALL) - .hdbid(DATABASE_4_ID) - .huserid(USER_1_ID) - .build(); - - public final static DatabaseAccess DATABASE_4_USER_2_READ_ACCESS = DatabaseAccess.builder() - .type(AccessType.READ) - .hdbid(DATABASE_4_ID) - .huserid(USER_2_ID) - .build(); - - public final static DatabaseAccess DATABASE_4_USER_2_WRITE_OWN_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_OWN) - .hdbid(DATABASE_4_ID) - .huserid(USER_2_ID) - .build(); - - public final static DatabaseAccess DATABASE_4_USER_2_WRITE_ALL_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_ALL) - .hdbid(DATABASE_4_ID) - .huserid(USER_2_ID) - .build(); - - public final static DatabaseAccess DATABASE_4_USER_3_READ_ACCESS = DatabaseAccess.builder() - .type(AccessType.READ) - .hdbid(DATABASE_4_ID) - .huserid(USER_3_ID) - .build(); - - public final static DatabaseAccess DATABASE_4_USER_3_WRITE_OWN_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_OWN) - .hdbid(DATABASE_4_ID) - .huserid(USER_3_ID) - .build(); - - public final static DatabaseAccess DATABASE_4_USER_3_WRITE_ALL_ACCESS = DatabaseAccess.builder() - .type(AccessType.WRITE_ALL) - .hdbid(DATABASE_4_ID) - .huserid(USER_3_ID) - .build(); - - public final static Long TABLE_1_ID = 1L; - public final static String TABLE_1_NAME = "Weather AUS"; - public final static String TABLE_1_INTERNALNAME = "weather_aus"; - public final static Boolean TABLE_1_VERSIONED = true; - public final static String TABLE_1_DESCRIPTION = "Weather in the world"; - public final static String TABLE_1_QUEUE_NAME = TABLE_1_INTERNALNAME; - public final static String TABLE_1_ROUTING_KEY = "dbrepo\\." + DATABASE_1_EXCHANGE + "\\." + TABLE_1_QUEUE_NAME; - public final static UUID TABLE_1_CREATED_BY = USER_1_ID; - public final static Long TABLE_1_DATABASE_ID = DATABASE_1_ID; - public final static Instant TABLE_1_CREATED = Instant.ofEpochSecond(1677399975) /* 2023-02-26 08:26:15 (UTC) */; - public final static Instant TABLE_1_LAST_MODIFIED = Instant.ofEpochSecond(1677399975) /* 2023-02-26 08:26:15 (UTC) */; - - public final static Table TABLE_1 = Table.builder() - .id(TABLE_1_ID) - .tdbid(DATABASE_1_ID) - .database(DATABASE_1) - .created(Instant.now()) - .internalName(TABLE_1_INTERNALNAME) - .isVersioned(TABLE_1_VERSIONED) - .description(TABLE_1_DESCRIPTION) - .name(TABLE_1_NAME) - .lastModified(TABLE_1_LAST_MODIFIED) - .queueName(TABLE_1_QUEUE_NAME) - .routingKey(TABLE_1_ROUTING_KEY) - .columns(List.of() /* needs to be set in the junit tests */) - .constraints(null /* TABLE_1_CONSTRAINTS */) - .created(TABLE_1_CREATED) - .createdBy(USER_1_ID) - .ownedBy(USER_1_ID) - .owner(USER_1) - .lastModified(TABLE_1_LAST_MODIFIED) - .build(); - - public final static Table TABLE_1_SIMPLE = Table.builder() + public final static TableBriefDto TABLE_1_BRIEF_DTO = TableBriefDto.builder() .id(TABLE_1_ID) - .tdbid(DATABASE_1_ID) - .database(null /* for jpa */) - .created(Instant.now()) .internalName(TABLE_1_INTERNALNAME) .isVersioned(TABLE_1_VERSIONED) .description(TABLE_1_DESCRIPTION) .name(TABLE_1_NAME) - .lastModified(TABLE_1_LAST_MODIFIED) - .queueName(TABLE_1_QUEUE_NAME) - .routingKey(TABLE_1_ROUTING_KEY) - .columns(List.of() /* needs to be set in the junit tests */) - .constraints(null /* TABLE_1_CONSTRAINTS */) - .created(TABLE_1_CREATED) - .createdBy(USER_1_ID) - .ownedBy(USER_1_ID) - .lastModified(TABLE_1_LAST_MODIFIED) + .columns(List.of() /* TABLE_1_COLUMNS */) + .owner(USER_1_BRIEF_DTO) .build(); public final static Long TABLE_2_ID = 2L; @@ -1682,16 +1190,14 @@ public abstract class BaseTest { public final static String TABLE_2_DESCRIPTION = "Weather location"; public final static String TABLE_2_QUEUE_NAME = TABLE_2_INTERNALNAME; public final static String TABLE_2_ROUTING_KEY = "dbrepo\\." + DATABASE_1_EXCHANGE + "\\." + TABLE_2_QUEUE_NAME; - public final static UUID TABLE_2_CREATED_BY = USER_1_ID; - public final static Long TABLE_2_DATABASE_ID = DATABASE_1_ID; - public final static Instant TABLE_2_CREATED = Instant.ofEpochSecond(1677400007) /* 2023-02-26 08:26:47 (UTC) */; - public final static Instant TABLE_2_LAST_MODIFIED = Instant.ofEpochSecond(1677400007) /* 2023-02-26 08:26:47 (UTC) */; + public final static Instant TABLE_2_CREATED = Instant.ofEpochSecond(1677400007L) /* 2023-02-26 08:26:47 (UTC) */; + public final static Instant TABLE_2_LAST_MODIFIED = Instant.ofEpochSecond(1677400007L) /* 2023-02-26 08:26:47 (UTC) */; public final static Table TABLE_2 = Table.builder() .id(TABLE_2_ID) .tdbid(DATABASE_1_ID) - .database(DATABASE_1) - .created(Instant.now()) + .database(null /* DATABASE_1 */) + .created(TABLE_2_CREATED) .internalName(TABLE_2_INTERNALNAME) .isVersioned(TABLE_2_VERSIONED) .description(TABLE_2_DESCRIPTION) @@ -1699,52 +1205,54 @@ public abstract class BaseTest { .lastModified(TABLE_2_LAST_MODIFIED) .queueName(TABLE_2_QUEUE_NAME) .routingKey(TABLE_2_ROUTING_KEY) - .columns(List.of() /* needs to be set in the junit tests */) + .columns(List.of() /* TABLE_2_COLUMNS */) .constraints(null /* TABLE_2_CONSTRAINTS */) .createdBy(USER_2_ID) .ownedBy(USER_2_ID) .owner(USER_2) - .created(TABLE_2_CREATED) - .lastModified(TABLE_2_LAST_MODIFIED) .build(); - public final static Table TABLE_2_SIMPLE = Table.builder() + public final static TableDto TABLE_2_DTO = TableDto.builder() .id(TABLE_2_ID) .tdbid(DATABASE_1_ID) - .database(null /* for jpa */) - .created(Instant.now()) + .created(TABLE_2_CREATED) .internalName(TABLE_2_INTERNALNAME) .isVersioned(TABLE_2_VERSIONED) .description(TABLE_2_DESCRIPTION) .name(TABLE_2_NAME) - .lastModified(TABLE_2_LAST_MODIFIED) .queueName(TABLE_2_QUEUE_NAME) .routingKey(TABLE_2_ROUTING_KEY) - .columns(List.of() /* for jpa */) + .columns(List.of() /* TABLE_2_COLUMNS */) .constraints(null /* TABLE_2_CONSTRAINTS */) .createdBy(USER_2_ID) - .ownedBy(USER_2_ID) - .created(TABLE_2_CREATED) - .lastModified(TABLE_2_LAST_MODIFIED) + .owner(USER_2_DTO) + .build(); + + public final static TableBriefDto TABLE_2_BRIEF_DTO = TableBriefDto.builder() + .id(TABLE_2_ID) + .internalName(TABLE_2_INTERNALNAME) + .isVersioned(TABLE_2_VERSIONED) + .description(TABLE_2_DESCRIPTION) + .name(TABLE_2_NAME) + .columns(List.of() /* TABLE_2_COLUMNS */) + .owner(USER_2_BRIEF_DTO) .build(); public final static Long TABLE_3_ID = 3L; - public final static String TABLE_3_NAME = "Traffic Zürich"; - public final static String TABLE_3_INTERNALNAME = "traffic_zu_rich"; + public final static String TABLE_3_NAME = "Sensor"; + public final static String TABLE_3_INTERNALNAME = "sensor"; public final static Boolean TABLE_3_VERSIONED = true; - public final static String TABLE_3_DESCRIPTION = "https://www.kaggle.com/laa283/zurich-public-transport/version/2"; + public final static String TABLE_3_DESCRIPTION = "Some sensor data"; public final static String TABLE_3_QUEUE_NAME = TABLE_3_INTERNALNAME; public final static String TABLE_3_ROUTING_KEY = "dbrepo\\." + DATABASE_1_EXCHANGE + "\\." + TABLE_3_QUEUE_NAME; - public final static UUID TABLE_3_CREATED_BY = USER_1_ID; - public final static Long TABLE_3_DATABASE_ID = DATABASE_1_ID; - public final static Instant TABLE_3_CREATED = Instant.ofEpochSecond(1677400031) /* 2023-02-26 08:27:11 (UTC) */; - public final static Instant TABLE_3_LAST_MODIFIED = Instant.ofEpochSecond(1677400031) /* 2023-02-26 08:27:11 (UTC) */; + public final static Instant TABLE_3_CREATED = Instant.ofEpochSecond(1677400031L) /* 2023-02-26 08:27:11 (UTC) */; + public final static Instant TABLE_3_LAST_MODIFIED = Instant.ofEpochSecond(1677400031L) /* 2023-02-26 08:27:11 (UTC) */; public final static Table TABLE_3 = Table.builder() .id(TABLE_3_ID) .tdbid(DATABASE_1_ID) - .database(DATABASE_1) - .created(Instant.now()) + .database(null /* DATABASE_1 */) + .created(TABLE_3_CREATED) .internalName(TABLE_3_INTERNALNAME) .isVersioned(TABLE_3_VERSIONED) .description(TABLE_3_DESCRIPTION) @@ -1752,33 +1260,37 @@ public abstract class BaseTest { .lastModified(TABLE_3_LAST_MODIFIED) .queueName(TABLE_3_QUEUE_NAME) .routingKey(TABLE_3_ROUTING_KEY) - .columns(List.of() /* needs to be set in the junit tests */) + .columns(List.of() /* TABLE_3_COLUMNS */) .constraints(null /* TABLE_3_CONSTRAINTS */) .createdBy(USER_3_ID) .ownedBy(USER_3_ID) .owner(USER_3) - .created(TABLE_3_CREATED) - .lastModified(TABLE_3_LAST_MODIFIED) .build(); - public final static Table TABLE_3_SIMPLE = Table.builder() + public final static TableDto TABLE_3_DTO = TableDto.builder() .id(TABLE_3_ID) .tdbid(DATABASE_1_ID) - .database(null /* for jpa */) - .created(Instant.now()) + .created(TABLE_3_CREATED) .internalName(TABLE_3_INTERNALNAME) .isVersioned(TABLE_3_VERSIONED) .description(TABLE_3_DESCRIPTION) .name(TABLE_3_NAME) - .lastModified(TABLE_3_LAST_MODIFIED) .queueName(TABLE_3_QUEUE_NAME) .routingKey(TABLE_3_ROUTING_KEY) - .columns(List.of() /* for jpa */) + .columns(List.of() /* TABLE_3_COLUMNS */) .constraints(null /* TABLE_3_CONSTRAINTS */) .createdBy(USER_3_ID) - .ownedBy(USER_3_ID) - .created(TABLE_3_CREATED) - .lastModified(TABLE_3_LAST_MODIFIED) + .owner(USER_3_DTO) + .build(); + + public final static TableBriefDto TABLE_3_BRIEF_DTO = TableBriefDto.builder() + .id(TABLE_3_ID) + .internalName(TABLE_3_INTERNALNAME) + .isVersioned(TABLE_3_VERSIONED) + .description(TABLE_3_DESCRIPTION) + .name(TABLE_3_NAME) + .columns(List.of() /* TABLE_3_COLUMNS */) + .owner(USER_3_BRIEF_DTO) .build(); public final static ConstraintsCreateDto TABLE_3_CONSTRAINTS_CREATE_DTO = ConstraintsCreateDto.builder() @@ -1807,73 +1319,19 @@ public abstract class BaseTest { .constraints(TABLE_3_CONSTRAINTS_INVALID_CREATE_DTO) .build(); - public final static Long TABLE_4_ID = 4L; - public final static String TABLE_4_NAME = "zoo"; - public final static String TABLE_4_INTERNALNAME = "zoo"; - public final static Boolean TABLE_4_VERSIONED = true; - public final static String TABLE_4_DESCRIPTION = "Some Kaggle dataset"; - public final static String TABLE_4_QUEUE_NAME = TABLE_4_INTERNALNAME; - public final static String TABLE_4_ROUTING_KEY = "dbrepo\\." + DATABASE_2_EXCHANGE + "\\." + TABLE_4_QUEUE_NAME; - public final static Instant TABLE_4_CREATED = Instant.ofEpochSecond(1677400067) /* 2023-02-26 08:27:47 (UTC) */; - public final static Instant TABLE_4_LAST_MODIFIED = Instant.ofEpochSecond(1677400067) /* 2023-02-26 08:27:47 (UTC) */; - - public final static Table TABLE_4 = Table.builder() - .id(TABLE_4_ID) - .tdbid(DATABASE_2_ID) - .database(DATABASE_2) - .created(Instant.now()) - .internalName(TABLE_4_INTERNALNAME) - .isVersioned(TABLE_4_VERSIONED) - .description(TABLE_4_DESCRIPTION) - .name(TABLE_4_NAME) - .lastModified(TABLE_4_LAST_MODIFIED) - .queueName(TABLE_4_QUEUE_NAME) - .routingKey(TABLE_4_ROUTING_KEY) - .columns(List.of() /* needs to be set in the junit tests */) - .constraints(null) /* TABLE_4_CONSTRAINTS */ - .createdBy(USER_1_ID) - .ownedBy(USER_1_ID) - .owner(USER_1) - .build(); - - public final static Table TABLE_4_SIMPLE = Table.builder() - .id(TABLE_4_ID) - .tdbid(DATABASE_2_ID) - .database(null /* for jpa */) - .created(Instant.now()) - .internalName(TABLE_4_INTERNALNAME) - .isVersioned(TABLE_4_VERSIONED) - .description(TABLE_4_DESCRIPTION) - .name(TABLE_4_NAME) - .lastModified(TABLE_4_LAST_MODIFIED) - .queueName(TABLE_4_QUEUE_NAME) - .routingKey(TABLE_4_ROUTING_KEY) - .columns(List.of() /* for jpa */) - .constraints(null /* for jpa */) - .createdBy(USER_1_ID) - .ownedBy(USER_1_ID) - .build(); - - public final static TableCsvDto TABLE_4_CSV_DTO = TableCsvDto.builder() - .data(new HashMap<>() {{ - put("id", "102"); - }}) - .build(); - public final static Long TABLE_5_ID = 5L; - public final static String TABLE_5_NAME = "names"; - public final static String TABLE_5_INTERNALNAME = "names"; + public final static String TABLE_5_NAME = "zoo"; + public final static String TABLE_5_INTERNALNAME = "zoo"; public final static Boolean TABLE_5_VERSIONED = true; - public final static String TABLE_5_DESCRIPTION = "Some names dataset"; + public final static String TABLE_5_DESCRIPTION = "Some Kaggle dataset"; public final static String TABLE_5_QUEUE_NAME = TABLE_5_INTERNALNAME; public final static String TABLE_5_ROUTING_KEY = "dbrepo\\." + DATABASE_2_EXCHANGE + "\\." + TABLE_5_QUEUE_NAME; - public final static Instant TABLE_5_CREATED = Instant.ofEpochSecond(1677400117) /* 2023-02-26 08:28:37 (UTC) */; - public final static Instant TABLE_5_LAST_MODIFIED = Instant.ofEpochSecond(1677400117) /* 2023-02-26 08:28:37 (UTC) */; + public final static Instant TABLE_5_CREATED = Instant.ofEpochSecond(1677400067L) /* 2023-02-26 08:27:47 (UTC) */; + public final static Instant TABLE_5_LAST_MODIFIED = Instant.ofEpochSecond(1677400067L) /* 2023-02-26 08:27:47 (UTC) */; public final static Table TABLE_5 = Table.builder() .id(TABLE_5_ID) .tdbid(DATABASE_2_ID) - .database(DATABASE_2) .created(Instant.now()) .internalName(TABLE_5_INTERNALNAME) .isVersioned(TABLE_5_VERSIONED) @@ -1887,46 +1345,45 @@ public abstract class BaseTest { .createdBy(USER_1_ID) .ownedBy(USER_1_ID) .owner(USER_1) - .created(TABLE_5_CREATED) - .lastModified(TABLE_5_LAST_MODIFIED) .build(); - public final static Table TABLE_5_SIMPLE = Table.builder() + public final static TableDto TABLE_5_DTO = TableDto.builder() .id(TABLE_5_ID) .tdbid(DATABASE_2_ID) - .database(null /* for jpa */) .created(Instant.now()) .internalName(TABLE_5_INTERNALNAME) .isVersioned(TABLE_5_VERSIONED) .description(TABLE_5_DESCRIPTION) .name(TABLE_5_NAME) - .lastModified(TABLE_5_LAST_MODIFIED) .queueName(TABLE_5_QUEUE_NAME) .routingKey(TABLE_5_ROUTING_KEY) - .columns(List.of() /* for jpa */) - .constraints(null /* for jpa */) + .columns(List.of() /* needs to be set in the junit tests */) + .constraints(null) /* TABLE_5_CONSTRAINTS */ .createdBy(USER_1_ID) - .ownedBy(USER_1_ID) - .created(TABLE_5_CREATED) - .lastModified(TABLE_5_LAST_MODIFIED) + .owner(USER_1_DTO) + .build(); + + public final static TableCsvDto TABLE_5_CSV_DTO = TableCsvDto.builder() + .data(new HashMap<>() {{ + put("id", "102"); + }}) .build(); public final static Long TABLE_6_ID = 6L; - public final static String TABLE_6_NAME = "likes"; - public final static String TABLE_6_INTERNAL_NAME = "likes"; + public final static String TABLE_6_NAME = "names"; + public final static String TABLE_6_INTERNALNAME = "names"; public final static Boolean TABLE_6_VERSIONED = true; - public final static String TABLE_6_DESCRIPTION = "Some likes dataset"; - public final static String TABLE_6_QUEUE_NAME = TABLE_6_INTERNAL_NAME; + public final static String TABLE_6_DESCRIPTION = "Some names dataset"; + public final static String TABLE_6_QUEUE_NAME = TABLE_6_INTERNALNAME; public final static String TABLE_6_ROUTING_KEY = "dbrepo\\." + DATABASE_2_EXCHANGE + "\\." + TABLE_6_QUEUE_NAME; - public final static Instant TABLE_6_CREATED = Instant.ofEpochSecond(1677400147) /* 2023-02-26 08:29:07 (UTC) */; - public final static Instant TABLE_6_LAST_MODIFIED = Instant.ofEpochSecond(1677400147) /* 2023-02-26 08:29:07 (UTC) */; + public final static Instant TABLE_6_CREATED = Instant.ofEpochSecond(1677400117L) /* 2023-02-26 08:28:37 (UTC) */; + public final static Instant TABLE_6_LAST_MODIFIED = Instant.ofEpochSecond(1677400117L) /* 2023-02-26 08:28:37 (UTC) */; public final static Table TABLE_6 = Table.builder() .id(TABLE_6_ID) .tdbid(DATABASE_2_ID) - .database(DATABASE_2) - .created(Instant.now()) - .internalName(TABLE_6_INTERNAL_NAME) + .created(TABLE_6_CREATED) + .internalName(TABLE_6_INTERNALNAME) .isVersioned(TABLE_6_VERSIONED) .description(TABLE_6_DESCRIPTION) .name(TABLE_6_NAME) @@ -1939,79 +1396,128 @@ public abstract class BaseTest { .ownedBy(USER_1_ID) .owner(USER_1) .created(TABLE_6_CREATED) - .lastModified(TABLE_6_LAST_MODIFIED) .build(); - public final static Table TABLE_6_SIMPLE = Table.builder() + public final static TableDto TABLE_6_DTO = TableDto.builder() .id(TABLE_6_ID) .tdbid(DATABASE_2_ID) - .database(null /* for jpa */) - .created(Instant.now()) - .internalName(TABLE_6_INTERNAL_NAME) + .created(TABLE_6_CREATED) + .internalName(TABLE_6_INTERNALNAME) .isVersioned(TABLE_6_VERSIONED) .description(TABLE_6_DESCRIPTION) .name(TABLE_6_NAME) - .lastModified(TABLE_6_LAST_MODIFIED) .queueName(TABLE_6_QUEUE_NAME) .routingKey(TABLE_6_ROUTING_KEY) - .columns(List.of() /* for jpa */) + .columns(List.of() /* needs to be set in the junit tests */) + .constraints(null) /* TABLE_6_CONSTRAINTS */ .createdBy(USER_1_ID) - .ownedBy(USER_1_ID) + .owner(USER_1_DTO) .created(TABLE_6_CREATED) - .lastModified(TABLE_6_LAST_MODIFIED) .build(); public final static Long TABLE_7_ID = 7L; - public final static String TABLE_7_NAME = "Sensor"; - public final static String TABLE_7_INTERNAL_NAME = "sensor"; + public final static String TABLE_7_NAME = "likes"; + public final static String TABLE_7_INTERNAL_NAME = "likes"; public final static Boolean TABLE_7_VERSIONED = true; - public final static String TABLE_7_DESCRIPTION = "Hello sensor"; + public final static String TABLE_7_DESCRIPTION = "Some likes dataset"; public final static String TABLE_7_QUEUE_NAME = TABLE_7_INTERNAL_NAME; - public final static String TABLE_7_ROUTING_KEY = "dbrepo\\." + DATABASE_1_EXCHANGE + "\\." + TABLE_7_QUEUE_NAME; - public final static Instant TABLE_7_CREATED = Instant.ofEpochSecond(1677400175) /* 2023-02-26 08:29:35 (UTC) */; - public final static Instant TABLE_7_LAST_MODIFIED = Instant.ofEpochSecond(1677400175) /* 2023-02-26 08:29:35 (UTC) */; + public final static String TABLE_7_ROUTING_KEY = "dbrepo\\." + DATABASE_2_EXCHANGE + "\\." + TABLE_7_QUEUE_NAME; + public final static Instant TABLE_7_CREATED = Instant.ofEpochSecond(1677400147L) /* 2023-02-26 08:29:07 (UTC) */; + public final static Instant TABLE_7_LAST_MODIFIED = Instant.ofEpochSecond(1677400147L) /* 2023-02-26 08:29:07 (UTC) */; public final static Table TABLE_7 = Table.builder() .id(TABLE_7_ID) - .tdbid(DATABASE_1_ID) - .database(DATABASE_1) - .created(Instant.now()) + .tdbid(DATABASE_2_ID) + .created(TABLE_7_CREATED) .internalName(TABLE_7_INTERNAL_NAME) + .isVersioned(TABLE_7_VERSIONED) .description(TABLE_7_DESCRIPTION) - .database(DATABASE_1) .name(TABLE_7_NAME) + .lastModified(TABLE_7_LAST_MODIFIED) .queueName(TABLE_7_QUEUE_NAME) .routingKey(TABLE_7_ROUTING_KEY) - .columns(List.of() /* needs to be set in the junit tests */) + .columns(List.of() /* TABLE_7_COLUMNS */) + .constraints(null) /* TABLE_7_CONSTRAINTS */ .createdBy(USER_1_ID) .ownedBy(USER_1_ID) .owner(USER_1) .created(TABLE_7_CREATED) - .lastModified(TABLE_7_LAST_MODIFIED) .build(); - public final static Table TABLE_7_SIMPLE = Table.builder() + public final static TableDto TABLE_7_DTO = TableDto.builder() .id(TABLE_7_ID) - .tdbid(DATABASE_1_ID) - .database(null /* for jpa */) - .created(Instant.now()) + .tdbid(DATABASE_2_ID) + .created(TABLE_7_CREATED) .internalName(TABLE_7_INTERNAL_NAME) + .isVersioned(TABLE_7_VERSIONED) .description(TABLE_7_DESCRIPTION) - .database(DATABASE_1_SIMPLE) .name(TABLE_7_NAME) .queueName(TABLE_7_QUEUE_NAME) .routingKey(TABLE_7_ROUTING_KEY) - .columns(List.of() /* for jpa */) + .columns(List.of() /* TABLE_7_COLUMNS */) + .constraints(null) /* TABLE_7_CONSTRAINTS */ .createdBy(USER_1_ID) - .ownedBy(USER_1_ID) + .owner(USER_1_DTO) .created(TABLE_7_CREATED) - .lastModified(TABLE_7_LAST_MODIFIED) .build(); - public final static List<TableColumn> TABLE_7_COLUMNS = List.of(TableColumn.builder() + public final static Long TABLE_4_ID = 4L; + public final static String TABLE_4_NAME = "Sensor"; + public final static String TABLE_4_INTERNAL_NAME = "sensor"; + public final static Boolean TABLE_4_VERSIONED = true; + public final static String TABLE_4_DESCRIPTION = "Hello sensor"; + public final static String TABLE_4_QUEUE_NAME = TABLE_4_INTERNAL_NAME; + public final static String TABLE_4_ROUTING_KEY = "dbrepo\\." + DATABASE_1_EXCHANGE + "\\." + TABLE_4_QUEUE_NAME; + public final static Instant TABLE_4_CREATED = Instant.ofEpochSecond(1677400175L) /* 2023-02-26 08:29:35 (UTC) */; + public final static Instant TABLE_4_LAST_MODIFIED = Instant.ofEpochSecond(1677400175L) /* 2023-02-26 08:29:35 (UTC) */; + + public final static Table TABLE_4 = Table.builder() + .id(TABLE_4_ID) + .tdbid(DATABASE_1_ID) + .internalName(TABLE_4_INTERNAL_NAME) + .description(TABLE_4_DESCRIPTION) + .database(null /* DATABASE_1 */) + .name(TABLE_4_NAME) + .queueName(TABLE_4_QUEUE_NAME) + .routingKey(TABLE_4_ROUTING_KEY) + .columns(List.of() /* TABLE_4_COLUMNS */) + .isVersioned(TABLE_4_VERSIONED) + .createdBy(USER_1_ID) + .ownedBy(USER_1_ID) + .owner(USER_1) + .created(TABLE_4_CREATED) + .lastModified(TABLE_4_LAST_MODIFIED) + .build(); + + public final static TableDto TABLE_4_DTO = TableDto.builder() + .id(TABLE_4_ID) + .tdbid(DATABASE_1_ID) + .internalName(TABLE_4_INTERNAL_NAME) + .description(TABLE_4_DESCRIPTION) + .name(TABLE_4_NAME) + .queueName(TABLE_4_QUEUE_NAME) + .routingKey(TABLE_4_ROUTING_KEY) + .columns(List.of() /* TABLE_4_COLUMNS */) + .isVersioned(TABLE_4_VERSIONED) + .createdBy(USER_1_ID) + .owner(USER_1_DTO) + .created(TABLE_4_CREATED) + .build(); + + public final static TableBriefDto TABLE_4_BRIEF_DTO = TableBriefDto.builder() + .id(TABLE_4_ID) + .internalName(TABLE_4_INTERNAL_NAME) + .description(TABLE_4_DESCRIPTION) + .name(TABLE_4_NAME) + .columns(List.of() /* TABLE_4_COLUMNS */) + .isVersioned(TABLE_4_VERSIONED) + .owner(USER_1_BRIEF_DTO) + .build(); + + public final static List<TableColumn> TABLE_4_COLUMNS = List.of(TableColumn.builder() .id(44L) .ordinalPosition(0) - .table(TABLE_7) + .table(TABLE_4) .name("Timestamp") .internalName("timestamp") .columnType(TableColumnType.TIMESTAMP) @@ -2022,7 +1528,7 @@ public abstract class BaseTest { TableColumn.builder() .id(45L) .ordinalPosition(1) - .table(TABLE_7) + .table(TABLE_4) .name("Value") .internalName("value") .columnType(TableColumnType.DECIMAL) @@ -2031,10 +1537,10 @@ public abstract class BaseTest { .isPrimaryKey(false) .build()); - public final static List<ColumnDto> TABLE_7_COLUMNS_DTO = List.of(ColumnDto.builder() + public final static List<ColumnDto> TABLE_4_COLUMNS_DTO = List.of(ColumnDto.builder() .id(44L) .databaseId(DATABASE_1_ID) - .tableId(TABLE_7_ID) + .tableId(TABLE_4_ID) .name("Timestamp") .internalName("timestamp") .columnType(ColumnTypeDto.TIMESTAMP) @@ -2046,7 +1552,7 @@ public abstract class BaseTest { ColumnDto.builder() .id(45L) .databaseId(DATABASE_1_ID) - .tableId(TABLE_7_ID) + .tableId(TABLE_4_ID) .name("Value") .internalName("value") .columnType(ColumnTypeDto.DECIMAL) @@ -2056,21 +1562,6 @@ public abstract class BaseTest { .isPrimaryKey(false) .build()); - public final static TableDto TABLE_7_DTO = TableDto.builder() - .id(TABLE_7_ID) - .created(Instant.now()) - .internalName(TABLE_7_INTERNAL_NAME) - .description(TABLE_7_DESCRIPTION) - .database(DATABASE_1_DTO) - .name(TABLE_7_NAME) - .queueName(TABLE_7_QUEUE_NAME) - .routingKey(TABLE_7_ROUTING_KEY) - .columns(TABLE_7_COLUMNS_DTO) - .creator(USER_1_DTO) - .owner(USER_1_DTO) - .created(TABLE_7_CREATED) - .build(); - public final static Long TABLE_8_ID = 8L; public final static String TABLE_8_NAME = "mfcc"; public final static String TABLE_8_INTERNAL_NAME = "mfcc"; @@ -2078,21 +1569,20 @@ public abstract class BaseTest { public final static String TABLE_8_DESCRIPTION = "Hello mfcc"; public final static String TABLE_8_QUEUE_NAME = TABLE_8_INTERNAL_NAME; public final static String TABLE_8_ROUTING_KEY = "dbrepo\\." + DATABASE_3_EXCHANGE + "\\." + TABLE_8_QUEUE_NAME; - public final static Instant TABLE_8_CREATED = Instant.ofEpochSecond(1688400185) /* 2023-02-26 08:29:35 (UTC) */; - public final static Instant TABLE_8_LAST_MODIFIED = Instant.ofEpochSecond(1688400185) /* 2023-02-26 08:29:35 (UTC) */; + public final static Instant TABLE_8_CREATED = Instant.ofEpochSecond(1688400185L) /* 2023-02-26 08:29:35 (UTC) */; + public final static Instant TABLE_8_LAST_MODIFIED = Instant.ofEpochSecond(1688400185L) /* 2023-02-26 08:29:35 (UTC) */; public final static Table TABLE_8 = Table.builder() .id(TABLE_8_ID) .tdbid(DATABASE_1_ID) - .database(DATABASE_1) - .created(Instant.now()) .internalName(TABLE_8_INTERNAL_NAME) .description(TABLE_8_DESCRIPTION) - .database(DATABASE_1) + .isVersioned(TABLE_8_VERSIONED) + .database(null /* DATABASE_1 */) .name(TABLE_8_NAME) .queueName(TABLE_8_QUEUE_NAME) .routingKey(TABLE_8_ROUTING_KEY) - .columns(List.of() /* needs to be set in the junit tests */) + .columns(List.of() /* TABLE_8_COLUMNS */) .createdBy(USER_1_ID) .ownedBy(USER_1_ID) .owner(USER_1) @@ -2100,24 +1590,6 @@ public abstract class BaseTest { .lastModified(TABLE_8_LAST_MODIFIED) .build(); - public final static Table TABLE_8_SIMPLE = Table.builder() - .id(TABLE_8_ID) - .tdbid(DATABASE_1_ID) - .database(null /* for jpa */) - .created(Instant.now()) - .internalName(TABLE_8_INTERNAL_NAME) - .description(TABLE_8_DESCRIPTION) - .database(DATABASE_1_SIMPLE) - .name(TABLE_8_NAME) - .queueName(TABLE_8_QUEUE_NAME) - .routingKey(TABLE_8_ROUTING_KEY) - .columns(List.of() /* for jpa */) - .createdBy(USER_1_ID) - .ownedBy(USER_1_ID) - .created(TABLE_8_CREATED) - .lastModified(TABLE_8_LAST_MODIFIED) - .build(); - public final static TableCsvDto TABLE_8_CSV_DTO = TableCsvDto.builder() .data(new HashMap<>() {{ put("value", "2.1"); @@ -2145,6 +1617,7 @@ public abstract class BaseTest { public final static String ONTOLOGY_1_NEW_PREFIX = "om-2"; public final static String ONTOLOGY_1_URI = "http://www.ontology-of-units-of-measure.org/resource/om-2/"; public final static String ONTOLOGY_1_SPARQL_ENDPOINT = null; + public final static String ONTOLOGY_1_RDF_PATH = "rdf/om-2.0.rdf"; public final static UUID ONTOLOGY_1_CREATED_BY = USER_1_ID; public final static Ontology ONTOLOGY_1 = Ontology.builder() @@ -2152,6 +1625,7 @@ public abstract class BaseTest { .prefix(ONTOLOGY_1_PREFIX) .uri(ONTOLOGY_1_URI) .sparqlEndpoint(ONTOLOGY_1_SPARQL_ENDPOINT) + .rdfPath(ONTOLOGY_1_RDF_PATH) .build(); public final static OntologyCreateDto ONTOLOGY_1_CREATE_DTO = OntologyCreateDto.builder() @@ -2242,30 +1716,34 @@ public abstract class BaseTest { .sparqlEndpoint(ONTOLOGY_5_SPARQL_ENDPOINT) .build(); - public final static String COLUMN_CONCEPT_TEMPERATURE_NAME = "temperature"; - public final static String COLUMN_CONCEPT_TEMPERATURE_URI = "http://www.wikidata.org/entity/Q11466"; - public final static String COLUMN_CONCEPT_TEMPERATURE_DESCRIPTION = "physical property of matter that quantitatively expresses the common notions of hot and cold"; - public final static Instant COLUMN_CONCEPT_TEMPERATURE_CREATED = Instant.now(); + public final static Long COLUMN_CONCEPT_PRECIPITATION_ID = 1L; + public final static String COLUMN_CONCEPT_PRECIPITATION_NAME = "precipitation"; + public final static String COLUMN_CONCEPT_PRECIPITATION_URI = "http://www.wikidata.org/entity/Q25257"; + public final static String COLUMN_CONCEPT_PRECIPITATION_DESCRIPTION = null; + public final static Instant COLUMN_CONCEPT_PRECIPITATION_CREATED = Instant.ofEpochSecond(1701976048L) /* 2023-12-07 19:07:27 */; - public final static ConceptSaveDto COLUMN_CONCEPT_TEMPERATURE_SAVE_DTO = ConceptSaveDto.builder() - .uri(COLUMN_CONCEPT_TEMPERATURE_URI) - .name(COLUMN_CONCEPT_TEMPERATURE_NAME) - .description(COLUMN_CONCEPT_TEMPERATURE_DESCRIPTION) + public final static ConceptSaveDto COLUMN_CONCEPT_PRECIPITATION_SAVE_DTO = ConceptSaveDto.builder() + .uri(COLUMN_CONCEPT_PRECIPITATION_URI) + .name(COLUMN_CONCEPT_PRECIPITATION_NAME) + .description(COLUMN_CONCEPT_PRECIPITATION_DESCRIPTION) .build(); - public final static ConceptDto COLUMN_CONCEPT_TEMPERATURE_DTO = ConceptDto.builder() - .uri(COLUMN_CONCEPT_TEMPERATURE_URI) - .name(COLUMN_CONCEPT_TEMPERATURE_NAME) - .description(COLUMN_CONCEPT_TEMPERATURE_DESCRIPTION) + public final static ConceptDto COLUMN_CONCEPT_PRECIPITATION_DTO = ConceptDto.builder() + .id(COLUMN_CONCEPT_PRECIPITATION_ID) + .uri(COLUMN_CONCEPT_PRECIPITATION_URI) + .name(COLUMN_CONCEPT_PRECIPITATION_NAME) + .description(COLUMN_CONCEPT_PRECIPITATION_DESCRIPTION) .build(); - public final static TableColumnConcept COLUMN_CONCEPT_TEMPERATURE = TableColumnConcept.builder() - .uri(COLUMN_CONCEPT_TEMPERATURE_URI) - .name(COLUMN_CONCEPT_TEMPERATURE_NAME) - .description(COLUMN_CONCEPT_TEMPERATURE_DESCRIPTION) - .created(COLUMN_CONCEPT_TEMPERATURE_CREATED) + public final static TableColumnConcept COLUMN_CONCEPT_PRECIPITATION = TableColumnConcept.builder() + .id(COLUMN_CONCEPT_PRECIPITATION_ID) + .uri(COLUMN_CONCEPT_PRECIPITATION_URI) + .name(COLUMN_CONCEPT_PRECIPITATION_NAME) + .description(COLUMN_CONCEPT_PRECIPITATION_DESCRIPTION) + .created(COLUMN_CONCEPT_PRECIPITATION_CREATED) .build(); + public final static Long COLUMN_CONCEPT_FAIR_DATA_ID = 2L; public final static String COLUMN_CONCEPT_FAIR_DATA_NAME = "FAIR data"; public final static String COLUMN_CONCEPT_FAIR_DATA_URI = "http://www.wikidata.org/entity/Q29032648"; public final static String COLUMN_CONCEPT_FAIR_DATA_DESCRIPTION = "data compliant with the terms of the FAIR Data Principles"; @@ -2278,239 +1756,75 @@ public abstract class BaseTest { .build(); public final static ConceptDto COLUMN_CONCEPT_FAIR_DATA_DTO = ConceptDto.builder() + .id(COLUMN_CONCEPT_FAIR_DATA_ID) .uri(COLUMN_CONCEPT_FAIR_DATA_URI) .name(COLUMN_CONCEPT_FAIR_DATA_NAME) .description(COLUMN_CONCEPT_FAIR_DATA_DESCRIPTION) .build(); public final static TableColumnConcept COLUMN_CONCEPT_FAIR_DATA = TableColumnConcept.builder() + .id(COLUMN_CONCEPT_FAIR_DATA_ID) .uri(COLUMN_CONCEPT_FAIR_DATA_URI) .name(COLUMN_CONCEPT_FAIR_DATA_NAME) .description(COLUMN_CONCEPT_FAIR_DATA_DESCRIPTION) .created(COLUMN_CONCEPT_FAIR_DATA_CREATED) .build(); - public final static Long UNIT_1_ID = 1L; - public final static String UNIT_1_NAME = "Degrees Celsius"; - public final static String UNIT_1_URI = "http://www.ontology-of-units-of-measure.org/resource/om-2/degreeCelsius"; - public final static String UNIT_1_DESCRIPTION = "The degree Celsius is a unit of temperature defined as 1 kelvin."; - public final static Instant UNIT_1_CREATED = Instant.now(); - - public final static UnitSaveDto UNIT_1_SAVE_DTO = UnitSaveDto.builder() - .uri(UNIT_1_URI) - .name(UNIT_1_NAME) - .description(UNIT_1_DESCRIPTION) - .build(); - - public final static UnitDto UNIT_1_DTO = UnitDto.builder() - .id(UNIT_1_ID) - .uri(UNIT_1_URI) - .name(UNIT_1_NAME) - .description(UNIT_1_DESCRIPTION) - .build(); - - public final static TableColumnUnit UNIT_1 = TableColumnUnit.builder() - .id(UNIT_1_ID) - .uri(UNIT_1_URI) - .name(UNIT_1_NAME) - .description(UNIT_1_DESCRIPTION) - .created(COLUMN_CONCEPT_TEMPERATURE_CREATED) - .build(); - - public final static Long UNIT_2_ID = 2L; - public final static String UNIT_2_NAME = "tonne"; - public final static String UNIT_2_URI = "http://www.ontology-of-units-of-measure.org/resource/om-2/tonne"; - public final static String UNIT_2_DESCRIPTION = "The tonne is a unit of mass defined as 1000 kilogram."; - public final static Instant UNIT_2_CREATED = Instant.now(); - - public final static UnitSaveDto UNIT_2_SAVE_DTO = UnitSaveDto.builder() - .uri(UNIT_2_URI) - .name(UNIT_2_NAME) - .description(UNIT_2_DESCRIPTION) - .build(); - - public final static UnitDto UNIT_2_DTO = UnitDto.builder() - .id(UNIT_2_ID) - .uri(UNIT_2_URI) - .name(UNIT_2_NAME) - .description(UNIT_2_DESCRIPTION) - .build(); - - public final static TableColumnUnit UNIT_2 = TableColumnUnit.builder() - .id(UNIT_2_ID) - .uri(UNIT_2_URI) - .name(UNIT_2_NAME) - .description(UNIT_2_DESCRIPTION) - .created(UNIT_2_CREATED) - .build(); - - public final static Long COLUMN_1_1_ID = 1L; - public final static Integer COLUMN_1_1_ORDINALPOS = 0; - public final static Boolean COLUMN_1_1_PRIMARY = true; - public final static String COLUMN_1_1_NAME = "id"; - public final static String COLUMN_1_1_INTERNAL_NAME = "id"; - public final static TableColumnType COLUMN_1_1_TYPE = TableColumnType.BIGINT; - public final static ColumnTypeDto COLUMN_1_1_TYPE_DTO = ColumnTypeDto.BIGINT; - public final static Long COLUMN_1_1_DATE_FORMAT = null; - public final static Boolean COLUMN_1_1_NULL = false; - public final static Boolean COLUMN_1_1_UNIQUE = true; - public final static Boolean COLUMN_1_1_AUTO_GENERATED = false; - public final static String COLUMN_1_1_FOREIGN_KEY = null; - public final static String COLUMN_1_1_CHECK = null; - public final static List<String> COLUMN_1_1_ENUM_VALUES = null; - public final static List<String> COLUMN_1_1_ENUM_VALUES_DTO = null; - public final static List<String> COLUMN_1_1_SET_VALUES = null; - public final static List<String> COLUMN_1_1_SET_VALUES_DTO = null; - - public final static Long COLUMN_1_2_ID = 2L; - public final static Integer COLUMN_1_2_ORDINALPOS = 1; - public final static Boolean COLUMN_1_2_PRIMARY = false; - public final static String COLUMN_1_2_NAME = "Date"; - public final static String COLUMN_1_2_INTERNAL_NAME = "date"; - public final static TableColumnType COLUMN_1_2_TYPE = TableColumnType.DATE; - public final static ColumnTypeDto COLUMN_1_2_TYPE_DTO = ColumnTypeDto.DATE; - public final static Long COLUMN_1_2_DATE_FORMAT = IMAGE_DATE_1_ID; - public final static ContainerImageDate COLUMN_1_2_DATE = IMAGE_DATE_1; - public final static Boolean COLUMN_1_2_NULL = true; - public final static Boolean COLUMN_1_2_UNIQUE = false; - public final static Boolean COLUMN_1_2_AUTO_GENERATED = false; - public final static String COLUMN_1_2_FOREIGN_KEY = null; - public final static String COLUMN_1_2_CHECK = null; - public final static List<String> COLUMN_1_2_ENUM_VALUES = null; - public final static List<String> COLUMN_1_2_ENUM_VALUES_DTO = null; - public final static List<String> COLUMN_1_2_SET_VALUES = null; - public final static List<String> COLUMN_1_2_SET_VALUES_DTO = null; - - public final static Long COLUMN_1_3_ID = 3L; - public final static Integer COLUMN_1_3_ORDINALPOS = 2; - public final static Boolean COLUMN_1_3_PRIMARY = false; - public final static String COLUMN_1_3_NAME = "Location"; - public final static String COLUMN_1_3_INTERNAL_NAME = "location"; - public final static TableColumnType COLUMN_1_3_TYPE = TableColumnType.VARCHAR; - public final static ColumnTypeDto COLUMN_1_3_TYPE_DTO = ColumnTypeDto.VARCHAR; - public final static Long COLUMN_1_3_DATE_FORMAT = null; - public final static Boolean COLUMN_1_3_NULL = true; - public final static Boolean COLUMN_1_3_UNIQUE = false; - public final static Boolean COLUMN_1_3_AUTO_GENERATED = false; - public final static String COLUMN_1_3_FOREIGN_KEY = null; - public final static String COLUMN_1_3_CHECK = null; - public final static List<String> COLUMN_1_3_ENUM_VALUES = null; - public final static List<String> COLUMN_1_3_ENUM_VALUES_DTO = null; - public final static List<String> COLUMN_1_3_SET_VALUES = null; - public final static List<String> COLUMN_1_3_SET_VALUES_DTO = null; - - public final static Long COLUMN_1_4_ID = 4L; - public final static Integer COLUMN_1_4_ORDINALPOS = 3; - public final static Boolean COLUMN_1_4_PRIMARY = false; - public final static String COLUMN_1_4_NAME = "MinTemp"; - public final static String COLUMN_1_4_INTERNAL_NAME = "mintemp"; - public final static TableColumnType COLUMN_1_4_TYPE = TableColumnType.DECIMAL; - public final static ColumnTypeDto COLUMN_1_4_TYPE_DTO = ColumnTypeDto.DECIMAL; - public final static Long COLUMN_1_4_DATE_FORMAT = null; - public final static Boolean COLUMN_1_4_NULL = true; - public final static Boolean COLUMN_1_4_UNIQUE = false; - public final static Boolean COLUMN_1_4_AUTO_GENERATED = false; - public final static String COLUMN_1_4_FOREIGN_KEY = null; - public final static String COLUMN_1_4_CHECK = null; - public final static List<String> COLUMN_1_4_ENUM_VALUES = null; - public final static List<String> COLUMN_1_4_ENUM_VALUES_DTO = null; - public final static List<String> COLUMN_1_4_SET_VALUES = null; - public final static List<String> COLUMN_1_4_SET_VALUES_DTO = null; - - public final static ColumnSemanticsUpdateDto COLUMN_1_4_SEMANTICS_UPDATE_DTO = ColumnSemanticsUpdateDto.builder() - .conceptUri(COLUMN_CONCEPT_TEMPERATURE_URI) - .unitUri(UNIT_1_URI) - .build(); - - public final static TableColumn COLUMN_1_4_WITH_SEMANTICS = TableColumn.builder() - .id(COLUMN_1_4_ID) - .ordinalPosition(COLUMN_1_4_ORDINALPOS) - .table(TABLE_1) - .name(COLUMN_1_4_NAME) - .internalName(COLUMN_1_4_INTERNAL_NAME) - .columnType(COLUMN_1_4_TYPE) - .isNullAllowed(COLUMN_1_4_NULL) - .autoGenerated(COLUMN_1_4_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_4_PRIMARY) - .enums(COLUMN_1_4_ENUM_VALUES) - .sets(COLUMN_1_4_SET_VALUES) - .concept(COLUMN_CONCEPT_TEMPERATURE) - .unit(UNIT_1) - .build(); - - public final static Long COLUMN_1_5_ID = 5L; - public final static Integer COLUMN_1_5_ORDINALPOS = 4; - public final static Boolean COLUMN_1_5_PRIMARY = false; - public final static String COLUMN_1_5_NAME = "Rainfall"; - public final static String COLUMN_1_5_INTERNAL_NAME = "rainfall"; - public final static TableColumnType COLUMN_1_5_TYPE = TableColumnType.DECIMAL; - public final static ColumnTypeDto COLUMN_1_5_TYPE_DTO = ColumnTypeDto.DECIMAL; - public final static Long COLUMN_1_5_DATE_FORMAT = null; - public final static Boolean COLUMN_1_5_NULL = true; - public final static Boolean COLUMN_1_5_UNIQUE = false; - public final static Boolean COLUMN_1_5_AUTO_GENERATED = false; - public final static String COLUMN_1_5_FOREIGN_KEY = null; - public final static String COLUMN_1_5_CHECK = null; - public final static List<String> COLUMN_1_5_ENUM_VALUES = null; - public final static List<String> COLUMN_1_5_ENUM_VALUES_DTO = null; - public final static List<String> COLUMN_1_5_SET_VALUES = null; - public final static List<String> COLUMN_1_5_SET_VALUES_DTO = null; - - public final static Long COLUMN_2_1_ID = 6L; - public final static Integer COLUMN_2_1_ORDINALPOS = 0; - public final static Boolean COLUMN_2_1_PRIMARY = true; - public final static String COLUMN_2_1_NAME = "location"; - public final static String COLUMN_2_1_INTERNAL_NAME = "location"; - public final static TableColumnType COLUMN_2_1_TYPE = TableColumnType.VARCHAR; - public final static ColumnTypeDto COLUMN_2_1_TYPE_DTO = ColumnTypeDto.VARCHAR; - public final static Long COLUMN_2_1_DATE_FORMAT = null; - public final static Boolean COLUMN_2_1_NULL = false; - public final static Boolean COLUMN_2_1_UNIQUE = true; - public final static Boolean COLUMN_2_1_AUTO_GENERATED = false; - public final static String COLUMN_2_1_FOREIGN_KEY = null; - public final static String COLUMN_2_1_CHECK = null; - public final static List<String> COLUMN_2_1_ENUM_VALUES = null; - public final static List<String> COLUMN_2_1_ENUM_VALUES_DTO = null; - public final static List<String> COLUMN_2_1_SET_VALUES = null; - public final static List<String> COLUMN_2_1_SET_VALUES_DTO = null; - - public final static Long COLUMN_2_2_ID = 7L; - public final static Integer COLUMN_2_2_ORDINALPOS = 0; - public final static Boolean COLUMN_2_2_PRIMARY = false; - public final static String COLUMN_2_2_NAME = "lat"; - public final static String COLUMN_2_2_INTERNAL_NAME = "lat"; - public final static TableColumnType COLUMN_2_2_TYPE = TableColumnType.DECIMAL; - public final static ColumnTypeDto COLUMN_2_2_TYPE_DTO = ColumnTypeDto.DECIMAL; - public final static Long COLUMN_2_2_DATE_FORMAT = null; - public final static Boolean COLUMN_2_2_NULL = true; - public final static Boolean COLUMN_2_2_UNIQUE = false; - public final static Boolean COLUMN_2_2_AUTO_GENERATED = false; - public final static String COLUMN_2_2_FOREIGN_KEY = null; - public final static String COLUMN_2_2_CHECK = null; - public final static List<String> COLUMN_2_2_ENUM_VALUES = null; - public final static List<String> COLUMN_2_2_ENUM_VALUES_DTO = null; - public final static List<String> COLUMN_2_2_SET_VALUES = null; - public final static List<String> COLUMN_2_2_SET_VALUES_DTO = null; - - public final static Long COLUMN_2_3_ID = 8L; - public final static Integer COLUMN_2_3_ORDINALPOS = 0; - public final static Boolean COLUMN_2_3_PRIMARY = false; - public final static String COLUMN_2_3_NAME = "lng"; - public final static String COLUMN_2_3_INTERNAL_NAME = "lng"; - public final static TableColumnType COLUMN_2_3_TYPE = TableColumnType.DECIMAL; - public final static ColumnTypeDto COLUMN_2_3_TYPE_DTO = ColumnTypeDto.DECIMAL; - public final static Long COLUMN_2_3_DATE_FORMAT = null; - public final static Boolean COLUMN_2_3_NULL = true; - public final static Boolean COLUMN_2_3_UNIQUE = false; - public final static Boolean COLUMN_2_3_AUTO_GENERATED = false; - public final static String COLUMN_2_3_FOREIGN_KEY = null; - public final static String COLUMN_2_3_CHECK = null; - public final static List<String> COLUMN_2_3_ENUM_VALUES = null; - public final static List<String> COLUMN_2_3_ENUM_VALUES_DTO = null; - public final static List<String> COLUMN_2_3_SET_VALUES = null; - public final static List<String> COLUMN_2_3_SET_VALUES_DTO = null; - - public final static Long COLUMN_4_1_ID = 44L; + public final static Long UNIT_MILLIMETRE_ID = 1L; + public final static String UNIT_MILLIMETRE_NAME = "millimetre"; + public final static String UNIT_MILLIMETRE_URI = "http://www.ontology-of-units-of-measure.org/resource/om-2/millimetre"; + public final static String UNIT_MILLIMETRE_DESCRIPTION = "The millimetre is a unit of length defined as 1.0e-3 metre."; + public final static Instant UNIT_MILLIMETRE_CREATED = Instant.ofEpochSecond(1701976282L) /* 2023-12-07 19:11:22 */; + + public final static UnitSaveDto UNIT_MILLIMETRE_SAVE_DTO = UnitSaveDto.builder() + .uri(UNIT_MILLIMETRE_URI) + .name(UNIT_MILLIMETRE_NAME) + .description(UNIT_MILLIMETRE_DESCRIPTION) + .build(); + + public final static UnitDto UNIT_MILLIMETRE_DTO = UnitDto.builder() + .id(UNIT_MILLIMETRE_ID) + .uri(UNIT_MILLIMETRE_URI) + .name(UNIT_MILLIMETRE_NAME) + .description(UNIT_MILLIMETRE_DESCRIPTION) + .build(); + + public final static TableColumnUnit UNIT_MILLIMETRE = TableColumnUnit.builder() + .id(UNIT_MILLIMETRE_ID) + .uri(UNIT_MILLIMETRE_URI) + .name(UNIT_MILLIMETRE_NAME) + .description(UNIT_MILLIMETRE_DESCRIPTION) + .created(UNIT_MILLIMETRE_CREATED) + .build(); + + public final static Long UNIT_TONNE_ID = 2L; + public final static String UNIT_TONNE_NAME = "tonne"; + public final static String UNIT_TONNE_URI = "http://www.ontology-of-units-of-measure.org/resource/om-2/tonne"; + public final static String UNIT_TONNE_DESCRIPTION = "The tonne is a unit of mass defined as 1000 kilogram."; + public final static Instant UNIT_TONNE_CREATED = Instant.ofEpochSecond(1701976462L) /* 2023-12-07 19:14:22 */; + + public final static UnitSaveDto UNIT_TONNE_SAVE_DTO = UnitSaveDto.builder() + .uri(UNIT_TONNE_URI) + .name(UNIT_TONNE_NAME) + .description(UNIT_TONNE_DESCRIPTION) + .build(); + + public final static UnitDto UNIT_TONNE_DTO = UnitDto.builder() + .id(UNIT_TONNE_ID) + .uri(UNIT_TONNE_URI) + .name(UNIT_TONNE_NAME) + .description(UNIT_TONNE_DESCRIPTION) + .build(); + + public final static TableColumnUnit UNIT_TONNE = TableColumnUnit.builder() + .id(UNIT_TONNE_ID) + .uri(UNIT_TONNE_URI) + .name(UNIT_TONNE_NAME) + .description(UNIT_TONNE_DESCRIPTION) + .created(UNIT_TONNE_CREATED) + .build(); + + public final static Long COLUMN_4_1_ID = 45L; public final static Integer COLUMN_4_1_ORDINALPOS = 0; public final static Boolean COLUMN_4_1_PRIMARY = true; public final static String COLUMN_4_1_NAME = "id"; @@ -2530,7 +1844,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_1_SET_VALUES = null; public final static List<String> COLUMN_4_1_SET_VALUES_DTO = null; - public final static Long COLUMN_4_2_ID = 45L; + public final static Long COLUMN_4_2_ID = 46L; public final static Integer COLUMN_4_2_ORDINALPOS = 1; public final static Boolean COLUMN_4_2_PRIMARY = false; public final static String COLUMN_4_2_NAME = "Animal Name"; @@ -2550,7 +1864,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_2_SET_VALUES = null; public final static List<String> COLUMN_4_2_SET_VALUES_DTO = null; - public final static Long COLUMN_4_3_ID = 46L; + public final static Long COLUMN_4_3_ID = 47L; public final static Integer COLUMN_4_3_ORDINALPOS = 2; public final static Boolean COLUMN_4_3_PRIMARY = false; public final static String COLUMN_4_3_NAME = "Hair"; @@ -2570,7 +1884,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_3_SET_VALUES = null; public final static List<String> COLUMN_4_3_SET_VALUES_DTO = null; - public final static Long COLUMN_4_4_ID = 47L; + public final static Long COLUMN_4_4_ID = 48L; public final static Integer COLUMN_4_4_ORDINALPOS = 3; public final static Boolean COLUMN_4_4_PRIMARY = false; public final static String COLUMN_4_4_NAME = "Feathers"; @@ -2590,7 +1904,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_4_SET_VALUES = null; public final static List<String> COLUMN_4_4_SET_VALUES_DTO = null; - public final static Long COLUMN_4_5_ID = 48L; + public final static Long COLUMN_4_5_ID = 49L; public final static Integer COLUMN_4_5_ORDINALPOS = 4; public final static Boolean COLUMN_4_5_PRIMARY = false; public final static String COLUMN_4_5_NAME = "Bread"; @@ -2610,7 +1924,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_5_SET_VALUES = null; public final static List<String> COLUMN_4_5_SET_VALUES_DTO = null; - public final static Long COLUMN_4_6_ID = 49L; + public final static Long COLUMN_4_6_ID = 50L; public final static Integer COLUMN_4_6_ORDINALPOS = 5; public final static Boolean COLUMN_4_6_PRIMARY = false; public final static String COLUMN_4_6_NAME = "Eggs"; @@ -2630,7 +1944,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_6_SET_VALUES = null; public final static List<String> COLUMN_4_6_SET_VALUES_DTO = null; - public final static Long COLUMN_4_7_ID = 50L; + public final static Long COLUMN_4_7_ID = 51L; public final static Integer COLUMN_4_7_ORDINALPOS = 6; public final static Boolean COLUMN_4_7_PRIMARY = false; public final static String COLUMN_4_7_NAME = "Milk"; @@ -2650,7 +1964,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_7_SET_VALUES = null; public final static List<String> COLUMN_4_7_SET_VALUES_DTO = null; - public final static Long COLUMN_4_8_ID = 51L; + public final static Long COLUMN_4_8_ID = 52L; public final static Integer COLUMN_4_8_ORDINALPOS = 7; public final static Boolean COLUMN_4_8_PRIMARY = false; public final static String COLUMN_4_8_NAME = "Water"; @@ -2670,7 +1984,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_8_SET_VALUES = null; public final static List<String> COLUMN_4_8_SET_VALUES_DTO = null; - public final static Long COLUMN_4_9_ID = 52L; + public final static Long COLUMN_4_9_ID = 53L; public final static Integer COLUMN_4_9_ORDINALPOS = 8; public final static Boolean COLUMN_4_9_PRIMARY = false; public final static String COLUMN_4_9_NAME = "Airborne"; @@ -2690,7 +2004,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_9_SET_VALUES = null; public final static List<String> COLUMN_4_9_SET_VALUES_DTO = null; - public final static Long COLUMN_4_10_ID = 53L; + public final static Long COLUMN_4_10_ID = 54L; public final static Integer COLUMN_4_10_ORDINALPOS = 9; public final static Boolean COLUMN_4_10_PRIMARY = false; public final static String COLUMN_4_10_NAME = "Waterborne"; @@ -2710,7 +2024,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_10_SET_VALUES = null; public final static List<String> COLUMN_4_10_SET_VALUES_DTO = null; - public final static Long COLUMN_4_11_ID = 54L; + public final static Long COLUMN_4_11_ID = 55L; public final static Integer COLUMN_4_11_ORDINALPOS = 10; public final static Boolean COLUMN_4_11_PRIMARY = false; public final static String COLUMN_4_11_NAME = "Aquantic"; @@ -2730,7 +2044,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_11_SET_VALUES = null; public final static List<String> COLUMN_4_11_SET_VALUES_DTO = null; - public final static Long COLUMN_4_12_ID = 55L; + public final static Long COLUMN_4_12_ID = 56L; public final static Integer COLUMN_4_12_ORDINALPOS = 11; public final static Boolean COLUMN_4_12_PRIMARY = false; public final static String COLUMN_4_12_NAME = "Predator"; @@ -2750,7 +2064,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_12_SET_VALUES = null; public final static List<String> COLUMN_4_12_SET_VALUES_DTO = null; - public final static Long COLUMN_4_13_ID = 56L; + public final static Long COLUMN_4_13_ID = 57L; public final static Integer COLUMN_4_13_ORDINALPOS = 12; public final static Boolean COLUMN_4_13_PRIMARY = false; public final static String COLUMN_4_13_NAME = "Backbone"; @@ -2770,7 +2084,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_13_SET_VALUES = null; public final static List<String> COLUMN_4_13_SET_VALUES_DTO = null; - public final static Long COLUMN_4_14_ID = 57L; + public final static Long COLUMN_4_14_ID = 58L; public final static Integer COLUMN_4_14_ORDINALPOS = 13; public final static Boolean COLUMN_4_14_PRIMARY = false; public final static String COLUMN_4_14_NAME = "Breathes"; @@ -2790,7 +2104,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_14_SET_VALUES = null; public final static List<String> COLUMN_4_14_SET_VALUES_DTO = null; - public final static Long COLUMN_4_15_ID = 58L; + public final static Long COLUMN_4_15_ID = 59L; public final static Integer COLUMN_4_15_ORDINALPOS = 14; public final static Boolean COLUMN_4_15_PRIMARY = false; public final static String COLUMN_4_15_NAME = "Venomous"; @@ -2810,7 +2124,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_15_SET_VALUES = null; public final static List<String> COLUMN_4_15_SET_VALUES_DTO = null; - public final static Long COLUMN_4_16_ID = 59L; + public final static Long COLUMN_4_16_ID = 60L; public final static Integer COLUMN_4_16_ORDINALPOS = 15; public final static Boolean COLUMN_4_16_PRIMARY = false; public final static String COLUMN_4_16_NAME = "Fin"; @@ -2830,7 +2144,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_16_SET_VALUES = null; public final static List<String> COLUMN_4_16_SET_VALUES_DTO = null; - public final static Long COLUMN_4_17_ID = 60L; + public final static Long COLUMN_4_17_ID = 61L; public final static Integer COLUMN_4_17_ORDINALPOS = 16; public final static Boolean COLUMN_4_17_PRIMARY = false; public final static String COLUMN_4_17_NAME = "Legs"; @@ -2850,7 +2164,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_17_SET_VALUES = null; public final static List<String> COLUMN_4_17_SET_VALUES_DTO = null; - public final static Long COLUMN_4_18_ID = 61L; + public final static Long COLUMN_4_18_ID = 62L; public final static Integer COLUMN_4_18_ORDINALPOS = 17; public final static Boolean COLUMN_4_18_PRIMARY = false; public final static String COLUMN_4_18_NAME = "Tail"; @@ -2870,7 +2184,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_18_SET_VALUES = null; public final static List<String> COLUMN_4_18_SET_VALUES_DTO = null; - public final static Long COLUMN_4_19_ID = 62L; + public final static Long COLUMN_4_19_ID = 63L; public final static Integer COLUMN_4_19_ORDINALPOS = 18; public final static Boolean COLUMN_4_19_PRIMARY = false; public final static String COLUMN_4_19_NAME = "Domestic"; @@ -2890,7 +2204,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_19_SET_VALUES = null; public final static List<String> COLUMN_4_19_SET_VALUES_DTO = null; - public final static Long COLUMN_4_20_ID = 63L; + public final static Long COLUMN_4_20_ID = 64L; public final static Integer COLUMN_4_20_ORDINALPOS = 19; public final static Boolean COLUMN_4_20_PRIMARY = false; public final static String COLUMN_4_20_NAME = "Cat Size"; @@ -2910,13 +2224,13 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_20_SET_VALUES = null; public final static List<String> COLUMN_4_20_SET_VALUES_DTO = null; - public final static Long COLUMN_4_21_ID = 64L; + public final static Long COLUMN_4_21_ID = 65L; public final static Integer COLUMN_4_21_ORDINALPOS = 20; public final static Boolean COLUMN_4_21_PRIMARY = false; public final static String COLUMN_4_21_NAME = "Class Type"; public final static String COLUMN_4_21_INTERNAL_NAME = "class_type"; public final static TableColumnType COLUMN_4_21_TYPE = TableColumnType.DECIMAL; - public final static ColumnTypeDto COLUMN_4_22_TYPE_DTO = ColumnTypeDto.DECIMAL; + public final static ColumnTypeDto COLUMN_4_21_TYPE_DTO = ColumnTypeDto.DECIMAL; public final static Long COLUMN_4_21_DATE_FORMAT = null; public final static Boolean COLUMN_4_21_NULL = true; public final static Boolean COLUMN_4_21_UNIQUE = false; @@ -2930,7 +2244,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_4_21_SET_VALUES = null; public final static List<String> COLUMN_4_21_SET_VALUES_DTO = null; - public final static Long COLUMN_5_1_ID = 65L; + public final static Long COLUMN_5_1_ID = 66L; public final static Integer COLUMN_5_1_ORDINALPOS = 0; public final static Boolean COLUMN_5_1_PRIMARY = true; public final static String COLUMN_5_1_NAME = "id"; @@ -2948,14 +2262,14 @@ public abstract class BaseTest { public final static List<String> COLUMN_5_1_SET_VALUES = null; public final static List<String> COLUMN_5_1_SET_VALUES_DTO = null; - public final static Long COLUMN_5_2_ID = 66L; + public final static Long COLUMN_5_2_ID = 67L; public final static Integer COLUMN_5_2_ORDINALPOS = 1; public final static Boolean COLUMN_5_2_PRIMARY = false; public final static String COLUMN_5_2_NAME = "firstname"; public final static String COLUMN_5_2_INTERNAL_NAME = "firstname"; public final static TableColumnType COLUMN_5_2_TYPE = TableColumnType.VARCHAR; public final static ColumnTypeDto COLUMN_5_2_TYPE_DTO = ColumnTypeDto.VARCHAR; - public final static Integer COLUMN_5_2_SIZE = 20; + public final static Long COLUMN_5_2_SIZE = 20L; public final static Long COLUMN_5_2_DATE_FORMAT = null; public final static Boolean COLUMN_5_2_NULL = false; public final static Boolean COLUMN_5_2_UNIQUE = false; @@ -2967,14 +2281,14 @@ public abstract class BaseTest { public final static List<String> COLUMN_5_2_SET_VALUES = null; public final static List<String> COLUMN_5_2_SET_VALUES_DTO = null; - public final static Long COLUMN_5_3_ID = 67L; + public final static Long COLUMN_5_3_ID = 68L; public final static Integer COLUMN_5_3_ORDINALPOS = 2; public final static Boolean COLUMN_5_3_PRIMARY = false; public final static String COLUMN_5_3_NAME = "lastname"; public final static String COLUMN_5_3_INTERNAL_NAME = "lastname"; public final static TableColumnType COLUMN_5_3_TYPE = TableColumnType.VARCHAR; public final static ColumnTypeDto COLUMN_5_3_TYPE_DTO = ColumnTypeDto.VARCHAR; - public final static Integer COLUMN_5_3_SIZE = 40; + public final static Long COLUMN_5_3_SIZE = 40L; public final static Long COLUMN_5_3_DATE_FORMAT = null; public final static Boolean COLUMN_5_3_NULL = false; public final static Boolean COLUMN_5_3_UNIQUE = false; @@ -2986,7 +2300,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_5_3_SET_VALUES = null; public final static List<String> COLUMN_5_3_SET_VALUES_DTO = null; - public final static Long COLUMN_5_4_ID = 68L; + public final static Long COLUMN_5_4_ID = 69L; public final static Integer COLUMN_5_4_ORDINALPOS = 3; public final static Boolean COLUMN_5_4_PRIMARY = false; public final static String COLUMN_5_4_NAME = "birth"; @@ -3004,7 +2318,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_5_4_SET_VALUES = null; public final static List<String> COLUMN_5_4_SET_VALUES_DTO = null; - public final static Long COLUMN_5_5_ID = 69L; + public final static Long COLUMN_5_5_ID = 70L; public final static Integer COLUMN_5_5_ORDINALPOS = 4; public final static Boolean COLUMN_5_5_PRIMARY = false; public final static String COLUMN_5_5_NAME = "reminder"; @@ -3022,7 +2336,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_5_5_SET_VALUES = null; public final static List<String> COLUMN_5_5_SET_VALUES_DTO = null; - public final static Long COLUMN_5_6_ID = 70L; + public final static Long COLUMN_5_6_ID = 71L; public final static Integer COLUMN_5_6_ORDINALPOS = 5; public final static Boolean COLUMN_5_6_PRIMARY = false; public final static String COLUMN_5_6_NAME = "ref_id"; @@ -3040,7 +2354,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_5_6_SET_VALUES = null; public final static List<String> COLUMN_5_6_SET_VALUES_DTO = null; - public final static Long COLUMN_8_1_ID = 71L; + public final static Long COLUMN_8_1_ID = 72L; public final static Integer COLUMN_8_1_ORDINALPOS = 0; public final static Boolean COLUMN_8_1_PRIMARY = true; public final static String COLUMN_8_1_NAME = "ID"; @@ -3058,7 +2372,7 @@ public abstract class BaseTest { public final static List<String> COLUMN_8_1_SET_VALUES = null; public final static List<String> COLUMN_8_1_SET_VALUES_DTO = null; - public final static Long COLUMN_8_2_ID = 72L; + public final static Long COLUMN_8_2_ID = 73L; public final static Integer COLUMN_8_2_ORDINALPOS = 1; public final static Boolean COLUMN_8_2_PRIMARY = true; public final static String COLUMN_8_2_NAME = "Value"; @@ -3076,25 +2390,6 @@ public abstract class BaseTest { public final static List<String> COLUMN_8_2_SET_VALUES = null; public final static List<String> COLUMN_8_2_SET_VALUES_DTO = null; - public final static ColumnSemanticsUpdateDto COLUMN_8_2_SEMANTICS_UPDATE_DTO = ColumnSemanticsUpdateDto.builder() - .conceptUri(COLUMN_CONCEPT_TEMPERATURE_URI) - .unitUri(UNIT_1_URI) - .build(); - - public final static TableColumn COLUMN_8_2_WITH_SEMANTICS = TableColumn.builder() - .id(COLUMN_8_2_ID) - .ordinalPosition(COLUMN_8_2_ORDINALPOS) - .table(TABLE_8) - .name(COLUMN_8_2_NAME) - .internalName(COLUMN_8_2_INTERNAL_NAME) - .columnType(COLUMN_8_2_TYPE) - .isNullAllowed(COLUMN_8_2_NULL) - .autoGenerated(COLUMN_8_2_AUTO_GENERATED) - .isPrimaryKey(COLUMN_8_2_PRIMARY) - .unit(UNIT_1) - .concept(COLUMN_CONCEPT_TEMPERATURE) - .build(); - public final static List<TableColumn> TABLE_8_COLUMNS = List.of(TableColumn.builder() .id(COLUMN_8_1_ID) .ordinalPosition(COLUMN_8_1_ORDINALPOS) @@ -3118,25 +2413,6 @@ public abstract class BaseTest { .isPrimaryKey(COLUMN_8_2_PRIMARY) .build()); - public final static List<String> CONSTRAINTS_1_UNIQUE_1 = List.of(COLUMN_1_1_NAME); - public final static List<String> CONSTRAINTS_2_UNIQUE_1 = List.of(COLUMN_2_1_NAME); - public final static List<String> CONSTRAINTS_3_UNIQUE_1 = List.of("id"); - public final static List<String> CONSTRAINTS_4_UNIQUE_1 = List.of(COLUMN_4_1_NAME); - public final static List<String> CONSTRAINTS_5_UNIQUE_1 = List.of(COLUMN_5_1_NAME); - - public final static Long CONCEPT_1_ID = 1L; - public final static String CONCEPT_1_NAME = "Temperature"; - public final static String CONCEPT_1_URI = "http://www.ontology-of-units-of-measure.org/resource/om-2/Temperature"; - public final static Instant CONCEPT_1_CREATED = Instant.now().minus(1, HOURS); - public final static String CONCEPT_1_DESCRIPTION = "Temperature is the extent to which an object is hot."; - - public final static TableColumnConcept CONCEPT_1 = TableColumnConcept.builder() - .name(CONCEPT_1_NAME) - .created(CONCEPT_1_CREATED) - .uri(CONCEPT_1_URI) - .description(CONCEPT_1_DESCRIPTION) - .build(); - public final static Long QUERY_1_ID = 1L; public final static String QUERY_1_STATEMENT = "SELECT `id`, `date`, `location`, `mintemp`, `rainfall` FROM " + "`weather_aus`"; @@ -3146,7 +2422,7 @@ public abstract class BaseTest { public final static Long QUERY_1_RESULT_NUMBER = 2L; public final static String QUERY_1_QUERY_HASH = "a3b8ac39e38167d14cf3a9c20a69e4b6954d049525390b973a2c23064953a992"; public final static String QUERY_1_RESULT_HASH = "8358c8ade4849d2094ab5bb29127afdae57e6bb5acb1db7af603813d406c467a"; - public final static Instant QUERY_1_CREATED = Instant.ofEpochSecond(1677648377); + public final static Instant QUERY_1_CREATED = Instant.ofEpochSecond(1677648377L); public final static Instant QUERY_1_EXECUTION = Instant.now(); public final static Boolean QUERY_1_PERSISTED = false; @@ -3197,7 +2473,7 @@ public abstract class BaseTest { public final static String QUERY_2_RESULT_HASH = "ff3f7cbe1b96d296957f6e39e55b8b1b577fa3d205d4795af99594cfd20cb80d"; public final static Instant QUERY_2_CREATED = Instant.now().minus(2, MINUTES); public final static Instant QUERY_2_EXECUTION = Instant.now().minus(1, MINUTES); - public final static Instant QUERY_2_LAST_MODIFIED = Instant.ofEpochSecond(1541588352); + public final static Instant QUERY_2_LAST_MODIFIED = Instant.ofEpochSecond(1541588352L); public final static Boolean QUERY_2_PERSISTED = false; public final static Query QUERY_2 = Query.builder() @@ -3234,7 +2510,7 @@ public abstract class BaseTest { public final static String QUERY_3_RESULT_HASH = "ff3f7cbe1b96d396957f6e39e55b8b1b577fa3d305d4795af99594cfd30cb80d"; public final static Instant QUERY_3_CREATED = Instant.now().minus(3, MINUTES); public final static Instant QUERY_3_EXECUTION = Instant.now().minus(1, MINUTES); - public final static Instant QUERY_3_LAST_MODIFIED = Instant.ofEpochSecond(1541588353); + public final static Instant QUERY_3_LAST_MODIFIED = Instant.ofEpochSecond(1541588353L); public final static Long QUERY_3_RESULT_NUMBER = 2L; public final static Boolean QUERY_3_PERSISTED = true; @@ -3272,7 +2548,7 @@ public abstract class BaseTest { public final static String QUERY_4_RESULT_HASH = "ff4f7cbe1b96d496957f6e49e55b8b1b577fa4d405d4795af99594cfd40cb80d"; public final static Instant QUERY_4_CREATED = Instant.now().minus(4, MINUTES); public final static Instant QUERY_4_EXECUTION = Instant.now().minus(1, MINUTES); - public final static Instant QUERY_4_LAST_MODIFIED = Instant.ofEpochSecond(1541588454); + public final static Instant QUERY_4_LAST_MODIFIED = Instant.ofEpochSecond(1541588454L); public final static Long QUERY_4_RESULT_NUMBER = 6L; public final static Long QUERY_4_RESULT_ID = 4L; public final static Boolean QUERY_4_PERSISTED = false; @@ -3337,7 +2613,7 @@ public abstract class BaseTest { public final static String QUERY_5_RESULT_HASH = "ff5f7cbe1b96d596957f6e59e55b8b1b577fa5d505d5795af99595cfd50cb80d"; public final static Instant QUERY_5_CREATED = Instant.now().minus(5, MINUTES); public final static Instant QUERY_5_EXECUTION = Instant.now().minus(1, MINUTES); - public final static Instant QUERY_5_LAST_MODIFIED = Instant.ofEpochSecond(1551588555); + public final static Instant QUERY_5_LAST_MODIFIED = Instant.ofEpochSecond(1551588555L); public final static Long QUERY_5_RESULT_NUMBER = 6L; public final static Boolean QUERY_5_PERSISTED = true; @@ -3374,7 +2650,7 @@ public abstract class BaseTest { public final static String QUERY_6_RESULT_HASH = "ff5f7cbe1b96d596957f6e59e55b8b1b577fa5d505d5795af99595cfd50cb80d"; public final static Instant QUERY_6_CREATED = Instant.now().minus(5, MINUTES); public final static Instant QUERY_6_EXECUTION = Instant.now().minus(1, MINUTES); - public final static Instant QUERY_6_LAST_MODIFIED = Instant.ofEpochSecond(1551588555); + public final static Instant QUERY_6_LAST_MODIFIED = Instant.ofEpochSecond(1551588555L); public final static Long QUERY_6_RESULT_NUMBER = 1L; public final static Boolean QUERY_6_PERSISTED = true; @@ -3404,129 +2680,262 @@ public abstract class BaseTest { .build(); public final static List<TableColumn> TABLE_1_COLUMNS = List.of(TableColumn.builder() - .id(COLUMN_1_1_ID) - .ordinalPosition(COLUMN_1_1_ORDINALPOS) + .id(1L) + .ordinalPosition(0) .table(TABLE_1) - .name(COLUMN_1_1_NAME) - .internalName(COLUMN_1_1_INTERNAL_NAME) - .columnType(COLUMN_1_1_TYPE) - .isNullAllowed(COLUMN_1_1_NULL) - .autoGenerated(COLUMN_1_1_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_1_PRIMARY) - .enums(COLUMN_1_1_ENUM_VALUES) - .sets(COLUMN_1_1_SET_VALUES) + .name("id") + .internalName("id") + .columnType(TableColumnType.BIGINT) + .isNullAllowed(false) + .autoGenerated(false) + .isPrimaryKey(true) + .enums(null) + .sets(null) .build(), TableColumn.builder() - .id(COLUMN_1_2_ID) - .ordinalPosition(COLUMN_1_2_ORDINALPOS) + .id(2L) + .ordinalPosition(1) .table(TABLE_1) - .dateFormat(COLUMN_1_2_DATE) - .name(COLUMN_1_2_NAME) - .internalName(COLUMN_1_2_INTERNAL_NAME) - .columnType(COLUMN_1_2_TYPE) + .name("Date") + .internalName("date") + .columnType(TableColumnType.DATE) .dateFormat(IMAGE_DATE_1) - .isNullAllowed(COLUMN_1_2_NULL) - .autoGenerated(COLUMN_1_2_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_2_PRIMARY) - .enums(COLUMN_1_2_ENUM_VALUES) - .sets(COLUMN_1_2_SET_VALUES) + .isNullAllowed(true) + .autoGenerated(false) + .isPrimaryKey(false) + .enums(null) + .sets(null) .build(), TableColumn.builder() - .id(COLUMN_1_3_ID) - .ordinalPosition(COLUMN_1_3_ORDINALPOS) + .id(3L) + .ordinalPosition(2) .table(TABLE_1) - .name(COLUMN_1_3_NAME) - .internalName(COLUMN_1_3_INTERNAL_NAME) - .columnType(COLUMN_1_3_TYPE) - .isNullAllowed(COLUMN_1_3_NULL) - .autoGenerated(COLUMN_1_3_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_3_PRIMARY) - .enums(COLUMN_1_3_ENUM_VALUES) - .sets(COLUMN_1_3_SET_VALUES) + .name("Location") + .internalName("location") + .columnType(TableColumnType.VARCHAR) + .size(255L) + .isNullAllowed(true) + .autoGenerated(false) + .isPrimaryKey(false) + .enums(null) + .sets(null) .build(), TableColumn.builder() - .id(COLUMN_1_4_ID) - .ordinalPosition(COLUMN_1_4_ORDINALPOS) + .id(4L) + .ordinalPosition(3) .table(TABLE_1) - .name(COLUMN_1_4_NAME) - .internalName(COLUMN_1_4_INTERNAL_NAME) - .columnType(COLUMN_1_4_TYPE) - .isNullAllowed(COLUMN_1_4_NULL) - .autoGenerated(COLUMN_1_4_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_4_PRIMARY) - .enums(COLUMN_1_4_ENUM_VALUES) - .sets(COLUMN_1_4_SET_VALUES) + .name("MinTemp") + .internalName("mintemp") + .columnType(TableColumnType.DECIMAL) + .size(10L) + .d(0L) + .isNullAllowed(true) + .autoGenerated(false) + .isPrimaryKey(false) + .enums(null) + .sets(null) .build(), TableColumn.builder() - .id(COLUMN_1_5_ID) - .ordinalPosition(COLUMN_1_5_ORDINALPOS) + .id(5L) + .ordinalPosition(4) .table(TABLE_1) - .name(COLUMN_1_5_NAME) - .internalName(COLUMN_1_5_INTERNAL_NAME) - .columnType(COLUMN_1_5_TYPE) - .isNullAllowed(COLUMN_1_5_NULL) - .autoGenerated(COLUMN_1_5_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_5_PRIMARY) - .enums(COLUMN_1_5_ENUM_VALUES) - .sets(COLUMN_1_5_SET_VALUES) + .name("Rainfall") + .internalName("rainfall") + .columnType(TableColumnType.DECIMAL) + .size(10L) + .d(0L) + .concept(COLUMN_CONCEPT_PRECIPITATION) + .unit(UNIT_MILLIMETRE) + .isNullAllowed(true) + .autoGenerated(false) + .isPrimaryKey(false) + .enums(null) + .sets(null) + .build()); + + public final static List<ColumnDto> TABLE_1_COLUMNS_DTO = List.of(ColumnDto.builder() + .id(1L) + .name("id") + .internalName("id") + .columnType(ColumnTypeDto.BIGINT) + .isNullAllowed(false) + .autoGenerated(false) + .isPrimaryKey(true) + .enums(null) + .sets(null) + .build(), + ColumnDto.builder() + .id(2L) + .name("Date") + .internalName("date") + .columnType(ColumnTypeDto.DATE) + .dateFormat(IMAGE_DATE_1_DTO) + .isNullAllowed(true) + .autoGenerated(false) + .isPrimaryKey(false) + .enums(null) + .sets(null) + .build(), + ColumnDto.builder() + .id(3L) + .name("Location") + .internalName("location") + .columnType(ColumnTypeDto.VARCHAR) + .size(255L) + .isNullAllowed(true) + .autoGenerated(false) + .isPrimaryKey(false) + .enums(null) + .sets(null) + .build(), + ColumnDto.builder() + .id(4L) + .name("MinTemp") + .internalName("mintemp") + .columnType(ColumnTypeDto.DECIMAL) + .size(10L) + .d(0L) + .isNullAllowed(true) + .autoGenerated(false) + .isPrimaryKey(false) + .enums(null) + .sets(null) + .build(), + ColumnDto.builder() + .id(5L) + .name("Rainfall") + .internalName("rainfall") + .columnType(ColumnTypeDto.DECIMAL) + .size(10L) + .d(0L) + .concept(COLUMN_CONCEPT_PRECIPITATION_DTO) + .unit(UNIT_MILLIMETRE_DTO) + .isNullAllowed(true) + .autoGenerated(false) + .isPrimaryKey(false) + .enums(null) + .sets(null) .build()); public final static List<TableColumn> TABLE_2_COLUMNS = List.of(TableColumn.builder() - .id(COLUMN_2_1_ID) - .ordinalPosition(COLUMN_2_1_ORDINALPOS) + .id(6L) + .ordinalPosition(0) .table(TABLE_2) - .name(COLUMN_2_1_NAME) - .internalName(COLUMN_2_1_INTERNAL_NAME) - .columnType(COLUMN_2_1_TYPE) - .isNullAllowed(COLUMN_2_1_NULL) - .autoGenerated(COLUMN_2_1_AUTO_GENERATED) - .isPrimaryKey(COLUMN_2_1_PRIMARY) - .enums(COLUMN_2_1_ENUM_VALUES) - .sets(COLUMN_2_1_SET_VALUES) + .name("location") + .internalName("location") + .columnType(TableColumnType.VARCHAR) + .size(255L) + .isNullAllowed(false) + .autoGenerated(false) + .isPrimaryKey(true) + .enums(null) + .sets(null) .build(), TableColumn.builder() - .id(COLUMN_2_2_ID) - .ordinalPosition(COLUMN_2_2_ORDINALPOS) + .id(7L) + .ordinalPosition(1) .table(TABLE_2) - .name(COLUMN_2_2_NAME) - .internalName(COLUMN_2_2_INTERNAL_NAME) - .columnType(COLUMN_2_2_TYPE) - .isNullAllowed(COLUMN_2_2_NULL) - .autoGenerated(COLUMN_2_2_AUTO_GENERATED) - .isPrimaryKey(COLUMN_2_2_PRIMARY) - .enums(COLUMN_2_2_ENUM_VALUES) - .sets(COLUMN_2_2_SET_VALUES) + .name("lat") + .internalName("lat") + .columnType(TableColumnType.DECIMAL) + .size(10L) + .d(0L) + .isNullAllowed(true) + .autoGenerated(false) + .isPrimaryKey(false) + .enums(null) + .sets(null) .build(), TableColumn.builder() - .id(COLUMN_2_3_ID) - .ordinalPosition(COLUMN_2_3_ORDINALPOS) + .id(8L) + .ordinalPosition(2) .table(TABLE_2) - .name(COLUMN_2_3_NAME) - .internalName(COLUMN_2_3_INTERNAL_NAME) - .columnType(COLUMN_2_3_TYPE) - .isNullAllowed(COLUMN_2_3_NULL) - .autoGenerated(COLUMN_2_3_AUTO_GENERATED) - .isPrimaryKey(COLUMN_2_3_PRIMARY) - .enums(COLUMN_2_3_ENUM_VALUES) - .sets(COLUMN_2_3_SET_VALUES) + .name("lng") + .internalName("lng") + .columnType(TableColumnType.DECIMAL) + .size(10L) + .d(0L) + .isNullAllowed(true) + .autoGenerated(false) + .isPrimaryKey(false) + .enums(null) + .sets(null) + .build()); + + public final static List<ColumnDto> TABLE_2_COLUMNS_DTO = List.of(ColumnDto.builder() + .id(6L) + .name("location") + .internalName("location") + .columnType(ColumnTypeDto.VARCHAR) + .size(255L) + .isNullAllowed(false) + .autoGenerated(false) + .isPrimaryKey(true) + .enums(null) + .sets(null) + .build(), + ColumnDto.builder() + .id(7L) + .name("lat") + .internalName("lat") + .columnType(ColumnTypeDto.DECIMAL) + .size(10L) + .d(0L) + .isNullAllowed(true) + .autoGenerated(false) + .isPrimaryKey(false) + .enums(null) + .sets(null) + .build(), + ColumnDto.builder() + .id(8L) + .name("lng") + .internalName("lng") + .columnType(ColumnTypeDto.DECIMAL) + .size(10L) + .d(0L) + .isNullAllowed(true) + .autoGenerated(false) + .isPrimaryKey(false) + .enums(null) + .sets(null) .build()); + public final static Long TABLE_1_FOREIGN_KEY_1_ID = 1L; + + public final static ForeignKey TABLE_1_FOREIGN_KEY_1 = ForeignKey.builder() + .fkid(TABLE_1_FOREIGN_KEY_1_ID) + .referencedTable(TABLE_2) + .table(TABLE_1) + .references(List.of()) /* TABLE_1_FOREIGN_KEY_REFERENCE */ + .build(); + + public final static Long TABLE_1_FOREIGN_KEY_REFERENCE_ID = 1L; + + public final static ForeignKeyReference TABLE_1_FOREIGN_KEY_REFERENCE = ForeignKeyReference.builder() + .id(TABLE_1_FOREIGN_KEY_REFERENCE_ID) + .foreignKey(TABLE_1_FOREIGN_KEY_1) + .column(TABLE_1_COLUMNS.get(2)) + .referencedColumn(TABLE_1_COLUMNS.get(0)) + .build(); + public final static Constraints TABLE_1_CONSTRAINTS = Constraints.builder() - .foreignKeys(List.of(ForeignKey.builder() - .referencedTable(TABLE_2) - .references(List.of( - ForeignKeyReference.builder().column(TABLE_1_COLUMNS.get(2)).referencedColumn(TABLE_1_COLUMNS.get(0)).build()) - ).build() - )) - .uniques(List.of(Unique.builder().columns(List.of( - TABLE_1_COLUMNS.get(0), - TABLE_1_COLUMNS.get(1) - )).build())) + .foreignKeys(List.of(TABLE_1_FOREIGN_KEY_1)) + .uniques(List.of(Unique.builder() + .columns(List.of( + TABLE_1_COLUMNS.get(0), + TABLE_1_COLUMNS.get(1) + )) + .table(TABLE_1) + .build())) .checks(Set.of("`mintemp` > 0")) .build(); public final static Constraints TABLE_2_CONSTRAINTS = Constraints.builder() - .uniques(List.of(Unique.builder().columns(List.of(TABLE_2_COLUMNS.get(0))).build())) + .uniques(List.of(Unique.builder() + .columns(List.of(TABLE_2_COLUMNS.get(0))) + .table(TABLE_2) + .build())) .build(); public final static List<TableColumn> TABLE_3_COLUMNS = List.of(TableColumn.builder() @@ -4509,35 +3918,20 @@ public abstract class BaseTest { .build()); public final static Constraints TABLE_3_CONSTRAINTS = Constraints.builder() - .uniques(List.of(Unique.builder().columns(List.of(TABLE_3_COLUMNS.get(0))).build())) + .uniques(List.of(Unique.builder() + .columns(List.of(TABLE_3_COLUMNS.get(0))) + .table(TABLE_3) + .build())) .build(); public final static ConstraintsDto TABLE_3_CONSTRAINTS_DTO = ConstraintsDto.builder() .uniques(List.of(UniqueDto.builder().columns(List.of(TABLE_3_COLUMNS_DTO.get(0))).build())) .build(); - public final static TableDto TABLE_3_DTO = TableDto.builder() - .id(TABLE_3_ID) - .database(DATABASE_1_DTO) - .created(Instant.now()) - .internalName(TABLE_3_INTERNALNAME) - .isVersioned(TABLE_3_VERSIONED) - .description(TABLE_3_DESCRIPTION) - .name(TABLE_3_NAME) - .database(DATABASE_1_DTO) - .queueName(TABLE_3_QUEUE_NAME) - .routingKey(TABLE_3_ROUTING_KEY) - .columns(TABLE_3_COLUMNS_DTO) - .constraints(TABLE_3_CONSTRAINTS_DTO) - .creator(USER_1_DTO) - .owner(USER_1_DTO) - .created(TABLE_3_CREATED) - .build(); - - public final static List<TableColumn> TABLE_4_COLUMNS = List.of(TableColumn.builder() + public final static List<TableColumn> TABLE_5_COLUMNS = List.of(TableColumn.builder() .id(COLUMN_4_1_ID) .ordinalPosition(COLUMN_4_1_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_1_NAME) .internalName(COLUMN_4_1_INTERNAL_NAME) .columnType(COLUMN_4_1_TYPE) @@ -4550,7 +3944,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_2_ID) .ordinalPosition(COLUMN_4_2_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_2_NAME) .internalName(COLUMN_4_2_INTERNAL_NAME) .columnType(COLUMN_4_2_TYPE) @@ -4563,7 +3957,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_3_ID) .ordinalPosition(COLUMN_4_3_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_3_NAME) .internalName(COLUMN_4_3_INTERNAL_NAME) .columnType(COLUMN_4_3_TYPE) @@ -4576,7 +3970,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_4_ID) .ordinalPosition(COLUMN_4_4_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_4_NAME) .internalName(COLUMN_4_4_INTERNAL_NAME) .columnType(COLUMN_4_4_TYPE) @@ -4589,7 +3983,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_5_ID) .ordinalPosition(COLUMN_4_5_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_5_NAME) .internalName(COLUMN_4_5_INTERNAL_NAME) .columnType(COLUMN_4_5_TYPE) @@ -4602,7 +3996,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_6_ID) .ordinalPosition(COLUMN_4_6_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_6_NAME) .internalName(COLUMN_4_6_INTERNAL_NAME) .columnType(COLUMN_4_6_TYPE) @@ -4615,7 +4009,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_7_ID) .ordinalPosition(COLUMN_4_7_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_7_NAME) .internalName(COLUMN_4_7_INTERNAL_NAME) .columnType(COLUMN_4_7_TYPE) @@ -4628,7 +4022,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_8_ID) .ordinalPosition(COLUMN_4_8_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_8_NAME) .internalName(COLUMN_4_8_INTERNAL_NAME) .columnType(COLUMN_4_8_TYPE) @@ -4641,7 +4035,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_9_ID) .ordinalPosition(COLUMN_4_9_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_9_NAME) .internalName(COLUMN_4_9_INTERNAL_NAME) .columnType(COLUMN_4_9_TYPE) @@ -4654,7 +4048,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_10_ID) .ordinalPosition(COLUMN_4_10_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_10_NAME) .internalName(COLUMN_4_10_INTERNAL_NAME) .columnType(COLUMN_4_10_TYPE) @@ -4667,7 +4061,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_11_ID) .ordinalPosition(COLUMN_4_11_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_11_NAME) .internalName(COLUMN_4_11_INTERNAL_NAME) .columnType(COLUMN_4_11_TYPE) @@ -4680,7 +4074,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_12_ID) .ordinalPosition(COLUMN_4_12_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_12_NAME) .internalName(COLUMN_4_12_INTERNAL_NAME) .columnType(COLUMN_4_12_TYPE) @@ -4693,7 +4087,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_13_ID) .ordinalPosition(COLUMN_4_13_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_13_NAME) .internalName(COLUMN_4_13_INTERNAL_NAME) .columnType(COLUMN_4_13_TYPE) @@ -4706,7 +4100,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_14_ID) .ordinalPosition(COLUMN_4_14_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_14_NAME) .internalName(COLUMN_4_14_INTERNAL_NAME) .columnType(COLUMN_4_14_TYPE) @@ -4719,7 +4113,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_15_ID) .ordinalPosition(COLUMN_4_15_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_15_NAME) .internalName(COLUMN_4_15_INTERNAL_NAME) .columnType(COLUMN_4_15_TYPE) @@ -4732,7 +4126,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_16_ID) .ordinalPosition(COLUMN_4_16_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_16_NAME) .internalName(COLUMN_4_16_INTERNAL_NAME) .columnType(COLUMN_4_16_TYPE) @@ -4745,7 +4139,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_17_ID) .ordinalPosition(COLUMN_4_17_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_17_NAME) .internalName(COLUMN_4_17_INTERNAL_NAME) .columnType(COLUMN_4_17_TYPE) @@ -4758,7 +4152,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_18_ID) .ordinalPosition(COLUMN_4_18_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_18_NAME) .internalName(COLUMN_4_18_INTERNAL_NAME) .columnType(COLUMN_4_18_TYPE) @@ -4771,7 +4165,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_19_ID) .ordinalPosition(COLUMN_4_19_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_19_NAME) .internalName(COLUMN_4_19_INTERNAL_NAME) .columnType(COLUMN_4_19_TYPE) @@ -4784,7 +4178,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_20_ID) .ordinalPosition(COLUMN_4_20_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_20_NAME) .internalName(COLUMN_4_20_INTERNAL_NAME) .columnType(COLUMN_4_20_TYPE) @@ -4797,7 +4191,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_4_21_ID) .ordinalPosition(COLUMN_4_21_ORDINALPOS) - .table(TABLE_4) + .table(TABLE_5) .name(COLUMN_4_21_NAME) .internalName(COLUMN_4_21_INTERNAL_NAME) .columnType(COLUMN_4_21_TYPE) @@ -4808,61 +4202,293 @@ public abstract class BaseTest { .sets(COLUMN_4_21_SET_VALUES) .build()); - public final static Constraints TABLE_4_CONSTRAINTS = Constraints.builder() - .uniques(List.of(Unique.builder().columns(List.of(TABLE_4_COLUMNS.get(0))).build())) - .build(); - - public final static List<ForeignKeyCreateDto> TABLE_4_FOREIGN_KEYS_INVALID_CREATE = List.of(ForeignKeyCreateDto.builder() - .columns(List.of("somecolumn")) - .referencedTable("sometable") - .referencedColumns(List.of("someothercolumn")) - .build()); - - public final static ConstraintsCreateDto TABLE_4_CONSTRAINTS_INVALID_CREATE = ConstraintsCreateDto.builder() - .foreignKeys(TABLE_4_FOREIGN_KEYS_INVALID_CREATE) - .build(); - - public final static List<ColumnCreateDto> TABLE_4_COLUMNS_INVALID_CREATE = List.of(ColumnCreateDto.builder() - .name(COLUMN_4_2_NAME) - .type(COLUMN_4_2_TYPE_DTO) - .nullAllowed(COLUMN_4_2_NULL) - .primaryKey(COLUMN_4_2_PRIMARY) - .enums(COLUMN_4_2_ENUM_VALUES_ARR) - .build()); - - public final static List<ColumnCreateDto> TABLE_4_COLUMNS_CREATE = List.of(ColumnCreateDto.builder() + public final static List<ColumnDto> TABLE_5_COLUMNS_DTO = List.of(ColumnDto.builder() + .id(COLUMN_4_1_ID) .name(COLUMN_4_1_NAME) - .type(COLUMN_4_1_TYPE_DTO) - .nullAllowed(COLUMN_4_1_NULL) - .primaryKey(COLUMN_4_1_PRIMARY) - .enums(COLUMN_4_2_ENUM_VALUES_ARR) + .internalName(COLUMN_4_1_INTERNAL_NAME) + .columnType(COLUMN_4_1_TYPE_DTO) + .isNullAllowed(COLUMN_4_1_NULL) + .autoGenerated(COLUMN_4_1_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_1_PRIMARY) + .enums(COLUMN_4_1_ENUM_VALUES) + .sets(COLUMN_4_1_SET_VALUES) .build(), - ColumnCreateDto.builder() + ColumnDto.builder() + .id(COLUMN_4_2_ID) .name(COLUMN_4_2_NAME) - .type(COLUMN_4_2_TYPE_DTO) - .nullAllowed(COLUMN_4_2_NULL) - .primaryKey(COLUMN_4_2_PRIMARY) - .enums(COLUMN_4_2_ENUM_VALUES_ARR) - .build()); - - public final static TableCreateDto TABLE_4_CREATE_DTO = TableCreateDto.builder() - .name(TABLE_4_NAME) - .description(TABLE_4_DESCRIPTION) - .columns(TABLE_4_COLUMNS_CREATE) - .constraints(null) - .build(); - - public final static TableCreateDto TABLE_4_INVALID_CREATE_DTO = TableCreateDto.builder() - .name(TABLE_4_NAME) - .description(TABLE_4_DESCRIPTION) - .columns(TABLE_4_COLUMNS_CREATE) - .constraints(TABLE_4_CONSTRAINTS_INVALID_CREATE) - .build(); - - public final static List<TableColumn> TABLE_5_COLUMNS = List.of(TableColumn.builder() + .internalName(COLUMN_4_2_INTERNAL_NAME) + .columnType(COLUMN_4_2_TYPE_DTO) + .isNullAllowed(COLUMN_4_2_NULL) + .autoGenerated(COLUMN_4_2_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_2_PRIMARY) + .enums(COLUMN_4_2_ENUM_VALUES) + .sets(COLUMN_4_2_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_3_ID) + .name(COLUMN_4_3_NAME) + .internalName(COLUMN_4_3_INTERNAL_NAME) + .columnType(COLUMN_4_3_TYPE_DTO) + .isNullAllowed(COLUMN_4_3_NULL) + .autoGenerated(COLUMN_4_3_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_3_PRIMARY) + .enums(COLUMN_4_3_ENUM_VALUES) + .sets(COLUMN_4_3_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_4_ID) + .name(COLUMN_4_4_NAME) + .internalName(COLUMN_4_4_INTERNAL_NAME) + .columnType(COLUMN_4_4_TYPE_DTO) + .isNullAllowed(COLUMN_4_4_NULL) + .autoGenerated(COLUMN_4_4_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_4_PRIMARY) + .enums(COLUMN_4_4_ENUM_VALUES) + .sets(COLUMN_4_4_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_5_ID) + .name(COLUMN_4_5_NAME) + .internalName(COLUMN_4_5_INTERNAL_NAME) + .columnType(COLUMN_4_5_TYPE_DTO) + .isNullAllowed(COLUMN_4_5_NULL) + .autoGenerated(COLUMN_4_5_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_5_PRIMARY) + .enums(COLUMN_4_5_ENUM_VALUES) + .sets(COLUMN_4_5_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_6_ID) + .name(COLUMN_4_6_NAME) + .internalName(COLUMN_4_6_INTERNAL_NAME) + .columnType(COLUMN_4_6_TYPE_DTO) + .isNullAllowed(COLUMN_4_6_NULL) + .autoGenerated(COLUMN_4_6_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_6_PRIMARY) + .enums(COLUMN_4_6_ENUM_VALUES) + .sets(COLUMN_4_6_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_7_ID) + .name(COLUMN_4_7_NAME) + .internalName(COLUMN_4_7_INTERNAL_NAME) + .columnType(COLUMN_4_7_TYPE_DTO) + .isNullAllowed(COLUMN_4_7_NULL) + .autoGenerated(COLUMN_4_7_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_7_PRIMARY) + .enums(COLUMN_4_7_ENUM_VALUES) + .sets(COLUMN_4_7_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_8_ID) + .name(COLUMN_4_8_NAME) + .internalName(COLUMN_4_8_INTERNAL_NAME) + .columnType(COLUMN_4_8_TYPE_DTO) + .isNullAllowed(COLUMN_4_8_NULL) + .autoGenerated(COLUMN_4_8_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_8_PRIMARY) + .enums(COLUMN_4_8_ENUM_VALUES) + .sets(COLUMN_4_8_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_9_ID) + .name(COLUMN_4_9_NAME) + .internalName(COLUMN_4_9_INTERNAL_NAME) + .columnType(COLUMN_4_9_TYPE_DTO) + .isNullAllowed(COLUMN_4_9_NULL) + .autoGenerated(COLUMN_4_9_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_9_PRIMARY) + .enums(COLUMN_4_9_ENUM_VALUES) + .sets(COLUMN_4_9_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_10_ID) + .name(COLUMN_4_10_NAME) + .internalName(COLUMN_4_10_INTERNAL_NAME) + .columnType(COLUMN_4_10_TYPE_DTO) + .isNullAllowed(COLUMN_4_10_NULL) + .autoGenerated(COLUMN_4_10_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_10_PRIMARY) + .enums(COLUMN_4_10_ENUM_VALUES) + .sets(COLUMN_4_10_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_11_ID) + .name(COLUMN_4_11_NAME) + .internalName(COLUMN_4_11_INTERNAL_NAME) + .columnType(COLUMN_4_11_TYPE_DTO) + .isNullAllowed(COLUMN_4_11_NULL) + .autoGenerated(COLUMN_4_11_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_11_PRIMARY) + .enums(COLUMN_4_11_ENUM_VALUES) + .sets(COLUMN_4_11_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_12_ID) + .name(COLUMN_4_12_NAME) + .internalName(COLUMN_4_12_INTERNAL_NAME) + .columnType(COLUMN_4_12_TYPE_DTO) + .isNullAllowed(COLUMN_4_12_NULL) + .autoGenerated(COLUMN_4_12_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_12_PRIMARY) + .enums(COLUMN_4_12_ENUM_VALUES) + .sets(COLUMN_4_12_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_13_ID) + .name(COLUMN_4_13_NAME) + .internalName(COLUMN_4_13_INTERNAL_NAME) + .columnType(COLUMN_4_13_TYPE_DTO) + .isNullAllowed(COLUMN_4_13_NULL) + .autoGenerated(COLUMN_4_13_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_13_PRIMARY) + .enums(COLUMN_4_13_ENUM_VALUES) + .sets(COLUMN_4_13_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_14_ID) + .name(COLUMN_4_14_NAME) + .internalName(COLUMN_4_14_INTERNAL_NAME) + .columnType(COLUMN_4_14_TYPE_DTO) + .isNullAllowed(COLUMN_4_14_NULL) + .autoGenerated(COLUMN_4_14_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_14_PRIMARY) + .enums(COLUMN_4_14_ENUM_VALUES) + .sets(COLUMN_4_14_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_15_ID) + .name(COLUMN_4_15_NAME) + .internalName(COLUMN_4_15_INTERNAL_NAME) + .columnType(COLUMN_4_15_TYPE_DTO) + .isNullAllowed(COLUMN_4_15_NULL) + .autoGenerated(COLUMN_4_15_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_15_PRIMARY) + .enums(COLUMN_4_15_ENUM_VALUES) + .sets(COLUMN_4_15_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_16_ID) + .name(COLUMN_4_16_NAME) + .internalName(COLUMN_4_16_INTERNAL_NAME) + .columnType(COLUMN_4_16_TYPE_DTO) + .isNullAllowed(COLUMN_4_16_NULL) + .autoGenerated(COLUMN_4_16_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_16_PRIMARY) + .enums(COLUMN_4_16_ENUM_VALUES) + .sets(COLUMN_4_16_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_17_ID) + .name(COLUMN_4_17_NAME) + .internalName(COLUMN_4_17_INTERNAL_NAME) + .columnType(COLUMN_4_17_TYPE_DTO) + .isNullAllowed(COLUMN_4_17_NULL) + .autoGenerated(COLUMN_4_17_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_17_PRIMARY) + .enums(COLUMN_4_17_ENUM_VALUES) + .sets(COLUMN_4_17_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_18_ID) + .name(COLUMN_4_18_NAME) + .internalName(COLUMN_4_18_INTERNAL_NAME) + .columnType(COLUMN_4_18_TYPE_DTO) + .isNullAllowed(COLUMN_4_18_NULL) + .autoGenerated(COLUMN_4_18_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_18_PRIMARY) + .enums(COLUMN_4_18_ENUM_VALUES) + .sets(COLUMN_4_18_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_19_ID) + .name(COLUMN_4_19_NAME) + .internalName(COLUMN_4_19_INTERNAL_NAME) + .columnType(COLUMN_4_19_TYPE_DTO) + .isNullAllowed(COLUMN_4_19_NULL) + .autoGenerated(COLUMN_4_19_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_19_PRIMARY) + .enums(COLUMN_4_19_ENUM_VALUES) + .sets(COLUMN_4_19_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_20_ID) + .name(COLUMN_4_20_NAME) + .internalName(COLUMN_4_20_INTERNAL_NAME) + .columnType(COLUMN_4_20_TYPE_DTO) + .isNullAllowed(COLUMN_4_20_NULL) + .autoGenerated(COLUMN_4_20_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_20_PRIMARY) + .enums(COLUMN_4_20_ENUM_VALUES) + .sets(COLUMN_4_20_SET_VALUES) + .build(), + ColumnDto.builder() + .id(COLUMN_4_21_ID) + .name(COLUMN_4_21_NAME) + .internalName(COLUMN_4_21_INTERNAL_NAME) + .columnType(COLUMN_4_21_TYPE_DTO) + .isNullAllowed(COLUMN_4_21_NULL) + .autoGenerated(COLUMN_4_21_AUTO_GENERATED) + .isPrimaryKey(COLUMN_4_21_PRIMARY) + .enums(COLUMN_4_21_ENUM_VALUES) + .sets(COLUMN_4_21_SET_VALUES) + .build()); + + public final static Constraints TABLE_5_CONSTRAINTS = Constraints.builder() + .uniques(List.of(Unique.builder().columns(List.of(TABLE_5_COLUMNS.get(0))).build())) + .build(); + + public final static List<ForeignKeyCreateDto> TABLE_5_FOREIGN_KEYS_INVALID_CREATE = List.of(ForeignKeyCreateDto.builder() + .columns(List.of("somecolumn")) + .referencedTable("sometable") + .referencedColumns(List.of("someothercolumn")) + .build()); + + public final static ConstraintsCreateDto TABLE_5_CONSTRAINTS_INVALID_CREATE = ConstraintsCreateDto.builder() + .foreignKeys(TABLE_5_FOREIGN_KEYS_INVALID_CREATE) + .build(); + + public final static List<ColumnCreateDto> TABLE_5_COLUMNS_INVALID_CREATE = List.of(ColumnCreateDto.builder() + .name(COLUMN_4_2_NAME) + .type(COLUMN_4_2_TYPE_DTO) + .nullAllowed(COLUMN_4_2_NULL) + .primaryKey(COLUMN_4_2_PRIMARY) + .enums(COLUMN_4_2_ENUM_VALUES_ARR) + .build()); + + public final static List<ColumnCreateDto> TABLE_5_COLUMNS_CREATE = List.of(ColumnCreateDto.builder() + .name(COLUMN_4_1_NAME) + .type(COLUMN_4_1_TYPE_DTO) + .nullAllowed(COLUMN_4_1_NULL) + .primaryKey(COLUMN_4_1_PRIMARY) + .enums(COLUMN_4_2_ENUM_VALUES_ARR) + .build(), + ColumnCreateDto.builder() + .name(COLUMN_4_2_NAME) + .type(COLUMN_4_2_TYPE_DTO) + .nullAllowed(COLUMN_4_2_NULL) + .primaryKey(COLUMN_4_2_PRIMARY) + .enums(COLUMN_4_2_ENUM_VALUES_ARR) + .build()); + + public final static TableCreateDto TABLE_5_CREATE_DTO = TableCreateDto.builder() + .name(TABLE_5_NAME) + .description(TABLE_5_DESCRIPTION) + .columns(TABLE_5_COLUMNS_CREATE) + .constraints(null) + .build(); + + public final static TableCreateDto TABLE_5_INVALID_CREATE_DTO = TableCreateDto.builder() + .name(TABLE_5_NAME) + .description(TABLE_5_DESCRIPTION) + .columns(TABLE_5_COLUMNS_CREATE) + .constraints(TABLE_5_CONSTRAINTS_INVALID_CREATE) + .build(); + + public final static List<TableColumn> TABLE_6_COLUMNS = List.of(TableColumn.builder() .id(COLUMN_5_1_ID) .ordinalPosition(COLUMN_5_1_ORDINALPOS) - .table(TABLE_5) + .table(TABLE_6) .name(COLUMN_5_1_NAME) .internalName(COLUMN_5_1_INTERNAL_NAME) .columnType(COLUMN_5_1_TYPE) @@ -4875,7 +4501,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_5_2_ID) .ordinalPosition(COLUMN_5_2_ORDINALPOS) - .table(TABLE_5) + .table(TABLE_6) .name(COLUMN_5_2_NAME) .internalName(COLUMN_5_2_INTERNAL_NAME) .columnType(COLUMN_5_2_TYPE) @@ -4888,7 +4514,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_5_3_ID) .ordinalPosition(COLUMN_5_3_ORDINALPOS) - .table(TABLE_5) + .table(TABLE_6) .name(COLUMN_5_3_NAME) .internalName(COLUMN_5_3_INTERNAL_NAME) .columnType(COLUMN_5_3_TYPE) @@ -4901,7 +4527,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_5_4_ID) .ordinalPosition(COLUMN_5_4_ORDINALPOS) - .table(TABLE_5) + .table(TABLE_6) .name(COLUMN_5_4_NAME) .internalName(COLUMN_5_4_INTERNAL_NAME) .columnType(COLUMN_5_4_TYPE) @@ -4914,7 +4540,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_5_5_ID) .ordinalPosition(COLUMN_5_5_ORDINALPOS) - .table(TABLE_5) + .table(TABLE_6) .name(COLUMN_5_5_NAME) .internalName(COLUMN_5_5_INTERNAL_NAME) .columnType(COLUMN_5_5_TYPE) @@ -4927,7 +4553,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_5_6_ID) .ordinalPosition(COLUMN_5_6_ORDINALPOS) - .table(TABLE_5) + .table(TABLE_6) .name(COLUMN_5_6_NAME) .internalName(COLUMN_5_6_INTERNAL_NAME) .columnType(COLUMN_5_6_TYPE) @@ -4938,11 +4564,11 @@ public abstract class BaseTest { .sets(COLUMN_5_6_SET_VALUES) .build()); - public final static Constraints TABLE_5_CONSTRAINTS = Constraints.builder() - .uniques(List.of(Unique.builder().columns(List.of(TABLE_5_COLUMNS.get(0))).build())) + public final static Constraints TABLE_6_CONSTRAINTS = Constraints.builder() + .uniques(List.of(Unique.builder().columns(List.of(TABLE_6_COLUMNS.get(0))).build())) .build(); - public final static List<ColumnCreateDto> TABLE_5_COLUMNS_CREATE = List.of( + public final static List<ColumnCreateDto> TABLE_6_COLUMNS_CREATE = List.of( ColumnCreateDto.builder() .name(COLUMN_5_1_NAME) .type(COLUMN_5_1_TYPE_DTO) @@ -4982,30 +4608,30 @@ public abstract class BaseTest { .primaryKey(COLUMN_5_6_PRIMARY) .build()); - public final static List<List<String>> TABLE_5_UNIQUES_CREATE = List.of( + public final static List<List<String>> TABLE_6_UNIQUES_CREATE = List.of( List.of(COLUMN_5_1_NAME), List.of(COLUMN_5_2_NAME, COLUMN_5_3_NAME)); - public final static List<ForeignKeyCreateDto> TABLE_5_FOREIGN_KEYS_CREATE = List.of(ForeignKeyCreateDto.builder() + public final static List<ForeignKeyCreateDto> TABLE_6_FOREIGN_KEYS_CREATE = List.of(ForeignKeyCreateDto.builder() .columns(List.of(COLUMN_5_6_NAME)) - .referencedTable(TABLE_4_NAME) + .referencedTable(TABLE_5_NAME) .referencedColumns(List.of(COLUMN_4_1_NAME)) .build()); - public final static List<String> TABLE_5_CHECKS_CREATE = List.of( + public final static List<String> TABLE_6_CHECKS_CREATE = List.of( COLUMN_5_2_NAME + " != " + COLUMN_5_3_NAME); - public final static ConstraintsCreateDto TABLE_5_CONSTRAINTS_CREATE = ConstraintsCreateDto.builder() - .uniques(TABLE_5_UNIQUES_CREATE) - .foreignKeys(TABLE_5_FOREIGN_KEYS_CREATE) - .checks(TABLE_5_CHECKS_CREATE) + public final static ConstraintsCreateDto TABLE_6_CONSTRAINTS_CREATE = ConstraintsCreateDto.builder() + .uniques(TABLE_6_UNIQUES_CREATE) + .foreignKeys(TABLE_6_FOREIGN_KEYS_CREATE) + .checks(TABLE_6_CHECKS_CREATE) .build(); - public final static TableCreateDto TABLE_5_CREATE_DTO = TableCreateDto.builder() - .name(TABLE_5_NAME) - .description(TABLE_5_DESCRIPTION) - .columns(TABLE_5_COLUMNS_CREATE) - .constraints(TABLE_5_CONSTRAINTS_CREATE) + public final static TableCreateDto TABLE_6_CREATE_DTO = TableCreateDto.builder() + .name(TABLE_6_NAME) + .description(TABLE_6_DESCRIPTION) + .columns(TABLE_6_COLUMNS_CREATE) + .constraints(TABLE_6_CONSTRAINTS_CREATE) .build(); public final static Long COLUMN_6_1_ID = 26L; @@ -5042,10 +4668,10 @@ public abstract class BaseTest { public final static List<String> COLUMN_6_2_SET_VALUES = null; public final static List<String> COLUMN_6_2_SET_VALUES_DTO = null; - public final static List<TableColumn> TABLE_6_COLUMNS = List.of(TableColumn.builder() + public final static List<TableColumn> TABLE_7_COLUMNS = List.of(TableColumn.builder() .id(COLUMN_6_1_ID) .ordinalPosition(COLUMN_6_1_ORDINALPOS) - .table(TABLE_6) + .table(TABLE_7) .name(COLUMN_6_1_NAME) .internalName(COLUMN_6_1_INTERNAL_NAME) .columnType(COLUMN_6_1_TYPE) @@ -5058,7 +4684,7 @@ public abstract class BaseTest { TableColumn.builder() .id(COLUMN_6_2_ID) .ordinalPosition(COLUMN_6_2_ORDINALPOS) - .table(TABLE_6) + .table(TABLE_7) .name(COLUMN_6_2_NAME) .internalName(COLUMN_6_2_INTERNAL_NAME) .columnType(COLUMN_6_2_TYPE) @@ -5079,88 +4705,17 @@ public abstract class BaseTest { public final static String VIEW_1_QUERY = "select `location`, `lat`, `lng` from `weather_location`"; public final static String VIEW_1_QUERY_HASH = "dc81a6877c7c51a6a6f406e1fc2a255e44a0d49a20548596e0d583c3eb849c23"; - public final static List<TableColumn> VIEW_1_COLUMNS = List.of(TableColumn.builder() - .id(COLUMN_2_1_ID) - .ordinalPosition(COLUMN_2_1_ORDINALPOS) - .table(TABLE_2) - .name(COLUMN_2_1_NAME) - .internalName(COLUMN_2_1_INTERNAL_NAME) - .columnType(COLUMN_2_1_TYPE) - .isNullAllowed(COLUMN_2_1_NULL) - .autoGenerated(COLUMN_2_1_AUTO_GENERATED) - .isPrimaryKey(COLUMN_2_1_PRIMARY) - .enums(COLUMN_2_1_ENUM_VALUES) - .sets(COLUMN_2_1_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_2_2_ID) - .ordinalPosition(COLUMN_2_2_ORDINALPOS) - .table(TABLE_2) - .name(COLUMN_2_2_NAME) - .internalName(COLUMN_2_2_INTERNAL_NAME) - .columnType(COLUMN_2_2_TYPE) - .isNullAllowed(COLUMN_2_2_NULL) - .autoGenerated(COLUMN_2_2_AUTO_GENERATED) - .isPrimaryKey(COLUMN_2_2_PRIMARY) - .enums(COLUMN_2_2_ENUM_VALUES) - .sets(COLUMN_2_2_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_2_3_ID) - .ordinalPosition(COLUMN_2_3_ORDINALPOS) - .table(TABLE_2) - .name(COLUMN_2_3_NAME) - .internalName(COLUMN_2_3_INTERNAL_NAME) - .columnType(COLUMN_2_3_TYPE) - .isNullAllowed(COLUMN_2_3_NULL) - .autoGenerated(COLUMN_2_3_AUTO_GENERATED) - .isPrimaryKey(COLUMN_2_3_PRIMARY) - .enums(COLUMN_2_3_ENUM_VALUES) - .sets(COLUMN_2_3_SET_VALUES) - .build()); + public final static List<TableColumn> VIEW_1_COLUMNS = List.of( + TABLE_2_COLUMNS.get(0), + TABLE_2_COLUMNS.get(1), + TABLE_2_COLUMNS.get(2) + ); - public final static List<ColumnDto> VIEW_1_COLUMNS_DTO = List.of(ColumnDto.builder() - .id(COLUMN_2_1_ID) - .databaseId(DATABASE_1_ID) - .tableId(TABLE_2_ID) - .name(COLUMN_2_1_NAME) - .internalName(COLUMN_2_1_INTERNAL_NAME) - .columnType(COLUMN_2_1_TYPE_DTO) - .dateFormat(null) - .isNullAllowed(COLUMN_2_1_NULL) - .autoGenerated(COLUMN_2_1_AUTO_GENERATED) - .isPrimaryKey(COLUMN_2_1_PRIMARY) - .enums(COLUMN_2_1_ENUM_VALUES_DTO) - .sets(COLUMN_2_1_SET_VALUES_DTO) - .build(), - ColumnDto.builder() - .id(COLUMN_2_2_ID) - .databaseId(DATABASE_1_ID) - .tableId(TABLE_2_ID) - .name(COLUMN_2_2_NAME) - .internalName(COLUMN_2_2_INTERNAL_NAME) - .columnType(COLUMN_2_2_TYPE_DTO) - .dateFormat(null) - .isNullAllowed(COLUMN_2_2_NULL) - .autoGenerated(COLUMN_2_2_AUTO_GENERATED) - .isPrimaryKey(COLUMN_2_2_PRIMARY) - .enums(COLUMN_2_2_ENUM_VALUES_DTO) - .sets(COLUMN_2_2_SET_VALUES_DTO) - .build(), - ColumnDto.builder() - .id(COLUMN_2_3_ID) - .databaseId(DATABASE_1_ID) - .tableId(TABLE_2_ID) - .name(COLUMN_2_3_NAME) - .internalName(COLUMN_2_3_INTERNAL_NAME) - .columnType(COLUMN_2_3_TYPE_DTO) - .dateFormat(null) - .isNullAllowed(COLUMN_2_3_NULL) - .autoGenerated(COLUMN_2_3_AUTO_GENERATED) - .isPrimaryKey(COLUMN_2_3_PRIMARY) - .enums(COLUMN_2_3_ENUM_VALUES_DTO) - .sets(COLUMN_2_3_SET_VALUES_DTO) - .build()); + public final static List<ColumnDto> VIEW_1_COLUMNS_DTO = List.of( + TABLE_2_COLUMNS_DTO.get(0), + TABLE_2_COLUMNS_DTO.get(1), + TABLE_2_COLUMNS_DTO.get(2) + ); public final static View VIEW_1 = View.builder() .id(VIEW_1_ID) @@ -5188,6 +4743,18 @@ public abstract class BaseTest { .columns(VIEW_1_COLUMNS_DTO) .build(); + public final static ViewBriefDto VIEW_1_BRIEF_DTO = ViewBriefDto.builder() + .id(VIEW_1_ID) + .isInitialView(VIEW_1_INITIAL_VIEW) + .name(VIEW_1_NAME) + .internalName(VIEW_1_INTERNAL_NAME) + .vdbid(VIEW_1_DATABASE_ID) + .isPublic(VIEW_1_PUBLIC) + .createdBy(USER_1_ID) + .query(VIEW_1_QUERY) + .queryHash(VIEW_1_QUERY_HASH) + .build(); + public final static ViewCreateDto VIEW_1_CREATE_DTO = ViewCreateDto.builder() .isPublic(VIEW_1_PUBLIC) .name(VIEW_1_NAME) @@ -5204,60 +4771,19 @@ public abstract class BaseTest { public final static String VIEW_2_QUERY = "select `date`, `location` as loc, `rainfall`, `mintemp` from `weather_aus` where `location` = 'Albury'"; public final static String VIEW_2_QUERY_HASH = "987fc946772ffb6d85060262dcb5df419692a1f6772ea995e3dedb53c191e984"; - public final static List<TableColumn> VIEW_2_COLUMNS = List.of(TableColumn.builder() - .id(COLUMN_1_2_ID) - .ordinalPosition(COLUMN_1_2_ORDINALPOS) - .table(TABLE_1) - .dateFormat(COLUMN_1_2_DATE) - .name(COLUMN_1_2_NAME) - .internalName(COLUMN_1_2_INTERNAL_NAME) - .columnType(COLUMN_1_2_TYPE) - .isNullAllowed(COLUMN_1_2_NULL) - .autoGenerated(COLUMN_1_2_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_2_PRIMARY) - .enums(COLUMN_1_2_ENUM_VALUES) - .sets(COLUMN_1_2_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_1_3_ID) - .ordinalPosition(COLUMN_1_3_ORDINALPOS) - .table(TABLE_1) - .name(COLUMN_1_3_NAME) - .alias("loc") - .internalName(COLUMN_1_3_INTERNAL_NAME) - .columnType(COLUMN_1_3_TYPE) - .isNullAllowed(COLUMN_1_3_NULL) - .autoGenerated(COLUMN_1_3_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_3_PRIMARY) - .enums(COLUMN_1_3_ENUM_VALUES) - .sets(COLUMN_1_3_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_1_5_ID) - .ordinalPosition(COLUMN_1_5_ORDINALPOS) - .table(TABLE_1) - .name(COLUMN_1_5_NAME) - .internalName(COLUMN_1_5_INTERNAL_NAME) - .columnType(COLUMN_1_5_TYPE) - .isNullAllowed(COLUMN_1_5_NULL) - .autoGenerated(COLUMN_1_5_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_5_PRIMARY) - .enums(COLUMN_1_5_ENUM_VALUES) - .sets(COLUMN_1_5_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_1_4_ID) - .ordinalPosition(COLUMN_1_4_ORDINALPOS) - .table(TABLE_1) - .name(COLUMN_1_4_NAME) - .internalName(COLUMN_1_4_INTERNAL_NAME) - .columnType(COLUMN_1_4_TYPE) - .isNullAllowed(COLUMN_1_4_NULL) - .autoGenerated(COLUMN_1_4_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_4_PRIMARY) - .enums(COLUMN_1_4_ENUM_VALUES) - .sets(COLUMN_1_4_SET_VALUES) - .build()); + public final static List<TableColumn> VIEW_2_COLUMNS = List.of( + TABLE_1_COLUMNS.get(1), + TABLE_1_COLUMNS.get(2), + TABLE_1_COLUMNS.get(4), + TABLE_1_COLUMNS.get(3) + ); + + public final static List<ColumnDto> VIEW_2_COLUMNS_DTO = List.of( + TABLE_1_COLUMNS_DTO.get(1), + TABLE_1_COLUMNS_DTO.get(2), + TABLE_1_COLUMNS_DTO.get(4), + TABLE_1_COLUMNS_DTO.get(3) + ); public final static View VIEW_2 = View.builder() .id(VIEW_2_ID) @@ -5273,6 +4799,19 @@ public abstract class BaseTest { .build(); public final static ViewDto VIEW_2_DTO = ViewDto.builder() + .id(VIEW_2_ID) + .isInitialView(VIEW_2_INITIAL_VIEW) + .name(VIEW_2_NAME) + .internalName(VIEW_2_INTERNAL_NAME) + .vdbid(VIEW_2_DATABASE_ID) + .isPublic(VIEW_2_PUBLIC) + .columns(VIEW_2_COLUMNS_DTO) + .query(VIEW_2_QUERY) + .queryHash(VIEW_2_QUERY_HASH) + .createdBy(USER_1_ID) + .build(); + + public final static ViewBriefDto VIEW_2_BRIEF_DTO = ViewBriefDto.builder() .id(VIEW_2_ID) .isInitialView(VIEW_2_INITIAL_VIEW) .name(VIEW_2_NAME) @@ -5294,109 +4833,19 @@ public abstract class BaseTest { public final static String VIEW_3_QUERY = "select w.`mintemp`, w.`rainfall`, w.`location`, m.`date` from `weather_aus` w join `junit2` m on m.`location` = w.`location` and m.`date` = w.`date`"; public final static String VIEW_3_QUERY_HASH = "bbbaa56a5206b3dc3e6cf9301b0db9344eb6f19b100c7b88550ffb597a0bd255"; - public final static List<TableColumn> VIEW_3_COLUMNS = List.of(TableColumn.builder() - .id(COLUMN_1_4_ID) - .ordinalPosition(COLUMN_1_4_ORDINALPOS) - .table(TABLE_1) - .name(COLUMN_1_4_NAME) - .internalName(COLUMN_1_4_INTERNAL_NAME) - .columnType(COLUMN_1_4_TYPE) - .isNullAllowed(COLUMN_1_4_NULL) - .autoGenerated(COLUMN_1_4_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_4_PRIMARY) - .enums(COLUMN_1_4_ENUM_VALUES) - .sets(COLUMN_1_4_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_1_5_ID) - .ordinalPosition(COLUMN_1_5_ORDINALPOS) - .table(TABLE_1) - .name(COLUMN_1_5_NAME) - .internalName(COLUMN_1_5_INTERNAL_NAME) - .columnType(COLUMN_1_5_TYPE) - .isNullAllowed(COLUMN_1_5_NULL) - .autoGenerated(COLUMN_1_5_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_5_PRIMARY) - .enums(COLUMN_1_5_ENUM_VALUES) - .sets(COLUMN_1_5_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_1_3_ID) - .ordinalPosition(COLUMN_1_3_ORDINALPOS) - .table(TABLE_1) - .name(COLUMN_1_3_NAME) - .internalName(COLUMN_1_3_INTERNAL_NAME) - .columnType(COLUMN_1_3_TYPE) - .isNullAllowed(COLUMN_1_3_NULL) - .autoGenerated(COLUMN_1_3_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_3_PRIMARY) - .enums(COLUMN_1_3_ENUM_VALUES) - .sets(COLUMN_1_3_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_1_2_ID) - .ordinalPosition(COLUMN_1_2_ORDINALPOS) - .table(TABLE_1) - .dateFormat(COLUMN_1_2_DATE) - .name(COLUMN_1_2_NAME) - .internalName(COLUMN_1_2_INTERNAL_NAME) - .columnType(COLUMN_1_2_TYPE) - .isNullAllowed(COLUMN_1_2_NULL) - .autoGenerated(COLUMN_1_2_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_2_PRIMARY) - .enums(COLUMN_1_2_ENUM_VALUES) - .sets(COLUMN_1_2_SET_VALUES) - .build()); + public final static List<TableColumn> VIEW_3_COLUMNS = List.of( + TABLE_1_COLUMNS.get(3), + TABLE_1_COLUMNS.get(4), + TABLE_1_COLUMNS.get(2), + TABLE_1_COLUMNS.get(1) + ); - public final static List<ColumnDto> VIEW_3_COLUMNS_DTO = List.of(ColumnDto.builder() - .id(COLUMN_1_4_ID) - .tableId(TABLE_1_ID) - .name(COLUMN_1_4_NAME) - .internalName(COLUMN_1_4_INTERNAL_NAME) - .columnType(COLUMN_1_4_TYPE_DTO) - .isNullAllowed(COLUMN_1_4_NULL) - .autoGenerated(COLUMN_1_4_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_4_PRIMARY) - .enums(COLUMN_1_4_ENUM_VALUES_DTO) - .sets(COLUMN_1_4_SET_VALUES_DTO) - .build(), - ColumnDto.builder() - .id(COLUMN_1_5_ID) - .tableId(TABLE_1_ID) - .name(COLUMN_1_5_NAME) - .internalName(COLUMN_1_5_INTERNAL_NAME) - .columnType(COLUMN_1_5_TYPE_DTO) - .isNullAllowed(COLUMN_1_5_NULL) - .autoGenerated(COLUMN_1_5_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_5_PRIMARY) - .enums(COLUMN_1_5_ENUM_VALUES_DTO) - .sets(COLUMN_1_5_SET_VALUES_DTO) - .build(), - ColumnDto.builder() - .id(COLUMN_1_3_ID) - .tableId(TABLE_1_ID) - .name(COLUMN_1_3_NAME) - .internalName(COLUMN_1_3_INTERNAL_NAME) - .columnType(COLUMN_1_3_TYPE_DTO) - .isNullAllowed(COLUMN_1_3_NULL) - .autoGenerated(COLUMN_1_3_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_3_PRIMARY) - .enums(COLUMN_1_3_ENUM_VALUES_DTO) - .sets(COLUMN_1_3_SET_VALUES_DTO) - .build(), - ColumnDto.builder() - .id(COLUMN_1_2_ID) - .tableId(TABLE_1_ID) - .dateFormat(IMAGE_DATE_1_DTO) - .name(COLUMN_1_2_NAME) - .internalName(COLUMN_1_2_INTERNAL_NAME) - .columnType(COLUMN_1_2_TYPE_DTO) - .isNullAllowed(COLUMN_1_2_NULL) - .autoGenerated(COLUMN_1_2_AUTO_GENERATED) - .isPrimaryKey(COLUMN_1_2_PRIMARY) - .enums(COLUMN_1_2_ENUM_VALUES_DTO) - .sets(COLUMN_1_2_SET_VALUES_DTO) - .build()); + public final static List<ColumnDto> VIEW_3_COLUMNS_DTO = List.of( + TABLE_1_COLUMNS_DTO.get(3), + TABLE_1_COLUMNS_DTO.get(4), + TABLE_1_COLUMNS_DTO.get(2), + TABLE_1_COLUMNS_DTO.get(1) + ); public final static View VIEW_3 = View.builder() .id(VIEW_3_ID) @@ -5424,240 +4873,69 @@ public abstract class BaseTest { .createdBy(USER_1_ID) .build(); + public final static ViewBriefDto VIEW_3_BRIEF_DTO = ViewBriefDto.builder() + .id(VIEW_3_ID) + .isInitialView(VIEW_3_INITIAL_VIEW) + .name(VIEW_3_NAME) + .internalName(VIEW_3_INTERNAL_NAME) + .vdbid(VIEW_3_DATABASE_ID) + .isPublic(VIEW_3_PUBLIC) + .query(VIEW_3_QUERY) + .queryHash(VIEW_3_QUERY_HASH) + .createdBy(USER_1_ID) + .build(); + public final static Long VIEW_4_ID = 4L; public final static Boolean VIEW_4_INITIAL_VIEW = false; public final static String VIEW_4_NAME = "Mock View"; public final static String VIEW_4_INTERNAL_NAME = "mock_view"; public final static Long VIEW_4_CONTAINER_ID = CONTAINER_2_ID; public final static Long VIEW_4_DATABASE_ID = DATABASE_2_ID; - public final static Database VIEW_4_DATABASE = DATABASE_2; - public final static Long VIEW_4_TABLE_ID = TABLE_4_ID; - public final static Table VIEW_4_TABLE = TABLE_4; + public final static Long VIEW_4_TABLE_ID = TABLE_5_ID; + public final static Table VIEW_4_TABLE = TABLE_5; public final static Boolean VIEW_4_PUBLIC = true; public final static String VIEW_4_QUERY = "SELECT `animal_name`, `hair`, `feathers`, `eggs`, `milk`, `airborne`, `aquatic`, `predator`, `backbone`, `breathes`, `venomous`, `fins`, `legs`, `tail`, `domestic`, `catsize`, `class_type` FROM `zoo` WHERE `class_type` = 1"; public final static String VIEW_4_QUERY_HASH = "3561cd0bb0b0e94d6f15ae602134252a5760d09d660a71a4fb015b6991c8ba0b"; - public final static List<TableColumn> VIEW_4_COLUMNS = List.of(TableColumn.builder() - .id(COLUMN_4_2_ID) - .ordinalPosition(COLUMN_4_2_ORDINALPOS) - .table(VIEW_4_TABLE) - .name(COLUMN_4_2_NAME) - .internalName(COLUMN_4_2_INTERNAL_NAME) - .columnType(COLUMN_4_2_TYPE) - .isNullAllowed(COLUMN_4_2_NULL) - .autoGenerated(COLUMN_4_2_AUTO_GENERATED) - .isPrimaryKey(COLUMN_4_2_PRIMARY) - .enums(COLUMN_4_2_ENUM_VALUES) - .sets(COLUMN_4_2_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_4_3_ID) - .ordinalPosition(COLUMN_4_3_ORDINALPOS) - .table(VIEW_4_TABLE) - .name(COLUMN_4_3_NAME) - .internalName(COLUMN_4_3_INTERNAL_NAME) - .columnType(COLUMN_4_3_TYPE) - .isNullAllowed(COLUMN_4_3_NULL) - .autoGenerated(COLUMN_4_3_AUTO_GENERATED) - .isPrimaryKey(COLUMN_4_3_PRIMARY) - .enums(COLUMN_4_3_ENUM_VALUES) - .sets(COLUMN_4_3_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_4_4_ID) - .ordinalPosition(COLUMN_4_4_ORDINALPOS) - .table(VIEW_4_TABLE) - .name(COLUMN_4_4_NAME) - .internalName(COLUMN_4_4_INTERNAL_NAME) - .columnType(COLUMN_4_4_TYPE) - .isNullAllowed(COLUMN_4_4_NULL) - .autoGenerated(COLUMN_4_4_AUTO_GENERATED) - .isPrimaryKey(COLUMN_4_4_PRIMARY) - .enums(COLUMN_4_4_ENUM_VALUES) - .sets(COLUMN_4_4_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_4_6_ID) - .ordinalPosition(COLUMN_4_6_ORDINALPOS) - .table(VIEW_4_TABLE) - .name(COLUMN_4_6_NAME) - .internalName(COLUMN_4_6_INTERNAL_NAME) - .columnType(COLUMN_4_6_TYPE) - .isNullAllowed(COLUMN_4_6_NULL) - .autoGenerated(COLUMN_4_6_AUTO_GENERATED) - .isPrimaryKey(COLUMN_4_6_PRIMARY) - .enums(COLUMN_4_6_ENUM_VALUES) - .sets(COLUMN_4_6_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_4_7_ID) - .ordinalPosition(COLUMN_4_7_ORDINALPOS) - .table(VIEW_4_TABLE) - .name(COLUMN_4_7_NAME) - .internalName(COLUMN_4_7_INTERNAL_NAME) - .columnType(COLUMN_4_7_TYPE) - .isNullAllowed(COLUMN_4_7_NULL) - .autoGenerated(COLUMN_4_7_AUTO_GENERATED) - .isPrimaryKey(COLUMN_4_7_PRIMARY) - .enums(COLUMN_4_7_ENUM_VALUES) - .sets(COLUMN_4_7_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_4_9_ID) - .ordinalPosition(COLUMN_4_9_ORDINALPOS) - .table(VIEW_4_TABLE) - .name(COLUMN_4_9_NAME) - .internalName(COLUMN_4_9_INTERNAL_NAME) - .columnType(COLUMN_4_9_TYPE) - .isNullAllowed(COLUMN_4_9_NULL) - .autoGenerated(COLUMN_4_9_AUTO_GENERATED) - .isPrimaryKey(COLUMN_4_9_PRIMARY) - .enums(COLUMN_4_9_ENUM_VALUES) - .sets(COLUMN_4_9_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_4_11_ID) - .ordinalPosition(COLUMN_4_11_ORDINALPOS) - .table(VIEW_4_TABLE) - .name(COLUMN_4_11_NAME) - .internalName(COLUMN_4_11_INTERNAL_NAME) - .columnType(COLUMN_4_11_TYPE) - .isNullAllowed(COLUMN_4_11_NULL) - .autoGenerated(COLUMN_4_11_AUTO_GENERATED) - .isPrimaryKey(COLUMN_4_11_PRIMARY) - .enums(COLUMN_4_11_ENUM_VALUES) - .sets(COLUMN_4_11_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_4_12_ID) - .ordinalPosition(COLUMN_4_12_ORDINALPOS) - .table(VIEW_4_TABLE) - .name(COLUMN_4_12_NAME) - .internalName(COLUMN_4_12_INTERNAL_NAME) - .columnType(COLUMN_4_12_TYPE) - .isNullAllowed(COLUMN_4_12_NULL) - .autoGenerated(COLUMN_4_12_AUTO_GENERATED) - .isPrimaryKey(COLUMN_4_12_PRIMARY) - .enums(COLUMN_4_12_ENUM_VALUES) - .sets(COLUMN_4_12_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_4_13_ID) - .ordinalPosition(COLUMN_4_13_ORDINALPOS) - .table(VIEW_4_TABLE) - .name(COLUMN_4_13_NAME) - .internalName(COLUMN_4_13_INTERNAL_NAME) - .columnType(COLUMN_4_13_TYPE) - .isNullAllowed(COLUMN_4_13_NULL) - .autoGenerated(COLUMN_4_13_AUTO_GENERATED) - .isPrimaryKey(COLUMN_4_13_PRIMARY) - .enums(COLUMN_4_13_ENUM_VALUES) - .sets(COLUMN_4_13_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_4_14_ID) - .ordinalPosition(COLUMN_4_14_ORDINALPOS) - .table(VIEW_4_TABLE) - .name(COLUMN_4_14_NAME) - .internalName(COLUMN_4_14_INTERNAL_NAME) - .columnType(COLUMN_4_14_TYPE) - .isNullAllowed(COLUMN_4_14_NULL) - .autoGenerated(COLUMN_4_14_AUTO_GENERATED) - .isPrimaryKey(COLUMN_4_14_PRIMARY) - .enums(COLUMN_4_14_ENUM_VALUES) - .sets(COLUMN_4_14_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_4_15_ID) - .ordinalPosition(COLUMN_4_15_ORDINALPOS) - .table(VIEW_4_TABLE) - .name(COLUMN_4_15_NAME) - .internalName(COLUMN_4_15_INTERNAL_NAME) - .columnType(COLUMN_4_15_TYPE) - .isNullAllowed(COLUMN_4_15_NULL) - .autoGenerated(COLUMN_4_15_AUTO_GENERATED) - .isPrimaryKey(COLUMN_4_15_PRIMARY) - .enums(COLUMN_4_15_ENUM_VALUES) - .sets(COLUMN_4_15_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_4_16_ID) - .ordinalPosition(COLUMN_4_16_ORDINALPOS) - .table(VIEW_4_TABLE) - .name(COLUMN_4_16_NAME) - .internalName(COLUMN_4_16_INTERNAL_NAME) - .columnType(COLUMN_4_16_TYPE) - .isNullAllowed(COLUMN_4_16_NULL) - .autoGenerated(COLUMN_4_16_AUTO_GENERATED) - .isPrimaryKey(COLUMN_4_16_PRIMARY) - .enums(COLUMN_4_16_ENUM_VALUES) - .sets(COLUMN_4_16_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_4_17_ID) - .ordinalPosition(COLUMN_4_17_ORDINALPOS) - .table(VIEW_4_TABLE) - .name(COLUMN_4_17_NAME) - .internalName(COLUMN_4_17_INTERNAL_NAME) - .columnType(COLUMN_4_17_TYPE) - .isNullAllowed(COLUMN_4_17_NULL) - .autoGenerated(COLUMN_4_17_AUTO_GENERATED) - .isPrimaryKey(COLUMN_4_17_PRIMARY) - .enums(COLUMN_4_17_ENUM_VALUES) - .sets(COLUMN_4_17_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_4_18_ID) - .ordinalPosition(COLUMN_4_18_ORDINALPOS) - .table(VIEW_4_TABLE) - .name(COLUMN_4_18_NAME) - .internalName(COLUMN_4_18_INTERNAL_NAME) - .columnType(COLUMN_4_18_TYPE) - .isNullAllowed(COLUMN_4_18_NULL) - .autoGenerated(COLUMN_4_18_AUTO_GENERATED) - .isPrimaryKey(COLUMN_4_18_PRIMARY) - .enums(COLUMN_4_18_ENUM_VALUES) - .sets(COLUMN_4_18_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_4_19_ID) - .ordinalPosition(COLUMN_4_19_ORDINALPOS) - .table(VIEW_4_TABLE) - .name(COLUMN_4_19_NAME) - .internalName(COLUMN_4_19_INTERNAL_NAME) - .columnType(COLUMN_4_19_TYPE) - .isNullAllowed(COLUMN_4_19_NULL) - .autoGenerated(COLUMN_4_19_AUTO_GENERATED) - .isPrimaryKey(COLUMN_4_19_PRIMARY) - .enums(COLUMN_4_19_ENUM_VALUES) - .sets(COLUMN_4_19_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_4_20_ID) - .ordinalPosition(COLUMN_4_20_ORDINALPOS) - .table(VIEW_4_TABLE) - .name(COLUMN_4_20_NAME) - .internalName(COLUMN_4_20_INTERNAL_NAME) - .columnType(COLUMN_4_20_TYPE) - .isNullAllowed(COLUMN_4_20_NULL) - .autoGenerated(COLUMN_4_20_AUTO_GENERATED) - .isPrimaryKey(COLUMN_4_20_PRIMARY) - .enums(COLUMN_4_20_ENUM_VALUES) - .sets(COLUMN_4_20_SET_VALUES) - .build(), - TableColumn.builder() - .id(COLUMN_4_21_ID) - .ordinalPosition(COLUMN_4_21_ORDINALPOS) - .table(VIEW_4_TABLE) - .name(COLUMN_4_21_NAME) - .internalName(COLUMN_4_21_INTERNAL_NAME) - .columnType(COLUMN_4_21_TYPE) - .isNullAllowed(COLUMN_4_21_NULL) - .autoGenerated(COLUMN_4_21_AUTO_GENERATED) - .isPrimaryKey(COLUMN_4_21_PRIMARY) - .enums(COLUMN_4_21_ENUM_VALUES) - .sets(COLUMN_4_21_SET_VALUES) - .build()); + public final static List<TableColumn> VIEW_4_COLUMNS = List.of( + TABLE_5_COLUMNS.get(1), + TABLE_5_COLUMNS.get(2), + TABLE_5_COLUMNS.get(3), + TABLE_5_COLUMNS.get(5), + TABLE_5_COLUMNS.get(6), + TABLE_5_COLUMNS.get(8), + TABLE_5_COLUMNS.get(10), + TABLE_5_COLUMNS.get(11), + TABLE_5_COLUMNS.get(12), + TABLE_5_COLUMNS.get(13), + TABLE_5_COLUMNS.get(14), + TABLE_5_COLUMNS.get(15), + TABLE_5_COLUMNS.get(16), + TABLE_5_COLUMNS.get(17), + TABLE_5_COLUMNS.get(18), + TABLE_5_COLUMNS.get(19), + TABLE_5_COLUMNS.get(20) + ); + + public final static List<ColumnDto> VIEW_4_COLUMNS_DTO = List.of( + TABLE_5_COLUMNS_DTO.get(1), + TABLE_5_COLUMNS_DTO.get(2), + TABLE_5_COLUMNS_DTO.get(3), + TABLE_5_COLUMNS_DTO.get(5), + TABLE_5_COLUMNS_DTO.get(6), + TABLE_5_COLUMNS_DTO.get(8), + TABLE_5_COLUMNS_DTO.get(10), + TABLE_5_COLUMNS_DTO.get(11), + TABLE_5_COLUMNS_DTO.get(12), + TABLE_5_COLUMNS_DTO.get(13), + TABLE_5_COLUMNS_DTO.get(14), + TABLE_5_COLUMNS_DTO.get(15), + TABLE_5_COLUMNS_DTO.get(16), + TABLE_5_COLUMNS_DTO.get(17), + TABLE_5_COLUMNS_DTO.get(18), + TABLE_5_COLUMNS_DTO.get(19), + TABLE_5_COLUMNS_DTO.get(20) + ); public final static View VIEW_4 = View.builder() .id(VIEW_4_ID) @@ -5672,6 +4950,19 @@ public abstract class BaseTest { .columns(VIEW_4_COLUMNS) .build(); + public final static ViewDto VIEW_4_DTO = ViewDto.builder() + .id(VIEW_4_ID) + .isInitialView(VIEW_4_INITIAL_VIEW) + .name(VIEW_4_NAME) + .internalName(VIEW_4_INTERNAL_NAME) + .vdbid(VIEW_4_DATABASE_ID) + .isPublic(VIEW_4_PUBLIC) + .query(VIEW_4_QUERY) + .queryHash(VIEW_4_QUERY_HASH) + .createdBy(USER_1_ID) + .columns(VIEW_4_COLUMNS_DTO) + .build(); + public final static Long VIEW_5_ID = 5L; public final static Boolean VIEW_5_INITIAL_VIEW = false; public final static String VIEW_5_NAME = "Mock View"; @@ -5746,8 +5037,8 @@ public abstract class BaseTest { public final static String CREATOR_1_FIRSTNAME = "Max"; public final static String CREATOR_1_LASTNAME = "Mustermann"; public final static String CREATOR_1_NAME = CREATOR_1_LASTNAME + ", " + CREATOR_1_FIRSTNAME; - public final static Instant CREATOR_1_CREATED = Instant.ofEpochSecond(1641588352); - public final static Instant CREATOR_1_MODIFIED = Instant.ofEpochSecond(1541588352); + public final static Instant CREATOR_1_CREATED = Instant.ofEpochSecond(1641588352L); + public final static Instant CREATOR_1_MODIFIED = Instant.ofEpochSecond(1541588352L); public final static OrcidDto ORCID_1_DTO = OrcidDto.builder() .person(OrcidPersonDto.builder() @@ -5786,8 +5077,8 @@ public abstract class BaseTest { public final static String CREATOR_2_FIRSTNAME = "Martina"; public final static String CREATOR_2_LASTNAME = "Mustermann"; public final static String CREATOR_2_NAME = CREATOR_2_LASTNAME + ", " + CREATOR_2_FIRSTNAME; - public final static Instant CREATOR_2_CREATED = Instant.ofEpochSecond(1641588352); - public final static Instant CREATOR_2_MODIFIED = Instant.ofEpochSecond(1541588352); + public final static Instant CREATOR_2_CREATED = Instant.ofEpochSecond(1641588352L); + public final static Instant CREATOR_2_MODIFIED = Instant.ofEpochSecond(1541588352L); public final static Long CREATOR_3_ID = 3L; public final static Long CREATOR_3_QUERY_ID = 1L; @@ -5798,8 +5089,8 @@ public abstract class BaseTest { public final static String CREATOR_3_FIRSTNAME = "Max"; public final static String CREATOR_3_LASTNAME = "Mustermann"; public final static String CREATOR_3_NAME = CREATOR_3_LASTNAME + ", " + CREATOR_3_FIRSTNAME; - public final static Instant CREATOR_3_CREATED = Instant.ofEpochSecond(1641588352); - public final static Instant CREATOR_3_MODIFIED = Instant.ofEpochSecond(1541588352); + public final static Instant CREATOR_3_CREATED = Instant.ofEpochSecond(1641588352L); + public final static Instant CREATOR_3_MODIFIED = Instant.ofEpochSecond(1541588352L); public final static Long CREATOR_4_ID = 4L; public final static Long CREATOR_4_QUERY_ID = 1L; @@ -5812,18 +5103,18 @@ public abstract class BaseTest { public final static String CREATOR_4_FIRSTNAME = "Martina"; public final static String CREATOR_4_LASTNAME = "Mustermann"; public final static String CREATOR_4_NAME = CREATOR_4_LASTNAME + ", " + CREATOR_4_FIRSTNAME; - public final static Instant CREATOR_4_CREATED = Instant.ofEpochSecond(1641588352); - public final static Instant CREATOR_4_MODIFIED = Instant.ofEpochSecond(1541588352); + public final static Instant CREATOR_4_CREATED = Instant.ofEpochSecond(1641588352L); + public final static Instant CREATOR_4_MODIFIED = Instant.ofEpochSecond(1541588352L); public final static Long IDENTIFIER_1_ID = 1L; - public final static Long IDENTIFIER_1_QUERY_ID = QUERY_1_ID; + public final static Long IDENTIFIER_1_QUERY_ID = null; public final static Long IDENTIFIER_1_CONTAINER_ID = CONTAINER_1_ID; public final static Long IDENTIFIER_1_DATABASE_ID = DATABASE_1_ID; public final static String IDENTIFIER_1_DOI = null; public final static String IDENTIFIER_1_DOI_NOT_NULL = "10.1000/183"; - public final static Instant IDENTIFIER_1_CREATED = Instant.ofEpochSecond(1641588352) /* 2022-01-07 20:45:52 */; - public final static Instant IDENTIFIER_1_MODIFIED = Instant.ofEpochSecond(1541588352) /* 2022-01-07 20:45:52 */; - public final static Instant IDENTIFIER_1_EXECUTION = Instant.ofEpochSecond(1541588352) /* 2022-01-07 20:45:52 */; + public final static Instant IDENTIFIER_1_CREATED = Instant.ofEpochSecond(1641588352L) /* 2022-01-07 20:45:52 */; + public final static Instant IDENTIFIER_1_MODIFIED = Instant.ofEpochSecond(1541588352L) /* 2022-01-07 20:45:52 */; + public final static Instant IDENTIFIER_1_EXECUTION = Instant.ofEpochSecond(1541588352L) /* 2022-01-07 20:45:52 */; public final static Integer IDENTIFIER_1_PUBLICATION_MONTH = 5; public final static Integer IDENTIFIER_1_PUBLICATION_YEAR = 2022; public final static Integer IDENTIFIER_1_PUBLICATION_DAY = null; @@ -5836,8 +5127,6 @@ public abstract class BaseTest { public final static IdentifierType IDENTIFIER_1_TYPE = IdentifierType.DATABASE; public final static IdentifierTypeDto IDENTIFIER_1_TYPE_DTO = IdentifierTypeDto.DATABASE; public final static UUID IDENTIFIER_1_CREATED_BY = USER_1_ID; - public final static VisibilityType IDENTIFIER_1_VISIBILITY = VisibilityType.EVERYONE; - public final static VisibilityTypeDto IDENTIFIER_1_VISIBILITY_DTO = VisibilityTypeDto.EVERYONE; public final static Long IDENTIFIER_1_TITLE_1_ID = 1L; public final static Long IDENTIFIER_1_TITLE_1_IDENTIFIER_ID = IDENTIFIER_1_ID; @@ -6045,7 +5334,7 @@ public abstract class BaseTest { .titles(List.of(IDENTIFIER_1_TITLE_1, IDENTIFIER_1_TITLE_2)) .descriptions(List.of(IDENTIFIER_1_DESCRIPTION_1)) .doi(IDENTIFIER_1_DOI) - .database(DATABASE_1_SIMPLE) + .database(null /* DATABASE_1 */) .created(IDENTIFIER_1_CREATED) .lastModified(IDENTIFIER_1_MODIFIED) .execution(IDENTIFIER_1_EXECUTION) @@ -6062,34 +5351,6 @@ public abstract class BaseTest { .licenses(List.of(LICENSE_1)) .creators(List.of(IDENTIFIER_1_CREATOR_1)) .funders(List.of(IDENTIFIER_1_FUNDER_1)) - .visibility(IDENTIFIER_1_VISIBILITY) - .build(); - - public final static Identifier IDENTIFIER_1_SIMPLE = Identifier.builder() - .id(IDENTIFIER_1_ID) - .databaseId(DATABASE_1_ID) - .queryId(IDENTIFIER_1_QUERY_ID) - .descriptions(List.of() /* for jpa */) - .titles(List.of() /* for jpa */) - .doi(IDENTIFIER_1_DOI) - .database(null /* for jpa */) - .created(IDENTIFIER_1_CREATED) - .lastModified(IDENTIFIER_1_MODIFIED) - .execution(IDENTIFIER_1_EXECUTION) - .publicationYear(IDENTIFIER_1_PUBLICATION_YEAR) - .publicationMonth(IDENTIFIER_1_PUBLICATION_MONTH) - .queryHash(IDENTIFIER_1_QUERY_HASH) - .resultHash(IDENTIFIER_1_RESULT_HASH) - .query(IDENTIFIER_1_QUERY) - .queryNormalized(IDENTIFIER_1_NORMALIZED) - .resultNumber(IDENTIFIER_1_RESULT_NUMBER) - .publisher(IDENTIFIER_1_PUBLISHER) - .type(IDENTIFIER_1_TYPE) - .createdBy(USER_1_ID) - .licenses(List.of() /* for jpa */) - .creators(List.of() /* for jpa */) - .funders(List.of() /* for jpa */) - .visibility(IDENTIFIER_1_VISIBILITY) .build(); public final static Identifier IDENTIFIER_1_WITH_DOI = Identifier.builder() @@ -6116,7 +5377,6 @@ public abstract class BaseTest { .licenses(List.of(LICENSE_1)) .creators(List.of(IDENTIFIER_1_CREATOR_1)) .funders(List.of(IDENTIFIER_1_FUNDER_1)) - .visibility(IDENTIFIER_1_VISIBILITY) .build(); public final static IdentifierDto IDENTIFIER_1_DTO = IdentifierDto.builder() @@ -6126,7 +5386,6 @@ public abstract class BaseTest { .descriptions(List.of(IDENTIFIER_1_DESCRIPTION_1_DTO)) .titles(List.of(IDENTIFIER_1_TITLE_1_DTO, IDENTIFIER_1_TITLE_2_DTO)) .doi(IDENTIFIER_1_DOI) - .database(DATABASE_1_DTO) .created(IDENTIFIER_1_CREATED) .lastModified(IDENTIFIER_1_MODIFIED) .execution(IDENTIFIER_1_EXECUTION) @@ -6143,7 +5402,6 @@ public abstract class BaseTest { .licenses(List.of(LICENSE_1_DTO)) .creators(List.of(IDENTIFIER_1_CREATOR_1_DTO)) .funders(List.of(IDENTIFIER_1_FUNDER_1_DTO)) - .visibility(IDENTIFIER_1_VISIBILITY_DTO) .build(); public final static IdentifierDto IDENTIFIER_1_WITH_DOI_DTO = IdentifierDto.builder() @@ -6153,7 +5411,6 @@ public abstract class BaseTest { .descriptions(List.of(IDENTIFIER_1_DESCRIPTION_1_DTO)) .titles(List.of(IDENTIFIER_1_TITLE_1_DTO, IDENTIFIER_1_TITLE_2_DTO)) .doi(IDENTIFIER_1_DOI_NOT_NULL) - .database(DATABASE_1_DTO) .created(IDENTIFIER_1_CREATED) .lastModified(IDENTIFIER_1_MODIFIED) .execution(IDENTIFIER_1_EXECUTION) @@ -6170,7 +5427,6 @@ public abstract class BaseTest { .licenses(List.of(LICENSE_1_DTO)) .creators(List.of(IDENTIFIER_1_CREATOR_1_DTO)) .funders(List.of(IDENTIFIER_1_FUNDER_1_DTO)) - .visibility(IDENTIFIER_1_VISIBILITY_DTO) .build(); @@ -6178,7 +5434,6 @@ public abstract class BaseTest { .id(IDENTIFIER_1_ID) .databaseId(DATABASE_2_ID) .queryId(IDENTIFIER_1_QUERY_ID) - .database(DATABASE_1_DTO) .descriptions(List.of(IDENTIFIER_1_DESCRIPTION_1_DTO_MODIFY)) .titles(List.of(IDENTIFIER_1_TITLE_1_DTO_MODIFY, IDENTIFIER_1_TITLE_2_DTO)) .doi(IDENTIFIER_1_DOI) @@ -6190,7 +5445,6 @@ public abstract class BaseTest { .lastModified(IDENTIFIER_1_MODIFIED) .licenses(List.of(LICENSE_1_DTO)) .creators(List.of(IDENTIFIER_1_CREATOR_1_DTO)) - .visibility(IDENTIFIER_1_VISIBILITY_DTO) .build(); public final static IdentifierSaveDto IDENTIFIER_1_DTO_REQUEST = IdentifierSaveDto.builder() @@ -6204,7 +5458,6 @@ public abstract class BaseTest { .funders(List.of(IDENTIFIER_1_FUNDER_1_CREATE_DTO)) .publisher(IDENTIFIER_1_PUBLISHER) .type(IDENTIFIER_1_TYPE_DTO) - .visibility(IDENTIFIER_1_VISIBILITY_DTO) .licenses(List.of(LICENSE_1_DTO)) .build(); @@ -6218,92 +5471,89 @@ public abstract class BaseTest { .creators(List.of(IDENTIFIER_1_CREATOR_1_MODIFY_DTO)) /* <<<< */ .publisher(IDENTIFIER_1_PUBLISHER) .type(IDENTIFIER_1_TYPE_DTO) - .visibility(IDENTIFIER_1_VISIBILITY_DTO) .licenses(List.of(LICENSE_1_DTO)) .build(); - public final static Long IDENTIFIER_2_ID = 2L; - public final static Long IDENTIFIER_2_QUERY_ID = QUERY_2_ID; - public final static Long IDENTIFIER_2_CONTAINER_ID = CONTAINER_2_ID; - public final static Long IDENTIFIER_2_DATABASE_ID = DATABASE_2_ID; - public final static String IDENTIFIER_2_DOI = "10.4225/13/50BBFCFE08A12"; - public final static Instant IDENTIFIER_2_CREATED = Instant.ofEpochSecond(1641588352); - public final static Instant IDENTIFIER_2_MODIFIED = Instant.ofEpochSecond(1541588352); - public final static Instant IDENTIFIER_2_EXECUTION = Instant.ofEpochSecond(1541588352); - public final static Integer IDENTIFIER_2_PUBLICATION_DAY = 14; - public final static Integer IDENTIFIER_2_PUBLICATION_MONTH = 7; - public final static Integer IDENTIFIER_2_PUBLICATION_YEAR = 2022; - public final static String IDENTIFIER_2_QUERY_HASH = QUERY_2_QUERY_HASH; - public final static String IDENTIFIER_2_RESULT_HASH = QUERY_2_RESULT_HASH; - public final static String IDENTIFIER_2_QUERY = QUERY_2_STATEMENT; - public final static String IDENTIFIER_2_NORMALIZED = QUERY_2_STATEMENT; - public final static Long IDENTIFIER_2_RESULT_NUMBER = QUERY_2_RESULT_NUMBER; - public final static String IDENTIFIER_2_PUBLISHER = "Australian Government"; - public final static IdentifierType IDENTIFIER_2_TYPE = IdentifierType.SUBSET; - public final static IdentifierTypeDto IDENTIFIER_2_TYPE_DTO = IdentifierTypeDto.SUBSET; - public final static VisibilityType IDENTIFIER_2_VISIBILITY = VisibilityType.SELF; - public final static VisibilityTypeDto IDENTIFIER_2_VISIBILITY_DTO = VisibilityTypeDto.SELF; + public final static Long IDENTIFIER_5_ID = 5L; + public final static Long IDENTIFIER_5_QUERY_ID = QUERY_2_ID; + public final static Long IDENTIFIER_5_CONTAINER_ID = CONTAINER_2_ID; + public final static Long IDENTIFIER_5_DATABASE_ID = DATABASE_2_ID; + public final static String IDENTIFIER_5_DOI = "10.4225/13/50BBFCFE08A12"; + public final static Instant IDENTIFIER_5_CREATED = Instant.ofEpochSecond(1641588352L); + public final static Instant IDENTIFIER_5_MODIFIED = Instant.ofEpochSecond(1541588352L); + public final static Instant IDENTIFIER_5_EXECUTION = Instant.ofEpochSecond(1541588352L); + public final static Integer IDENTIFIER_5_PUBLICATION_DAY = 14; + public final static Integer IDENTIFIER_5_PUBLICATION_MONTH = 7; + public final static Integer IDENTIFIER_5_PUBLICATION_YEAR = 2022; + public final static String IDENTIFIER_5_QUERY_HASH = QUERY_2_QUERY_HASH; + public final static String IDENTIFIER_5_RESULT_HASH = QUERY_2_RESULT_HASH; + public final static String IDENTIFIER_5_QUERY = QUERY_2_STATEMENT; + public final static String IDENTIFIER_5_NORMALIZED = QUERY_2_STATEMENT; + public final static Long IDENTIFIER_5_RESULT_NUMBER = QUERY_2_RESULT_NUMBER; + public final static String IDENTIFIER_5_PUBLISHER = "Australian Government"; + public final static IdentifierType IDENTIFIER_5_TYPE = IdentifierType.SUBSET; + public final static IdentifierTypeDto IDENTIFIER_5_TYPE_DTO = IdentifierTypeDto.SUBSET; - public final static Long IDENTIFIER_2_TITLE_1_ID = 2L; - public final static Long IDENTIFIER_2_TITLE_1_IDENTIFIER_ID = IDENTIFIER_2_ID; - public final static String IDENTIFIER_2_TITLE_1_TITLE = "Australische Wetterdaten"; - public final static LanguageType IDENTIFIER_2_TITLE_1_LANG = LanguageType.DE; - public final static LanguageTypeDto IDENTIFIER_2_TITLE_1_LANG_DTO = LanguageTypeDto.DE; - public final static TitleType IDENTIFIER_2_TITLE_1_TYPE = TitleType.SUBTITLE; - public final static TitleTypeDto IDENTIFIER_2_TITLE_1_TYPE_DTO = TitleTypeDto.SUBTITLE; + public final static Long IDENTIFIER_5_TITLE_1_ID = 3L; + public final static Long IDENTIFIER_5_TITLE_1_IDENTIFIER_ID = IDENTIFIER_5_ID; + public final static String IDENTIFIER_5_TITLE_1_TITLE = "Australische Wetterdaten"; + public final static LanguageType IDENTIFIER_5_TITLE_1_LANG = LanguageType.DE; + public final static LanguageTypeDto IDENTIFIER_5_TITLE_1_LANG_DTO = LanguageTypeDto.DE; + public final static TitleType IDENTIFIER_5_TITLE_1_TYPE = TitleType.SUBTITLE; + public final static TitleTypeDto IDENTIFIER_5_TITLE_1_TYPE_DTO = TitleTypeDto.SUBTITLE; - public final static IdentifierTitle IDENTIFIER_2_TITLE_1 = IdentifierTitle.builder() - .id(IDENTIFIER_2_TITLE_1_ID) - .title(IDENTIFIER_2_TITLE_1_TITLE) - .language(IDENTIFIER_2_TITLE_1_LANG) - .titleType(IDENTIFIER_2_TITLE_1_TYPE) + public final static IdentifierTitle IDENTIFIER_5_TITLE_1 = IdentifierTitle.builder() + .id(IDENTIFIER_5_TITLE_1_ID) + .title(IDENTIFIER_5_TITLE_1_TITLE) + .language(IDENTIFIER_5_TITLE_1_LANG) + .titleType(IDENTIFIER_5_TITLE_1_TYPE) .build(); - public final static IdentifierTitleDto IDENTIFIER_2_TITLE_1_DTO = IdentifierTitleDto.builder() - .id(IDENTIFIER_2_TITLE_1_ID) - .title(IDENTIFIER_2_TITLE_1_TITLE) - .language(IDENTIFIER_2_TITLE_1_LANG_DTO) - .titleType(IDENTIFIER_2_TITLE_1_TYPE_DTO) + public final static IdentifierTitleDto IDENTIFIER_5_TITLE_1_DTO = IdentifierTitleDto.builder() + .id(IDENTIFIER_5_TITLE_1_ID) + .title(IDENTIFIER_5_TITLE_1_TITLE) + .language(IDENTIFIER_5_TITLE_1_LANG_DTO) + .titleType(IDENTIFIER_5_TITLE_1_TYPE_DTO) .build(); - public final static IdentifierSaveTitleDto IDENTIFIER_2_TITLE_1_CREATE_DTO = IdentifierSaveTitleDto.builder() - .title(IDENTIFIER_2_TITLE_1_TITLE) - .language(IDENTIFIER_2_TITLE_1_LANG_DTO) - .titleType(IDENTIFIER_2_TITLE_1_TYPE_DTO) + public final static IdentifierSaveTitleDto IDENTIFIER_5_TITLE_1_CREATE_DTO = IdentifierSaveTitleDto.builder() + .title(IDENTIFIER_5_TITLE_1_TITLE) + .language(IDENTIFIER_5_TITLE_1_LANG_DTO) + .titleType(IDENTIFIER_5_TITLE_1_TYPE_DTO) .build(); - public final static Long IDENTIFIER_2_DESCRIPTION_1_ID = 2L; - public final static Long IDENTIFIER_2_DESCRIPTION_1_IDENTIFIER_ID = IDENTIFIER_2_ID; - public final static String IDENTIFIER_2_DESCRIPTION_1_DESCRIPTION = "Alle Wetterdaten in Australien"; - public final static LanguageType IDENTIFIER_2_DESCRIPTION_1_LANG = LanguageType.DE; - public final static LanguageTypeDto IDENTIFIER_2_DESCRIPTION_1_LANG_DTO = LanguageTypeDto.DE; - public final static DescriptionType IDENTIFIER_2_DESCRIPTION_1_TYPE = DescriptionType.ABSTRACT; - public final static DescriptionTypeDto IDENTIFIER_2_DESCRIPTION_1_TYPE_DTO = DescriptionTypeDto.ABSTRACT; + public final static Long IDENTIFIER_5_DESCRIPTION_1_ID = 2L; + public final static Long IDENTIFIER_5_DESCRIPTION_1_IDENTIFIER_ID = IDENTIFIER_5_ID; + public final static String IDENTIFIER_5_DESCRIPTION_1_DESCRIPTION = "Alle Wetterdaten in Australien"; + public final static LanguageType IDENTIFIER_5_DESCRIPTION_1_LANG = LanguageType.DE; + public final static LanguageTypeDto IDENTIFIER_5_DESCRIPTION_1_LANG_DTO = LanguageTypeDto.DE; + public final static DescriptionType IDENTIFIER_5_DESCRIPTION_1_TYPE = DescriptionType.ABSTRACT; + public final static DescriptionTypeDto IDENTIFIER_5_DESCRIPTION_1_TYPE_DTO = DescriptionTypeDto.ABSTRACT; - public final static IdentifierDescription IDENTIFIER_2_DESCRIPTION_1 = IdentifierDescription.builder() - .id(IDENTIFIER_2_DESCRIPTION_1_ID) - .description(IDENTIFIER_2_DESCRIPTION_1_DESCRIPTION) - .language(IDENTIFIER_2_DESCRIPTION_1_LANG) - .descriptionType(IDENTIFIER_2_DESCRIPTION_1_TYPE) + public final static IdentifierDescription IDENTIFIER_5_DESCRIPTION_1 = IdentifierDescription.builder() + .id(IDENTIFIER_5_DESCRIPTION_1_ID) + .description(IDENTIFIER_5_DESCRIPTION_1_DESCRIPTION) + .language(IDENTIFIER_5_DESCRIPTION_1_LANG) + .descriptionType(IDENTIFIER_5_DESCRIPTION_1_TYPE) .build(); - public final static IdentifierDescriptionDto IDENTIFIER_2_DESCRIPTION_1_DTO = IdentifierDescriptionDto.builder() - .id(IDENTIFIER_2_DESCRIPTION_1_ID) - .description(IDENTIFIER_2_DESCRIPTION_1_DESCRIPTION) - .language(IDENTIFIER_2_DESCRIPTION_1_LANG_DTO) - .descriptionType(IDENTIFIER_2_DESCRIPTION_1_TYPE_DTO) + public final static IdentifierDescriptionDto IDENTIFIER_5_DESCRIPTION_1_DTO = IdentifierDescriptionDto.builder() + .id(IDENTIFIER_5_DESCRIPTION_1_ID) + .description(IDENTIFIER_5_DESCRIPTION_1_DESCRIPTION) + .language(IDENTIFIER_5_DESCRIPTION_1_LANG_DTO) + .descriptionType(IDENTIFIER_5_DESCRIPTION_1_TYPE_DTO) .build(); - public final static IdentifierSaveDescriptionDto IDENTIFIER_2_DESCRIPTION_1_CREATE_DTO = IdentifierSaveDescriptionDto.builder() - .description(IDENTIFIER_2_DESCRIPTION_1_DESCRIPTION) - .language(IDENTIFIER_2_DESCRIPTION_1_LANG_DTO) - .descriptionType(IDENTIFIER_2_DESCRIPTION_1_TYPE_DTO) + public final static IdentifierSaveDescriptionDto IDENTIFIER_5_DESCRIPTION_1_CREATE_DTO = IdentifierSaveDescriptionDto.builder() + .description(IDENTIFIER_5_DESCRIPTION_1_DESCRIPTION) + .language(IDENTIFIER_5_DESCRIPTION_1_LANG_DTO) + .descriptionType(IDENTIFIER_5_DESCRIPTION_1_TYPE_DTO) .build(); - public final static Long IDENTIFIER_2_CREATOR_1_ID = 2L; + public final static Long IDENTIFIER_5_CREATOR_1_ID = 2L; - public final static Creator IDENTIFIER_2_CREATOR_1 = Creator.builder() - .id(IDENTIFIER_2_CREATOR_1_ID) + public final static Creator IDENTIFIER_5_CREATOR_1 = Creator.builder() + .id(IDENTIFIER_5_CREATOR_1_ID) .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) .creatorName(CREATOR_1_NAME) @@ -6315,8 +5565,8 @@ public abstract class BaseTest { .affiliationIdentifierSchemeUri(CREATOR_1_AFFIL_URI) .build(); - public final static CreatorDto IDENTIFIER_2_CREATOR_1_DTO = CreatorDto.builder() - .id(IDENTIFIER_2_CREATOR_1_ID) + public final static CreatorDto IDENTIFIER_5_CREATOR_1_DTO = CreatorDto.builder() + .id(IDENTIFIER_5_CREATOR_1_ID) .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) .creatorName(CREATOR_1_NAME) @@ -6325,7 +5575,7 @@ public abstract class BaseTest { .affiliation(CREATOR_1_AFFIL) .build(); - public final static CreatorSaveDto IDENTIFIER_2_CREATOR_1_CREATE_DTO = CreatorSaveDto.builder() + public final static CreatorSaveDto IDENTIFIER_5_CREATOR_1_CREATE_DTO = CreatorSaveDto.builder() .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) .creatorName(CREATOR_1_NAME) @@ -6334,7 +5584,7 @@ public abstract class BaseTest { .affiliation(CREATOR_1_AFFIL) .build(); - public final static CreatorSaveDto IDENTIFIER_2_CREATOR_1_MODIFY_DTO = CreatorSaveDto.builder() + public final static CreatorSaveDto IDENTIFIER_5_CREATOR_1_MODIFY_DTO = CreatorSaveDto.builder() .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) .creatorName(CREATOR_1_NAME) @@ -6343,10 +5593,10 @@ public abstract class BaseTest { .affiliation(CREATOR_1_AFFIL) .build(); - public final static Long IDENTIFIER_2_CREATOR_2_ID = 3L; + public final static Long IDENTIFIER_5_CREATOR_2_ID = 3L; - public final static Creator IDENTIFIER_2_CREATOR_2 = Creator.builder() - .id(IDENTIFIER_2_CREATOR_2_ID) + public final static Creator IDENTIFIER_5_CREATOR_2 = Creator.builder() + .id(IDENTIFIER_5_CREATOR_2_ID) .firstname(CREATOR_2_FIRSTNAME) .lastname(CREATOR_2_LASTNAME) .creatorName(CREATOR_2_NAME) @@ -6355,8 +5605,8 @@ public abstract class BaseTest { .affiliation(CREATOR_2_AFFIL) .build(); - public final static CreatorDto IDENTIFIER_2_CREATOR_2_DTO = CreatorDto.builder() - .id(IDENTIFIER_2_CREATOR_2_ID) + public final static CreatorDto IDENTIFIER_5_CREATOR_2_DTO = CreatorDto.builder() + .id(IDENTIFIER_5_CREATOR_2_ID) .firstname(CREATOR_2_FIRSTNAME) .lastname(CREATOR_2_LASTNAME) .creatorName(CREATOR_2_NAME) @@ -6365,7 +5615,7 @@ public abstract class BaseTest { .affiliation(CREATOR_2_AFFIL) .build(); - public final static CreatorSaveDto IDENTIFIER_2_CREATOR_2_CREATE_DTO = CreatorSaveDto.builder() + public final static CreatorSaveDto IDENTIFIER_5_CREATOR_2_CREATE_DTO = CreatorSaveDto.builder() .firstname(CREATOR_2_FIRSTNAME) .lastname(CREATOR_2_LASTNAME) .creatorName(CREATOR_2_NAME) @@ -6374,7 +5624,7 @@ public abstract class BaseTest { .affiliation(CREATOR_2_AFFIL) .build(); - public final static CreatorSaveDto IDENTIFIER_2_CREATOR_2_MODIFY_DTO = CreatorSaveDto.builder() + public final static CreatorSaveDto IDENTIFIER_5_CREATOR_2_MODIFY_DTO = CreatorSaveDto.builder() .firstname(CREATOR_2_FIRSTNAME) .lastname(CREATOR_2_LASTNAME) .creatorName(CREATOR_2_NAME) @@ -6383,223 +5633,190 @@ public abstract class BaseTest { .affiliation(CREATOR_2_AFFIL) .build(); - public final static Identifier IDENTIFIER_2 = Identifier.builder() - .id(IDENTIFIER_2_ID) - .databaseId(DATABASE_2_ID) - .queryId(IDENTIFIER_2_QUERY_ID) - .descriptions(List.of(IDENTIFIER_2_DESCRIPTION_1)) - .titles(List.of(IDENTIFIER_2_TITLE_1)) - .doi(IDENTIFIER_2_DOI) - .database(DATABASE_2) - .created(IDENTIFIER_2_CREATED) - .lastModified(IDENTIFIER_2_MODIFIED) - .execution(IDENTIFIER_2_EXECUTION) - .publicationDay(IDENTIFIER_2_PUBLICATION_DAY) - .publicationMonth(IDENTIFIER_2_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR) - .queryHash(IDENTIFIER_2_QUERY_HASH) - .resultHash(IDENTIFIER_2_RESULT_HASH) - .query(IDENTIFIER_2_QUERY) - .queryNormalized(IDENTIFIER_2_NORMALIZED) - .resultNumber(IDENTIFIER_2_RESULT_NUMBER) - .publisher(IDENTIFIER_2_PUBLISHER) - .type(IDENTIFIER_2_TYPE) - .createdBy(USER_2_ID) - .creators(List.of(IDENTIFIER_2_CREATOR_1, IDENTIFIER_2_CREATOR_2)) - .visibility(IDENTIFIER_2_VISIBILITY) - .build(); - - public final static Identifier IDENTIFIER_2_SIMPLE = Identifier.builder() - .id(IDENTIFIER_2_ID) + public final static Identifier IDENTIFIER_5 = Identifier.builder() + .id(IDENTIFIER_5_ID) .databaseId(DATABASE_2_ID) - .queryId(IDENTIFIER_2_QUERY_ID) - .descriptions(List.of() /* for jpa */) - .titles(List.of() /* for jpa */) - .doi(IDENTIFIER_2_DOI) - .database(null /* for jpa */) - .created(IDENTIFIER_2_CREATED) - .lastModified(IDENTIFIER_2_MODIFIED) - .execution(IDENTIFIER_2_EXECUTION) - .publicationDay(IDENTIFIER_2_PUBLICATION_DAY) - .publicationMonth(IDENTIFIER_2_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR) - .queryHash(IDENTIFIER_2_QUERY_HASH) - .resultHash(IDENTIFIER_2_RESULT_HASH) - .query(IDENTIFIER_2_QUERY) - .queryNormalized(IDENTIFIER_2_NORMALIZED) - .resultNumber(IDENTIFIER_2_RESULT_NUMBER) - .publisher(IDENTIFIER_2_PUBLISHER) - .type(IDENTIFIER_2_TYPE) + .queryId(IDENTIFIER_5_QUERY_ID) + .descriptions(List.of(IDENTIFIER_5_DESCRIPTION_1)) + .titles(List.of(IDENTIFIER_5_TITLE_1)) + .doi(IDENTIFIER_5_DOI) + .created(IDENTIFIER_5_CREATED) + .lastModified(IDENTIFIER_5_MODIFIED) + .execution(IDENTIFIER_5_EXECUTION) + .publicationDay(IDENTIFIER_5_PUBLICATION_DAY) + .publicationMonth(IDENTIFIER_5_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_5_PUBLICATION_YEAR) + .queryHash(IDENTIFIER_5_QUERY_HASH) + .resultHash(IDENTIFIER_5_RESULT_HASH) + .query(IDENTIFIER_5_QUERY) + .queryNormalized(IDENTIFIER_5_NORMALIZED) + .resultNumber(IDENTIFIER_5_RESULT_NUMBER) + .publisher(IDENTIFIER_5_PUBLISHER) + .type(IDENTIFIER_5_TYPE) .createdBy(USER_2_ID) - .creators(List.of() /* for jpa */) - .visibility(IDENTIFIER_2_VISIBILITY) + .creators(List.of(IDENTIFIER_5_CREATOR_1, IDENTIFIER_5_CREATOR_2)) .build(); - public final static IdentifierDto IDENTIFIER_2_DTO = IdentifierDto.builder() - .id(IDENTIFIER_2_ID) + public final static IdentifierDto IDENTIFIER_5_DTO = IdentifierDto.builder() + .id(IDENTIFIER_5_ID) .databaseId(DATABASE_2_ID) - .queryId(IDENTIFIER_2_QUERY_ID) - .descriptions(List.of(IDENTIFIER_2_DESCRIPTION_1_DTO)) - .titles(List.of(IDENTIFIER_2_TITLE_1_DTO)) - .doi(IDENTIFIER_2_DOI) - .database(DATABASE_2_DTO) - .created(IDENTIFIER_2_CREATED) - .lastModified(IDENTIFIER_2_MODIFIED) - .execution(IDENTIFIER_2_EXECUTION) - .publicationDay(IDENTIFIER_2_PUBLICATION_DAY) - .publicationMonth(IDENTIFIER_2_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR) - .queryHash(IDENTIFIER_2_QUERY_HASH) - .resultHash(IDENTIFIER_2_RESULT_HASH) - .query(IDENTIFIER_2_QUERY) - .queryNormalized(IDENTIFIER_2_NORMALIZED) - .resultNumber(IDENTIFIER_2_RESULT_NUMBER) - .publisher(IDENTIFIER_2_PUBLISHER) - .type(IDENTIFIER_2_TYPE_DTO) + .queryId(IDENTIFIER_5_QUERY_ID) + .descriptions(List.of(IDENTIFIER_5_DESCRIPTION_1_DTO)) + .titles(List.of(IDENTIFIER_5_TITLE_1_DTO)) + .doi(IDENTIFIER_5_DOI) + .created(IDENTIFIER_5_CREATED) + .lastModified(IDENTIFIER_5_MODIFIED) + .execution(IDENTIFIER_5_EXECUTION) + .publicationDay(IDENTIFIER_5_PUBLICATION_DAY) + .publicationMonth(IDENTIFIER_5_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_5_PUBLICATION_YEAR) + .queryHash(IDENTIFIER_5_QUERY_HASH) + .resultHash(IDENTIFIER_5_RESULT_HASH) + .query(IDENTIFIER_5_QUERY) + .queryNormalized(IDENTIFIER_5_NORMALIZED) + .resultNumber(IDENTIFIER_5_RESULT_NUMBER) + .publisher(IDENTIFIER_5_PUBLISHER) + .type(IDENTIFIER_5_TYPE_DTO) .creator(USER_2_DTO) - .creators(List.of(IDENTIFIER_2_CREATOR_1_DTO, IDENTIFIER_2_CREATOR_2_DTO)) - .visibility(IDENTIFIER_2_VISIBILITY_DTO) + .creators(List.of(IDENTIFIER_5_CREATOR_1_DTO, IDENTIFIER_5_CREATOR_2_DTO)) .build(); - public final static Long RELATED_IDENTIFIER_2_ID = 1L; - public final static Long RELATED_IDENTIFIER_2_IDENTIFIER_ID = 2L; - public final static String RELATED_IDENTIFIER_2_VALUE = "10.5281/zenodo.6637333"; - public final static RelatedType RELATED_IDENTIFIER_2_TYPE = RelatedType.DOI; - public final static RelatedTypeDto RELATED_IDENTIFIER_2_TYPE_DTO = RelatedTypeDto.DOI; - public final static RelationType RELATED_IDENTIFIER_2_RELATION_TYPE = RelationType.CITES; - public final static RelationTypeDto RELATED_IDENTIFIER_2_RELATION = RelationTypeDto.CITES; + public final static Long RELATED_IDENTIFIER_5_ID = 1L; + public final static Long RELATED_IDENTIFIER_5_IDENTIFIER_ID = 2L; + public final static String RELATED_IDENTIFIER_5_VALUE = "10.5281/zenodo.6637333"; + public final static RelatedType RELATED_IDENTIFIER_5_TYPE = RelatedType.DOI; + public final static RelatedTypeDto RELATED_IDENTIFIER_5_TYPE_DTO = RelatedTypeDto.DOI; + public final static RelationType RELATED_IDENTIFIER_5_RELATION_TYPE = RelationType.CITES; + public final static RelationTypeDto RELATED_IDENTIFIER_5_RELATION_TYPE_DTO = RelationTypeDto.CITES; public final static RelatedIdentifier IDENTIFIER_1_RELATED_IDENTIFIER_1 = RelatedIdentifier.builder() - .id(RELATED_IDENTIFIER_2_ID) - .type(RELATED_IDENTIFIER_2_TYPE) - .relation(RELATED_IDENTIFIER_2_RELATION_TYPE) - .value(RELATED_IDENTIFIER_2_VALUE) + .id(RELATED_IDENTIFIER_5_ID) + .identifier(IDENTIFIER_5) + .type(RELATED_IDENTIFIER_5_TYPE) + .relation(RELATED_IDENTIFIER_5_RELATION_TYPE) + .value(RELATED_IDENTIFIER_5_VALUE) .build(); - public final static RelatedIdentifierSaveDto IDENTIFIER_1_RELATED_IDENTIFIER_2_CREATE_DTO = RelatedIdentifierSaveDto.builder() - .value(RELATED_IDENTIFIER_2_VALUE) - .type(RELATED_IDENTIFIER_2_TYPE_DTO) - .relation(RELATED_IDENTIFIER_2_RELATION) + public final static RelatedIdentifierSaveDto IDENTIFIER_1_RELATED_IDENTIFIER_5_CREATE_DTO = RelatedIdentifierSaveDto.builder() + .value(RELATED_IDENTIFIER_5_VALUE) + .type(RELATED_IDENTIFIER_5_TYPE_DTO) + .relation(RELATED_IDENTIFIER_5_RELATION_TYPE_DTO) .build(); - public final static IdentifierSaveDto IDENTIFIER_2_DTO_REQUEST = IdentifierSaveDto.builder() - .queryId(IDENTIFIER_2_QUERY_ID) - .databaseId(IDENTIFIER_2_DATABASE_ID) - .descriptions(List.of(IDENTIFIER_2_DESCRIPTION_1_CREATE_DTO)) - .titles(List.of(IDENTIFIER_2_TITLE_1_CREATE_DTO)) - .relatedIdentifiers(List.of(IDENTIFIER_1_RELATED_IDENTIFIER_2_CREATE_DTO)) - .publicationDay(IDENTIFIER_2_PUBLICATION_DAY) - .publicationMonth(IDENTIFIER_2_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR) - .creators(List.of(IDENTIFIER_2_CREATOR_1_CREATE_DTO, IDENTIFIER_2_CREATOR_2_CREATE_DTO)) - .publisher(IDENTIFIER_2_PUBLISHER) + public final static IdentifierSaveDto IDENTIFIER_5_DTO_REQUEST = IdentifierSaveDto.builder() + .queryId(IDENTIFIER_5_QUERY_ID) + .databaseId(IDENTIFIER_5_DATABASE_ID) + .descriptions(List.of(IDENTIFIER_5_DESCRIPTION_1_CREATE_DTO)) + .titles(List.of(IDENTIFIER_5_TITLE_1_CREATE_DTO)) + .relatedIdentifiers(List.of(IDENTIFIER_1_RELATED_IDENTIFIER_5_CREATE_DTO)) + .publicationDay(IDENTIFIER_5_PUBLICATION_DAY) + .publicationMonth(IDENTIFIER_5_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_5_PUBLICATION_YEAR) + .creators(List.of(IDENTIFIER_5_CREATOR_1_CREATE_DTO, IDENTIFIER_5_CREATOR_2_CREATE_DTO)) + .publisher(IDENTIFIER_5_PUBLISHER) .licenses(List.of(LICENSE_1_DTO)) - .type(IDENTIFIER_2_TYPE_DTO) - .visibility(IDENTIFIER_2_VISIBILITY_DTO) + .type(IDENTIFIER_5_TYPE_DTO) .build(); - public final static IdentifierSaveDto IDENTIFIER_2_DTO_UPDATE_REQUEST = IdentifierSaveDto.builder() - .queryId(IDENTIFIER_2_QUERY_ID) - .databaseId(IDENTIFIER_2_DATABASE_ID) - .descriptions(List.of(IDENTIFIER_2_DESCRIPTION_1_CREATE_DTO)) - .titles(List.of(IDENTIFIER_2_TITLE_1_CREATE_DTO)) - .relatedIdentifiers(List.of(IDENTIFIER_1_RELATED_IDENTIFIER_2_CREATE_DTO)) - .publicationDay(IDENTIFIER_2_PUBLICATION_DAY) - .publicationMonth(IDENTIFIER_2_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR) - .creators(List.of(IDENTIFIER_2_CREATOR_1_MODIFY_DTO, IDENTIFIER_2_CREATOR_2_MODIFY_DTO)) - .publisher(IDENTIFIER_2_PUBLISHER) + public final static IdentifierSaveDto IDENTIFIER_5_DTO_UPDATE_REQUEST = IdentifierSaveDto.builder() + .queryId(IDENTIFIER_5_QUERY_ID) + .databaseId(IDENTIFIER_5_DATABASE_ID) + .descriptions(List.of(IDENTIFIER_5_DESCRIPTION_1_CREATE_DTO)) + .titles(List.of(IDENTIFIER_5_TITLE_1_CREATE_DTO)) + .relatedIdentifiers(List.of(IDENTIFIER_1_RELATED_IDENTIFIER_5_CREATE_DTO)) + .publicationDay(IDENTIFIER_5_PUBLICATION_DAY) + .publicationMonth(IDENTIFIER_5_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_5_PUBLICATION_YEAR) + .creators(List.of(IDENTIFIER_5_CREATOR_1_MODIFY_DTO, IDENTIFIER_5_CREATOR_2_MODIFY_DTO)) + .publisher(IDENTIFIER_5_PUBLISHER) .licenses(List.of(LICENSE_1_DTO)) - .type(IDENTIFIER_2_TYPE_DTO) - .visibility(IDENTIFIER_2_VISIBILITY_DTO) + .type(IDENTIFIER_5_TYPE_DTO) .build(); - public final static Long IDENTIFIER_3_ID = 3L; - public final static Long IDENTIFIER_3_QUERY_ID = QUERY_3_ID; - public final static Long IDENTIFIER_3_CONTAINER_ID = CONTAINER_3_ID; - public final static Long IDENTIFIER_3_DATABASE_ID = DATABASE_3_ID; - public final static String IDENTIFIER_3_DOI = null; - public final static Instant IDENTIFIER_3_CREATED = Instant.ofEpochSecond(1641588352); - public final static Instant IDENTIFIER_3_MODIFIED = Instant.ofEpochSecond(1541588352); - public final static Instant IDENTIFIER_3_EXECUTION = Instant.ofEpochSecond(1541588352); - public final static Integer IDENTIFIER_3_PUBLICATION_DAY = 14; - public final static Integer IDENTIFIER_3_PUBLICATION_MONTH = 7; - public final static Integer IDENTIFIER_3_PUBLICATION_YEAR = 2022; - public final static String IDENTIFIER_3_QUERY_HASH = QUERY_3_QUERY_HASH; - public final static String IDENTIFIER_3_RESULT_HASH = QUERY_3_RESULT_HASH; - public final static String IDENTIFIER_3_QUERY = QUERY_3_STATEMENT; - public final static String IDENTIFIER_3_NORMALIZED = QUERY_3_STATEMENT; - public final static Long IDENTIFIER_3_RESULT_NUMBER = QUERY_3_RESULT_NUMBER; - public final static String IDENTIFIER_3_PUBLISHER = "Norwegian Government"; - public final static IdentifierType IDENTIFIER_3_TYPE = IdentifierType.SUBSET; - public final static IdentifierTypeDto IDENTIFIER_3_TYPE_DTO = IdentifierTypeDto.SUBSET; - public final static VisibilityType IDENTIFIER_3_VISIBILITY = VisibilityType.EVERYONE; - public final static VisibilityTypeDto IDENTIFIER_3_VISIBILITY_DTO = VisibilityTypeDto.EVERYONE; + public final static Long IDENTIFIER_6_ID = 6L; + public final static Long IDENTIFIER_6_QUERY_ID = QUERY_3_ID; + public final static Long IDENTIFIER_6_CONTAINER_ID = CONTAINER_3_ID; + public final static Long IDENTIFIER_6_DATABASE_ID = DATABASE_3_ID; + public final static String IDENTIFIER_6_DOI = null; + public final static Instant IDENTIFIER_6_CREATED = Instant.ofEpochSecond(1641588352L); + public final static Instant IDENTIFIER_6_MODIFIED = Instant.ofEpochSecond(1541588352L); + public final static Instant IDENTIFIER_6_EXECUTION = Instant.ofEpochSecond(1541588352L); + public final static Integer IDENTIFIER_6_PUBLICATION_DAY = 14; + public final static Integer IDENTIFIER_6_PUBLICATION_MONTH = 7; + public final static Integer IDENTIFIER_6_PUBLICATION_YEAR = 2022; + public final static String IDENTIFIER_6_QUERY_HASH = QUERY_3_QUERY_HASH; + public final static String IDENTIFIER_6_RESULT_HASH = QUERY_3_RESULT_HASH; + public final static String IDENTIFIER_6_QUERY = QUERY_3_STATEMENT; + public final static String IDENTIFIER_6_NORMALIZED = QUERY_3_STATEMENT; + public final static Long IDENTIFIER_6_RESULT_NUMBER = QUERY_3_RESULT_NUMBER; + public final static String IDENTIFIER_6_PUBLISHER = "Norwegian Government"; + public final static IdentifierType IDENTIFIER_6_TYPE = IdentifierType.SUBSET; + public final static IdentifierTypeDto IDENTIFIER_6_TYPE_DTO = IdentifierTypeDto.SUBSET; - public final static Long IDENTIFIER_3_TITLE_1_ID = 3L; - public final static Long IDENTIFIER_3_TITLE_1_IDENTIFIER_ID = IDENTIFIER_3_ID; - public final static String IDENTIFIER_3_TITLE_1_TITLE = "Norwegian weather data"; - public final static String IDENTIFIER_3_TITLE_1_TITLE_MODIFY = "Norwegian weather some data"; - public final static LanguageType IDENTIFIER_3_TITLE_1_LANG = LanguageType.EN; - public final static LanguageTypeDto IDENTIFIER_3_TITLE_1_LANG_DTO = LanguageTypeDto.EN; + public final static Long IDENTIFIER_6_TITLE_1_ID = 4L; + public final static Long IDENTIFIER_6_TITLE_1_IDENTIFIER_ID = IDENTIFIER_6_ID; + public final static String IDENTIFIER_6_TITLE_1_TITLE = "Norwegian weather data"; + public final static String IDENTIFIER_6_TITLE_1_TITLE_MODIFY = "Norwegian weather some data"; + public final static LanguageType IDENTIFIER_6_TITLE_1_LANG = LanguageType.EN; + public final static LanguageTypeDto IDENTIFIER_6_TITLE_1_LANG_DTO = LanguageTypeDto.EN; - public final static IdentifierTitle IDENTIFIER_3_TITLE_1 = IdentifierTitle.builder() - .id(IDENTIFIER_3_TITLE_1_ID) - .title(IDENTIFIER_3_TITLE_1_TITLE) - .language(IDENTIFIER_3_TITLE_1_LANG) + public final static IdentifierTitle IDENTIFIER_6_TITLE_1 = IdentifierTitle.builder() + .id(IDENTIFIER_6_TITLE_1_ID) + .title(IDENTIFIER_6_TITLE_1_TITLE) + .language(IDENTIFIER_6_TITLE_1_LANG) .build(); - public final static IdentifierTitleDto IDENTIFIER_3_TITLE_1_DTO = IdentifierTitleDto.builder() - .id(IDENTIFIER_3_TITLE_1_ID) - .title(IDENTIFIER_3_TITLE_1_TITLE) - .language(IDENTIFIER_3_TITLE_1_LANG_DTO) + public final static IdentifierTitleDto IDENTIFIER_6_TITLE_1_DTO = IdentifierTitleDto.builder() + .id(IDENTIFIER_6_TITLE_1_ID) + .title(IDENTIFIER_6_TITLE_1_TITLE) + .language(IDENTIFIER_6_TITLE_1_LANG_DTO) .build(); - public final static IdentifierTitleDto IDENTIFIER_3_TITLE_1_DTO_MODIFY = IdentifierTitleDto.builder() - .id(IDENTIFIER_3_TITLE_1_ID) - .title(IDENTIFIER_3_TITLE_1_TITLE_MODIFY) - .language(IDENTIFIER_3_TITLE_1_LANG_DTO) + public final static IdentifierTitleDto IDENTIFIER_6_TITLE_1_DTO_MODIFY = IdentifierTitleDto.builder() + .id(IDENTIFIER_6_TITLE_1_ID) + .title(IDENTIFIER_6_TITLE_1_TITLE_MODIFY) + .language(IDENTIFIER_6_TITLE_1_LANG_DTO) .build(); - public final static IdentifierSaveTitleDto IDENTIFIER_3_TITLE_1_CREATE_DTO = IdentifierSaveTitleDto.builder() - .title(IDENTIFIER_3_TITLE_1_TITLE_MODIFY) - .language(IDENTIFIER_3_TITLE_1_LANG_DTO) + public final static IdentifierSaveTitleDto IDENTIFIER_6_TITLE_1_CREATE_DTO = IdentifierSaveTitleDto.builder() + .title(IDENTIFIER_6_TITLE_1_TITLE_MODIFY) + .language(IDENTIFIER_6_TITLE_1_LANG_DTO) .build(); - public final static Long IDENTIFIER_3_DESCRIPTION_1_ID = 1L; - public final static Long IDENTIFIER_3_DESCRIPTION_1_IDENTIFIER_ID = IDENTIFIER_3_ID; - public final static String IDENTIFIER_3_DESCRIPTION_1_DESCRIPTION = "Selecting all from the weather Norwegian table"; - public final static String IDENTIFIER_3_DESCRIPTION_1_DESCRIPTION_MODIFY = "Selecting some from the weather Norwegian table"; - public final static LanguageType IDENTIFIER_3_DESCRIPTION_1_LANG = LanguageType.EN; - public final static LanguageTypeDto IDENTIFIER_3_DESCRIPTION_1_LANG_DTO = LanguageTypeDto.EN; + public final static Long IDENTIFIER_6_DESCRIPTION_1_ID = 3L; + public final static Long IDENTIFIER_6_DESCRIPTION_1_IDENTIFIER_ID = IDENTIFIER_6_ID; + public final static String IDENTIFIER_6_DESCRIPTION_1_DESCRIPTION = "Selecting all from the weather Norwegian table"; + public final static String IDENTIFIER_6_DESCRIPTION_1_DESCRIPTION_MODIFY = "Selecting some from the weather Norwegian table"; + public final static LanguageType IDENTIFIER_6_DESCRIPTION_1_LANG = LanguageType.EN; + public final static LanguageTypeDto IDENTIFIER_6_DESCRIPTION_1_LANG_DTO = LanguageTypeDto.EN; - public final static IdentifierDescription IDENTIFIER_3_DESCRIPTION_1 = IdentifierDescription.builder() - .id(IDENTIFIER_3_DESCRIPTION_1_ID) - .description(IDENTIFIER_3_DESCRIPTION_1_DESCRIPTION) - .language(IDENTIFIER_3_DESCRIPTION_1_LANG) + public final static IdentifierDescription IDENTIFIER_6_DESCRIPTION_1 = IdentifierDescription.builder() + .id(IDENTIFIER_6_DESCRIPTION_1_ID) + .description(IDENTIFIER_6_DESCRIPTION_1_DESCRIPTION) + .language(IDENTIFIER_6_DESCRIPTION_1_LANG) .build(); - public final static IdentifierDescriptionDto IDENTIFIER_3_DESCRIPTION_1_DTO = IdentifierDescriptionDto.builder() - .id(IDENTIFIER_3_DESCRIPTION_1_ID) - .description(IDENTIFIER_3_DESCRIPTION_1_DESCRIPTION) - .language(IDENTIFIER_3_DESCRIPTION_1_LANG_DTO) + public final static IdentifierDescriptionDto IDENTIFIER_6_DESCRIPTION_1_DTO = IdentifierDescriptionDto.builder() + .id(IDENTIFIER_6_DESCRIPTION_1_ID) + .description(IDENTIFIER_6_DESCRIPTION_1_DESCRIPTION) + .language(IDENTIFIER_6_DESCRIPTION_1_LANG_DTO) .build(); - public final static IdentifierDescriptionDto IDENTIFIER_3_DESCRIPTION_1_DTO_MODIFY = IdentifierDescriptionDto.builder() - .id(IDENTIFIER_3_DESCRIPTION_1_ID) - .description(IDENTIFIER_3_DESCRIPTION_1_DESCRIPTION_MODIFY) - .language(IDENTIFIER_3_DESCRIPTION_1_LANG_DTO) + public final static IdentifierDescriptionDto IDENTIFIER_6_DESCRIPTION_1_DTO_MODIFY = IdentifierDescriptionDto.builder() + .id(IDENTIFIER_6_DESCRIPTION_1_ID) + .description(IDENTIFIER_6_DESCRIPTION_1_DESCRIPTION_MODIFY) + .language(IDENTIFIER_6_DESCRIPTION_1_LANG_DTO) .build(); - public final static IdentifierSaveDescriptionDto IDENTIFIER_3_DESCRIPTION_1_CREATE_DTO = IdentifierSaveDescriptionDto.builder() - .description(IDENTIFIER_3_DESCRIPTION_1_DESCRIPTION_MODIFY) - .language(IDENTIFIER_3_DESCRIPTION_1_LANG_DTO) + public final static IdentifierSaveDescriptionDto IDENTIFIER_6_DESCRIPTION_1_CREATE_DTO = IdentifierSaveDescriptionDto.builder() + .description(IDENTIFIER_6_DESCRIPTION_1_DESCRIPTION_MODIFY) + .language(IDENTIFIER_6_DESCRIPTION_1_LANG_DTO) .build(); - private final static Long IDENTIFIER_3_CREATOR_1_ID = 4L; + private final static Long IDENTIFIER_6_CREATOR_1_ID = 4L; - public final static Creator IDENTIFIER_3_CREATOR_1 = Creator.builder() - .id(IDENTIFIER_3_CREATOR_1_ID) + public final static Creator IDENTIFIER_6_CREATOR_1 = Creator.builder() + .id(IDENTIFIER_6_CREATOR_1_ID) .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) .creatorName(CREATOR_1_NAME) @@ -6610,8 +5827,8 @@ public abstract class BaseTest { .affiliationIdentifierScheme(CREATOR_1_AFFIL_TYPE) .build(); - public final static CreatorDto IDENTIFIER_3_CREATOR_1_DTO = CreatorDto.builder() - .id(IDENTIFIER_3_CREATOR_1_ID) + public final static CreatorDto IDENTIFIER_6_CREATOR_1_DTO = CreatorDto.builder() + .id(IDENTIFIER_6_CREATOR_1_ID) .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) .creatorName(CREATOR_1_NAME) @@ -6623,7 +5840,7 @@ public abstract class BaseTest { .affiliationIdentifierSchemeUri(CREATOR_1_AFFIL_URI) .build(); - public final static CreatorSaveDto IDENTIFIER_3_CREATOR_1_CREATE_DTO = CreatorSaveDto.builder() + public final static CreatorSaveDto IDENTIFIER_6_CREATOR_1_CREATE_DTO = CreatorSaveDto.builder() .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) .creatorName(CREATOR_1_NAME) @@ -6634,7 +5851,7 @@ public abstract class BaseTest { .affiliationIdentifierScheme(CREATOR_1_AFFIL_TYPE_DTO) .build(); - public final static CreatorSaveDto IDENTIFIER_3_CREATOR_1_MODIFY_DTO = CreatorSaveDto.builder() + public final static CreatorSaveDto IDENTIFIER_6_CREATOR_1_MODIFY_DTO = CreatorSaveDto.builder() .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) .creatorName(CREATOR_1_NAME) @@ -6645,10 +5862,10 @@ public abstract class BaseTest { .affiliationIdentifierScheme(CREATOR_1_AFFIL_TYPE_DTO) .build(); - private final static Long IDENTIFIER_3_CREATOR_2_ID = 5L; + private final static Long IDENTIFIER_6_CREATOR_2_ID = 5L; - public final static Creator IDENTIFIER_3_CREATOR_2 = Creator.builder() - .id(IDENTIFIER_3_CREATOR_2_ID) + public final static Creator IDENTIFIER_6_CREATOR_2 = Creator.builder() + .id(IDENTIFIER_6_CREATOR_2_ID) .firstname(CREATOR_2_FIRSTNAME) .lastname(CREATOR_2_LASTNAME) .creatorName(CREATOR_2_NAME) @@ -6657,8 +5874,8 @@ public abstract class BaseTest { .affiliation(CREATOR_2_AFFIL) .build(); - public final static CreatorDto IDENTIFIER_3_CREATOR_2_DTO = CreatorDto.builder() - .id(IDENTIFIER_3_CREATOR_2_ID) + public final static CreatorDto IDENTIFIER_6_CREATOR_2_DTO = CreatorDto.builder() + .id(IDENTIFIER_6_CREATOR_2_ID) .firstname(CREATOR_2_FIRSTNAME) .lastname(CREATOR_2_LASTNAME) .creatorName(CREATOR_2_NAME) @@ -6667,10 +5884,10 @@ public abstract class BaseTest { .affiliation(CREATOR_2_AFFIL) .build(); - private final static Long IDENTIFIER_3_CREATOR_3_ID = 6L; + private final static Long IDENTIFIER_6_CREATOR_3_ID = 6L; - public final static Creator IDENTIFIER_3_CREATOR_3 = Creator.builder() - .id(IDENTIFIER_3_CREATOR_3_ID) + public final static Creator IDENTIFIER_6_CREATOR_3 = Creator.builder() + .id(IDENTIFIER_6_CREATOR_3_ID) .firstname(CREATOR_3_FIRSTNAME) .lastname(CREATOR_3_LASTNAME) .creatorName(CREATOR_3_NAME) @@ -6679,8 +5896,8 @@ public abstract class BaseTest { .affiliationIdentifier(CREATOR_3_AFFIL_ROR) .build(); - public final static CreatorDto IDENTIFIER_3_CREATOR_3_DTO = CreatorDto.builder() - .id(IDENTIFIER_3_CREATOR_3_ID) + public final static CreatorDto IDENTIFIER_6_CREATOR_3_DTO = CreatorDto.builder() + .id(IDENTIFIER_6_CREATOR_3_ID) .firstname(CREATOR_3_FIRSTNAME) .lastname(CREATOR_3_LASTNAME) .creatorName(CREATOR_3_NAME) @@ -6690,141 +5907,106 @@ public abstract class BaseTest { .affiliationIdentifier(CREATOR_3_AFFIL_ROR) .build(); - public final static Identifier IDENTIFIER_3 = Identifier.builder() - .id(IDENTIFIER_3_ID) - .databaseId(IDENTIFIER_3_DATABASE_ID) - .queryId(IDENTIFIER_3_QUERY_ID) - .descriptions(List.of(IDENTIFIER_3_DESCRIPTION_1)) - .titles(List.of(IDENTIFIER_3_TITLE_1)) - .doi(IDENTIFIER_3_DOI) - .database(DATABASE_3) - .created(IDENTIFIER_3_CREATED) - .lastModified(IDENTIFIER_3_MODIFIED) - .execution(IDENTIFIER_3_EXECUTION) - .publicationDay(IDENTIFIER_3_PUBLICATION_DAY) - .publicationMonth(IDENTIFIER_3_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_3_PUBLICATION_YEAR) - .queryHash(IDENTIFIER_3_QUERY_HASH) - .resultHash(IDENTIFIER_3_RESULT_HASH) - .query(IDENTIFIER_3_QUERY) - .queryNormalized(IDENTIFIER_3_NORMALIZED) - .resultNumber(IDENTIFIER_3_RESULT_NUMBER) - .publisher(IDENTIFIER_3_PUBLISHER) - .type(IDENTIFIER_3_TYPE) + public final static Identifier IDENTIFIER_6 = Identifier.builder() + .id(IDENTIFIER_6_ID) + .databaseId(IDENTIFIER_6_DATABASE_ID) + .queryId(IDENTIFIER_6_QUERY_ID) + .descriptions(List.of(IDENTIFIER_6_DESCRIPTION_1)) + .titles(List.of(IDENTIFIER_6_TITLE_1)) + .doi(IDENTIFIER_6_DOI) + .created(IDENTIFIER_6_CREATED) + .lastModified(IDENTIFIER_6_MODIFIED) + .execution(IDENTIFIER_6_EXECUTION) + .publicationDay(IDENTIFIER_6_PUBLICATION_DAY) + .publicationMonth(IDENTIFIER_6_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_6_PUBLICATION_YEAR) + .queryHash(IDENTIFIER_6_QUERY_HASH) + .resultHash(IDENTIFIER_6_RESULT_HASH) + .query(IDENTIFIER_6_QUERY) + .queryNormalized(IDENTIFIER_6_NORMALIZED) + .resultNumber(IDENTIFIER_6_RESULT_NUMBER) + .publisher(IDENTIFIER_6_PUBLISHER) + .type(IDENTIFIER_6_TYPE) .createdBy(USER_3_ID) .licenses(List.of(LICENSE_1)) - .creators(List.of(IDENTIFIER_3_CREATOR_1, IDENTIFIER_3_CREATOR_2, IDENTIFIER_3_CREATOR_3)) - .visibility(IDENTIFIER_3_VISIBILITY) + .creators(List.of(IDENTIFIER_6_CREATOR_1, IDENTIFIER_6_CREATOR_2, IDENTIFIER_6_CREATOR_3)) .build(); - public final static Identifier IDENTIFIER_3_SIMPLE = Identifier.builder() - .id(IDENTIFIER_3_ID) + public final static IdentifierDto IDENTIFIER_6_DTO = IdentifierDto.builder() + .id(IDENTIFIER_6_ID) .databaseId(DATABASE_3_ID) - .queryId(IDENTIFIER_3_QUERY_ID) - .descriptions(List.of() /* for jpa */) - .titles(List.of() /* for jpa */) - .doi(IDENTIFIER_3_DOI) - .database(null /* for jpa */) - .created(IDENTIFIER_3_CREATED) - .lastModified(IDENTIFIER_3_MODIFIED) - .execution(IDENTIFIER_3_EXECUTION) - .publicationDay(IDENTIFIER_3_PUBLICATION_DAY) - .publicationMonth(IDENTIFIER_3_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_3_PUBLICATION_YEAR) - .queryHash(IDENTIFIER_3_QUERY_HASH) - .resultHash(IDENTIFIER_3_RESULT_HASH) - .query(IDENTIFIER_3_QUERY) - .queryNormalized(IDENTIFIER_3_NORMALIZED) - .resultNumber(IDENTIFIER_3_RESULT_NUMBER) - .publisher(IDENTIFIER_3_PUBLISHER) - .type(IDENTIFIER_3_TYPE) - .createdBy(USER_3_ID) - .licenses(List.of() /* for jpa */) - .creators(List.of() /* for jpa */) - .visibility(IDENTIFIER_3_VISIBILITY) - .build(); - - public final static IdentifierDto IDENTIFIER_3_DTO = IdentifierDto.builder() - .id(IDENTIFIER_3_ID) - .databaseId(DATABASE_3_ID) - .queryId(IDENTIFIER_3_QUERY_ID) - .descriptions(List.of(IDENTIFIER_3_DESCRIPTION_1_DTO)) - .titles(List.of(IDENTIFIER_3_TITLE_1_DTO)) - .doi(IDENTIFIER_3_DOI) - .database(DATABASE_3_DTO) - .created(IDENTIFIER_3_CREATED) - .lastModified(IDENTIFIER_3_MODIFIED) - .execution(IDENTIFIER_3_EXECUTION) - .publicationDay(IDENTIFIER_3_PUBLICATION_DAY) - .publicationMonth(IDENTIFIER_3_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_3_PUBLICATION_YEAR) - .queryHash(IDENTIFIER_3_QUERY_HASH) - .resultHash(IDENTIFIER_3_RESULT_HASH) - .query(IDENTIFIER_3_QUERY) - .queryNormalized(IDENTIFIER_3_NORMALIZED) - .resultNumber(IDENTIFIER_3_RESULT_NUMBER) - .publisher(IDENTIFIER_3_PUBLISHER) - .type(IDENTIFIER_3_TYPE_DTO) + .queryId(IDENTIFIER_6_QUERY_ID) + .descriptions(List.of(IDENTIFIER_6_DESCRIPTION_1_DTO)) + .titles(List.of(IDENTIFIER_6_TITLE_1_DTO)) + .doi(IDENTIFIER_6_DOI) + .created(IDENTIFIER_6_CREATED) + .lastModified(IDENTIFIER_6_MODIFIED) + .execution(IDENTIFIER_6_EXECUTION) + .publicationDay(IDENTIFIER_6_PUBLICATION_DAY) + .publicationMonth(IDENTIFIER_6_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_6_PUBLICATION_YEAR) + .queryHash(IDENTIFIER_6_QUERY_HASH) + .resultHash(IDENTIFIER_6_RESULT_HASH) + .query(IDENTIFIER_6_QUERY) + .queryNormalized(IDENTIFIER_6_NORMALIZED) + .resultNumber(IDENTIFIER_6_RESULT_NUMBER) + .publisher(IDENTIFIER_6_PUBLISHER) + .type(IDENTIFIER_6_TYPE_DTO) .creator(USER_3_DTO) .licenses(List.of(LICENSE_1_DTO)) - .creators(List.of(IDENTIFIER_3_CREATOR_1_DTO, IDENTIFIER_3_CREATOR_2_DTO, IDENTIFIER_3_CREATOR_3_DTO)) - .visibility(IDENTIFIER_3_VISIBILITY_DTO) + .creators(List.of(IDENTIFIER_6_CREATOR_1_DTO, IDENTIFIER_6_CREATOR_2_DTO, IDENTIFIER_6_CREATOR_3_DTO)) .build(); - public final static IdentifierSaveDto IDENTIFIER_3_DTO_REQUEST = IdentifierSaveDto.builder() - .databaseId(IDENTIFIER_3_DATABASE_ID) - .queryId(IDENTIFIER_3_QUERY_ID) - .descriptions(List.of(IDENTIFIER_3_DESCRIPTION_1_CREATE_DTO)) - .titles(List.of(IDENTIFIER_3_TITLE_1_CREATE_DTO)) + public final static IdentifierSaveDto IDENTIFIER_6_DTO_REQUEST = IdentifierSaveDto.builder() + .databaseId(IDENTIFIER_6_DATABASE_ID) + .queryId(IDENTIFIER_6_QUERY_ID) + .descriptions(List.of(IDENTIFIER_6_DESCRIPTION_1_CREATE_DTO)) + .titles(List.of(IDENTIFIER_6_TITLE_1_CREATE_DTO)) .relatedIdentifiers(List.of()) - .publicationMonth(IDENTIFIER_3_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_3_PUBLICATION_YEAR) - .creators(List.of(IDENTIFIER_3_CREATOR_1_CREATE_DTO)) - .publisher(IDENTIFIER_3_PUBLISHER) - .type(IDENTIFIER_3_TYPE_DTO) - .visibility(IDENTIFIER_3_VISIBILITY_DTO) + .publicationMonth(IDENTIFIER_6_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_6_PUBLICATION_YEAR) + .creators(List.of(IDENTIFIER_6_CREATOR_1_CREATE_DTO)) + .publisher(IDENTIFIER_6_PUBLISHER) + .type(IDENTIFIER_6_TYPE_DTO) .licenses(List.of(LICENSE_1_DTO)) .build(); - public final static IdentifierSaveDto IDENTIFIER_3_DTO_UPDATE_REQUEST = IdentifierSaveDto.builder() - .databaseId(IDENTIFIER_3_DATABASE_ID) - .queryId(IDENTIFIER_3_QUERY_ID) - .descriptions(List.of(IDENTIFIER_3_DESCRIPTION_1_CREATE_DTO)) - .titles(List.of(IDENTIFIER_3_TITLE_1_CREATE_DTO)) + public final static IdentifierSaveDto IDENTIFIER_6_DTO_UPDATE_REQUEST = IdentifierSaveDto.builder() + .databaseId(IDENTIFIER_6_DATABASE_ID) + .queryId(IDENTIFIER_6_QUERY_ID) + .descriptions(List.of(IDENTIFIER_6_DESCRIPTION_1_CREATE_DTO)) + .titles(List.of(IDENTIFIER_6_TITLE_1_CREATE_DTO)) .relatedIdentifiers(List.of()) - .publicationMonth(IDENTIFIER_3_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_3_PUBLICATION_YEAR) - .creators(List.of(IDENTIFIER_3_CREATOR_1_MODIFY_DTO)) - .publisher(IDENTIFIER_3_PUBLISHER) - .type(IDENTIFIER_3_TYPE_DTO) - .visibility(IDENTIFIER_3_VISIBILITY_DTO) + .publicationMonth(IDENTIFIER_6_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_6_PUBLICATION_YEAR) + .creators(List.of(IDENTIFIER_6_CREATOR_1_MODIFY_DTO)) + .publisher(IDENTIFIER_6_PUBLISHER) + .type(IDENTIFIER_6_TYPE_DTO) .licenses(List.of(LICENSE_1_DTO)) .build(); - public final static Long IDENTIFIER_4_ID = 4L; - public final static Long IDENTIFIER_4_DATABASE_ID = DATABASE_4_ID; - public final static String IDENTIFIER_4_DOI = null; - public final static Instant IDENTIFIER_4_CREATED = Instant.ofEpochSecond(1641588352); - public final static Instant IDENTIFIER_4_MODIFIED = Instant.ofEpochSecond(1541588352); - public final static Instant IDENTIFIER_4_EXECUTION = Instant.ofEpochSecond(1541588352); - public final static Integer IDENTIFIER_4_PUBLICATION_DAY = 14; - public final static Integer IDENTIFIER_4_PUBLICATION_MONTH = 7; - public final static Integer IDENTIFIER_4_PUBLICATION_YEAR = 2022; - public final static String IDENTIFIER_4_QUERY_HASH = "abc"; - public final static String IDENTIFIER_4_RESULT_HASH = "def"; - public final static String IDENTIFIER_4_QUERY = "SELECT `id` FROM `foobar`"; - public final static String IDENTIFIER_4_NORMALIZED = "SELECT `id` FROM `foobar`"; - public final static Long IDENTIFIER_4_RESULT_NUMBER = 2L; - public final static String IDENTIFIER_4_PUBLISHER = "Swedish Government"; - public final static IdentifierType IDENTIFIER_4_TYPE = IdentifierType.DATABASE; - public final static IdentifierTypeDto IDENTIFIER_4_TYPE_DTO = IdentifierTypeDto.DATABASE; - public final static VisibilityType IDENTIFIER_4_VISIBILITY = VisibilityType.EVERYONE; - public final static VisibilityTypeDto IDENTIFIER_4_VISIBILITY_DTO = VisibilityTypeDto.EVERYONE; - - private final static Long IDENTIFIER_4_CREATOR_1_ID = 6L; - - public final static Creator IDENTIFIER_4_CREATOR_1 = Creator.builder() - .id(IDENTIFIER_4_CREATOR_1_ID) + public final static Long IDENTIFIER_7_ID = 7L; + public final static Long IDENTIFIER_7_DATABASE_ID = DATABASE_4_ID; + public final static String IDENTIFIER_7_DOI = null; + public final static Instant IDENTIFIER_7_CREATED = Instant.ofEpochSecond(1641588352L); + public final static Instant IDENTIFIER_7_MODIFIED = Instant.ofEpochSecond(1541588352L); + public final static Instant IDENTIFIER_7_EXECUTION = Instant.ofEpochSecond(1541588352L); + public final static Integer IDENTIFIER_7_PUBLICATION_DAY = 14; + public final static Integer IDENTIFIER_7_PUBLICATION_MONTH = 7; + public final static Integer IDENTIFIER_7_PUBLICATION_YEAR = 2022; + public final static String IDENTIFIER_7_QUERY_HASH = "abc"; + public final static String IDENTIFIER_7_RESULT_HASH = "def"; + public final static String IDENTIFIER_7_QUERY = "SELECT `id` FROM `foobar`"; + public final static String IDENTIFIER_7_NORMALIZED = "SELECT `id` FROM `foobar`"; + public final static Long IDENTIFIER_7_RESULT_NUMBER = 2L; + public final static String IDENTIFIER_7_PUBLISHER = "Swedish Government"; + public final static IdentifierType IDENTIFIER_7_TYPE = IdentifierType.DATABASE; + public final static IdentifierTypeDto IDENTIFIER_7_TYPE_DTO = IdentifierTypeDto.DATABASE; + + private final static Long IDENTIFIER_7_CREATOR_1_ID = 6L; + + public final static Creator IDENTIFIER_7_CREATOR_1 = Creator.builder() + .id(IDENTIFIER_7_CREATOR_1_ID) .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) .creatorName(CREATOR_1_NAME) @@ -6836,8 +6018,8 @@ public abstract class BaseTest { .affiliationIdentifierSchemeUri(CREATOR_1_AFFIL_URI) .build(); - public final static CreatorDto IDENTIFIER_4_CREATOR_1_DTO = CreatorDto.builder() - .id(IDENTIFIER_4_CREATOR_1_ID) + public final static CreatorDto IDENTIFIER_7_CREATOR_1_DTO = CreatorDto.builder() + .id(IDENTIFIER_7_CREATOR_1_ID) .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) .creatorName(CREATOR_1_NAME) @@ -6849,340 +6031,293 @@ public abstract class BaseTest { .affiliationIdentifierSchemeUri(CREATOR_1_AFFIL_URI) .build(); - public final static Identifier IDENTIFIER_4 = Identifier.builder() - .id(IDENTIFIER_4_ID) + public final static IdentifierDto IDENTIFIER_7_DTO = IdentifierDto.builder() + .id(IDENTIFIER_7_ID) .databaseId(DATABASE_4_ID) .descriptions(List.of()) .titles(List.of()) - .doi(IDENTIFIER_4_DOI) - .database(DATABASE_4) - .created(IDENTIFIER_4_CREATED) - .lastModified(IDENTIFIER_4_MODIFIED) - .execution(IDENTIFIER_4_EXECUTION) - .publicationDay(IDENTIFIER_4_PUBLICATION_DAY) - .publicationMonth(IDENTIFIER_4_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_4_PUBLICATION_YEAR) - .queryHash(IDENTIFIER_4_QUERY_HASH) - .resultHash(IDENTIFIER_4_RESULT_HASH) - .query(IDENTIFIER_4_QUERY) - .queryNormalized(IDENTIFIER_4_NORMALIZED) - .resultNumber(IDENTIFIER_4_RESULT_NUMBER) - .publisher(IDENTIFIER_4_PUBLISHER) - .type(IDENTIFIER_4_TYPE) - .createdBy(USER_4_ID) + .doi(IDENTIFIER_7_DOI) + .created(IDENTIFIER_7_CREATED) + .lastModified(IDENTIFIER_7_MODIFIED) + .execution(IDENTIFIER_7_EXECUTION) + .publicationDay(IDENTIFIER_7_PUBLICATION_DAY) + .publicationMonth(IDENTIFIER_7_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_7_PUBLICATION_YEAR) + .queryHash(IDENTIFIER_7_QUERY_HASH) + .resultHash(IDENTIFIER_7_RESULT_HASH) + .query(IDENTIFIER_7_QUERY) + .queryNormalized(IDENTIFIER_7_NORMALIZED) + .resultNumber(IDENTIFIER_7_RESULT_NUMBER) + .publisher(IDENTIFIER_7_PUBLISHER) + .type(IDENTIFIER_7_TYPE_DTO) + .creator(USER_4_DTO) .licenses(List.of()) + .funders(List.of()) .creators(List.of()) + .build(); + + public final static CreatorSaveDto IDENTIFIER_7_CREATOR_1_CREATE_DTO = CreatorSaveDto.builder() + .firstname(CREATOR_1_FIRSTNAME) + .lastname(CREATOR_1_LASTNAME) + .creatorName(CREATOR_1_NAME) + .nameIdentifier(CREATOR_1_ORCID) + .nameIdentifierScheme(NameIdentifierSchemeTypeDto.ORCID) + .affiliation(CREATOR_1_AFFIL) + .affiliationIdentifier(CREATOR_1_AFFIL_ROR) + .build(); + + public final static IdentifierSaveDto IDENTIFIER_7_DTO_REQUEST = IdentifierSaveDto.builder() + .databaseId(IDENTIFIER_7_DATABASE_ID) + .descriptions(List.of()) + .titles(List.of()) + .relatedIdentifiers(List.of()) + .publicationMonth(IDENTIFIER_7_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_7_PUBLICATION_YEAR) + .creators(List.of(IDENTIFIER_7_CREATOR_1_CREATE_DTO)) .funders(List.of()) - .visibility(IDENTIFIER_4_VISIBILITY) + .licenses(List.of()) + .publisher(IDENTIFIER_7_PUBLISHER) + .type(IDENTIFIER_7_TYPE_DTO) + .build(); + + public final static Long IDENTIFIER_2_ID = 2L; + public final static Long IDENTIFIER_2_DATABASE_ID = DATABASE_1_ID; + public final static String IDENTIFIER_2_DOI = null; + public final static Instant IDENTIFIER_2_CREATED = Instant.ofEpochSecond(1651588352L); + public final static Instant IDENTIFIER_2_MODIFIED = Instant.ofEpochSecond(1551588352L); + public final static Instant IDENTIFIER_2_EXECUTION = Instant.ofEpochSecond(1551588352L); + public final static Integer IDENTIFIER_2_PUBLICATION_DAY = 10; + public final static Integer IDENTIFIER_2_PUBLICATION_MONTH = 7; + public final static Integer IDENTIFIER_2_PUBLICATION_YEAR = 2023; + public final static String IDENTIFIER_2_QUERY_HASH = QUERY_1_QUERY_HASH; + public final static String IDENTIFIER_2_RESULT_HASH = QUERY_1_RESULT_HASH; + public final static String IDENTIFIER_2_QUERY = QUERY_1_STATEMENT; + public final static String IDENTIFIER_2_NORMALIZED = QUERY_1_STATEMENT; + public final static Long IDENTIFIER_2_RESULT_NUMBER = QUERY_1_RESULT_NUMBER; + public final static String IDENTIFIER_2_PUBLISHER = "Swedish Government"; + public final static IdentifierType IDENTIFIER_2_TYPE = IdentifierType.SUBSET; + public final static IdentifierTypeDto IDENTIFIER_2_TYPE_DTO = IdentifierTypeDto.SUBSET; + + public final static Identifier IDENTIFIER_2 = Identifier.builder() + .id(IDENTIFIER_2_ID) + .databaseId(IDENTIFIER_2_DATABASE_ID) + .descriptions(List.of()) + .titles(List.of()) + .doi(IDENTIFIER_2_DOI) + .database(null /* DATABASE_1 */) + .created(IDENTIFIER_2_CREATED) + .lastModified(IDENTIFIER_2_MODIFIED) + .execution(IDENTIFIER_2_EXECUTION) + .publicationDay(IDENTIFIER_2_PUBLICATION_DAY) + .publicationMonth(IDENTIFIER_2_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR) + .queryHash(IDENTIFIER_2_QUERY_HASH) + .resultHash(IDENTIFIER_2_RESULT_HASH) + .query(IDENTIFIER_2_QUERY) + .queryNormalized(IDENTIFIER_2_NORMALIZED) + .resultNumber(IDENTIFIER_2_RESULT_NUMBER) + .publisher(IDENTIFIER_2_PUBLISHER) + .type(IDENTIFIER_2_TYPE) + .createdBy(USER_1_ID) + .licenses(List.of(LICENSE_1)) + .creators(List.of()) + .build(); + + public final static IdentifierDto IDENTIFIER_2_DTO = IdentifierDto.builder() + .id(IDENTIFIER_2_ID) + .databaseId(IDENTIFIER_2_DATABASE_ID) + .descriptions(List.of()) + .titles(List.of()) + .doi(IDENTIFIER_2_DOI) + .created(IDENTIFIER_2_CREATED) + .lastModified(IDENTIFIER_2_MODIFIED) + .execution(IDENTIFIER_2_EXECUTION) + .publicationDay(IDENTIFIER_2_PUBLICATION_DAY) + .publicationMonth(IDENTIFIER_2_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR) + .queryHash(IDENTIFIER_2_QUERY_HASH) + .resultHash(IDENTIFIER_2_RESULT_HASH) + .query(IDENTIFIER_2_QUERY) + .queryNormalized(IDENTIFIER_2_NORMALIZED) + .resultNumber(IDENTIFIER_2_RESULT_NUMBER) + .publisher(IDENTIFIER_2_PUBLISHER) + .type(IDENTIFIER_2_TYPE_DTO) + .creator(USER_1_DTO) + .licenses(List.of(LICENSE_1_DTO)) + .creators(List.of()) + .build(); + + public final static IdentifierSaveDto IDENTIFIER_2_DTO_REQUEST = IdentifierSaveDto.builder() + .databaseId(IDENTIFIER_2_DATABASE_ID) + .descriptions(List.of()) + .titles(List.of()) + .relatedIdentifiers(List.of()) + .publicationMonth(IDENTIFIER_2_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR) + .creators(List.of()) + .publisher(IDENTIFIER_2_PUBLISHER) + .type(IDENTIFIER_2_TYPE_DTO) + .licenses(List.of(LICENSE_1_DTO)) + .queryId(QUERY_1_ID) + .build(); + + public final static Long IDENTIFIER_3_ID = 3L; + public final static Long IDENTIFIER_3_DATABASE_ID = DATABASE_1_ID; + public final static Long IDENTIFIER_3_VIEW_ID = VIEW_1_ID; + public final static String IDENTIFIER_3_DOI = null; + public final static Instant IDENTIFIER_3_CREATED = Instant.ofEpochSecond(1651588352L); + public final static Instant IDENTIFIER_3_MODIFIED = Instant.ofEpochSecond(1551588352L); + public final static Instant IDENTIFIER_3_EXECUTION = Instant.ofEpochSecond(1551588352L); + public final static Integer IDENTIFIER_3_PUBLICATION_DAY = 10; + public final static Integer IDENTIFIER_3_PUBLICATION_MONTH = 7; + public final static Integer IDENTIFIER_3_PUBLICATION_YEAR = 2023; + public final static String IDENTIFIER_3_QUERY_HASH = VIEW_1_QUERY_HASH; + public final static String IDENTIFIER_3_RESULT_HASH = null; + public final static String IDENTIFIER_3_QUERY = VIEW_1_QUERY; + public final static String IDENTIFIER_3_NORMALIZED = VIEW_1_QUERY; + public final static Long IDENTIFIER_3_RESULT_NUMBER = null; + public final static String IDENTIFIER_3_PUBLISHER = "Polish Government"; + public final static IdentifierType IDENTIFIER_3_TYPE = IdentifierType.VIEW; + public final static IdentifierTypeDto IDENTIFIER_3_TYPE_DTO = IdentifierTypeDto.VIEW; + + public final static Identifier IDENTIFIER_3 = Identifier.builder() + .id(IDENTIFIER_3_ID) + .databaseId(IDENTIFIER_3_DATABASE_ID) + .viewId(IDENTIFIER_3_VIEW_ID) + .descriptions(List.of()) + .titles(List.of()) + .doi(IDENTIFIER_3_DOI) + .database(null /* DATABASE_1 */) + .created(IDENTIFIER_3_CREATED) + .lastModified(IDENTIFIER_3_MODIFIED) + .execution(IDENTIFIER_3_EXECUTION) + .publicationDay(IDENTIFIER_3_PUBLICATION_DAY) + .publicationMonth(IDENTIFIER_3_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_3_PUBLICATION_YEAR) + .queryHash(IDENTIFIER_3_QUERY_HASH) + .resultHash(IDENTIFIER_3_RESULT_HASH) + .query(IDENTIFIER_3_QUERY) + .queryNormalized(IDENTIFIER_3_NORMALIZED) + .resultNumber(IDENTIFIER_3_RESULT_NUMBER) + .publisher(IDENTIFIER_3_PUBLISHER) + .type(IDENTIFIER_3_TYPE) + .createdBy(USER_1_ID) + .licenses(List.of(LICENSE_1)) + .creators(List.of()) + .build(); + + public final static IdentifierDto IDENTIFIER_3_DTO = IdentifierDto.builder() + .id(IDENTIFIER_3_ID) + .databaseId(IDENTIFIER_3_DATABASE_ID) + .viewId(IDENTIFIER_3_VIEW_ID) + .descriptions(List.of()) + .titles(List.of()) + .doi(IDENTIFIER_3_DOI) + .created(IDENTIFIER_3_CREATED) + .lastModified(IDENTIFIER_3_MODIFIED) + .execution(IDENTIFIER_3_EXECUTION) + .publicationDay(IDENTIFIER_3_PUBLICATION_DAY) + .publicationMonth(IDENTIFIER_3_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_3_PUBLICATION_YEAR) + .queryHash(IDENTIFIER_3_QUERY_HASH) + .resultHash(IDENTIFIER_3_RESULT_HASH) + .query(IDENTIFIER_3_QUERY) + .queryNormalized(IDENTIFIER_3_NORMALIZED) + .resultNumber(IDENTIFIER_3_RESULT_NUMBER) + .publisher(IDENTIFIER_3_PUBLISHER) + .type(IDENTIFIER_3_TYPE_DTO) + .creator(USER_1_DTO) + .licenses(List.of(LICENSE_1_DTO)) + .creators(List.of()) + .build(); + + public final static IdentifierSaveDto IDENTIFIER_3_DTO_REQUEST = IdentifierSaveDto.builder() + .databaseId(IDENTIFIER_3_DATABASE_ID) + .viewId(IDENTIFIER_3_VIEW_ID) + .descriptions(List.of()) + .titles(List.of()) + .relatedIdentifiers(List.of()) + .publicationMonth(IDENTIFIER_3_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_3_PUBLICATION_YEAR) + .creators(List.of()) + .publisher(IDENTIFIER_3_PUBLISHER) + .type(IDENTIFIER_3_TYPE_DTO) + .licenses(List.of(LICENSE_1_DTO)) .build(); - public final static Identifier IDENTIFIER_4_SIMPLE = Identifier.builder() + public final static Long IDENTIFIER_4_ID = 4L; + public final static Long IDENTIFIER_4_DATABASE_ID = DATABASE_1_ID; + public final static Long IDENTIFIER_4_TABLE_ID = TABLE_1_ID; + public final static String IDENTIFIER_4_DOI = null; + public final static Instant IDENTIFIER_4_CREATED = Instant.ofEpochSecond(1751588352L); + public final static Instant IDENTIFIER_4_MODIFIED = Instant.ofEpochSecond(1551588352L); + public final static Instant IDENTIFIER_4_EXECUTION = Instant.ofEpochSecond(1551588352L); + public final static Integer IDENTIFIER_4_PUBLICATION_DAY = 10; + public final static Integer IDENTIFIER_4_PUBLICATION_MONTH = 7; + public final static Integer IDENTIFIER_4_PUBLICATION_YEAR = 2023; + public final static String IDENTIFIER_4_RESULT_HASH = null; + public final static Long IDENTIFIER_4_RESULT_NUMBER = null; + public final static String IDENTIFIER_4_PUBLISHER = "Example Publisher"; + public final static IdentifierType IDENTIFIER_4_TYPE = IdentifierType.TABLE; + public final static IdentifierTypeDto IDENTIFIER_4_TYPE_DTO = IdentifierTypeDto.TABLE; + + public final static Identifier IDENTIFIER_4 = Identifier.builder() .id(IDENTIFIER_4_ID) - .databaseId(DATABASE_4_ID) - .descriptions(List.of() /* for jpa */) - .titles(List.of() /* for jpa */) + .databaseId(IDENTIFIER_4_DATABASE_ID) + .tableId(IDENTIFIER_4_TABLE_ID) + .descriptions(List.of()) + .titles(List.of()) .doi(IDENTIFIER_4_DOI) - .database(null /* for jpa */) + .database(null /* DATABASE_1 */) .created(IDENTIFIER_4_CREATED) .lastModified(IDENTIFIER_4_MODIFIED) .execution(IDENTIFIER_4_EXECUTION) .publicationDay(IDENTIFIER_4_PUBLICATION_DAY) .publicationMonth(IDENTIFIER_4_PUBLICATION_MONTH) .publicationYear(IDENTIFIER_4_PUBLICATION_YEAR) - .queryHash(IDENTIFIER_4_QUERY_HASH) .resultHash(IDENTIFIER_4_RESULT_HASH) - .query(IDENTIFIER_4_QUERY) - .queryNormalized(IDENTIFIER_4_NORMALIZED) .resultNumber(IDENTIFIER_4_RESULT_NUMBER) .publisher(IDENTIFIER_4_PUBLISHER) .type(IDENTIFIER_4_TYPE) - .createdBy(USER_4_ID) - .licenses(List.of()) - .funders(List.of()) + .createdBy(USER_1_ID) + .licenses(List.of(LICENSE_1)) .creators(List.of()) - .visibility(IDENTIFIER_4_VISIBILITY) .build(); public final static IdentifierDto IDENTIFIER_4_DTO = IdentifierDto.builder() .id(IDENTIFIER_4_ID) - .databaseId(DATABASE_4_ID) + .databaseId(IDENTIFIER_4_DATABASE_ID) + .tableId(IDENTIFIER_4_TABLE_ID) .descriptions(List.of()) .titles(List.of()) .doi(IDENTIFIER_4_DOI) - .database(DATABASE_4_DTO) .created(IDENTIFIER_4_CREATED) .lastModified(IDENTIFIER_4_MODIFIED) .execution(IDENTIFIER_4_EXECUTION) .publicationDay(IDENTIFIER_4_PUBLICATION_DAY) .publicationMonth(IDENTIFIER_4_PUBLICATION_MONTH) .publicationYear(IDENTIFIER_4_PUBLICATION_YEAR) - .queryHash(IDENTIFIER_4_QUERY_HASH) .resultHash(IDENTIFIER_4_RESULT_HASH) - .query(IDENTIFIER_4_QUERY) - .queryNormalized(IDENTIFIER_4_NORMALIZED) .resultNumber(IDENTIFIER_4_RESULT_NUMBER) .publisher(IDENTIFIER_4_PUBLISHER) .type(IDENTIFIER_4_TYPE_DTO) - .creator(USER_4_DTO) - .licenses(List.of()) - .funders(List.of()) + .creator(USER_1_DTO) + .licenses(List.of(LICENSE_1_DTO)) .creators(List.of()) - .visibility(IDENTIFIER_4_VISIBILITY_DTO) - .build(); - - public final static CreatorSaveDto IDENTIFIER_4_CREATOR_1_CREATE_DTO = CreatorSaveDto.builder() - .firstname(CREATOR_1_FIRSTNAME) - .lastname(CREATOR_1_LASTNAME) - .creatorName(CREATOR_1_NAME) - .nameIdentifier(CREATOR_1_ORCID) - .nameIdentifierScheme(NameIdentifierSchemeTypeDto.ORCID) - .affiliation(CREATOR_1_AFFIL) - .affiliationIdentifier(CREATOR_1_AFFIL_ROR) .build(); public final static IdentifierSaveDto IDENTIFIER_4_DTO_REQUEST = IdentifierSaveDto.builder() .databaseId(IDENTIFIER_4_DATABASE_ID) + .tableId(IDENTIFIER_4_TABLE_ID) .descriptions(List.of()) .titles(List.of()) .relatedIdentifiers(List.of()) .publicationMonth(IDENTIFIER_4_PUBLICATION_MONTH) .publicationYear(IDENTIFIER_4_PUBLICATION_YEAR) - .creators(List.of(IDENTIFIER_4_CREATOR_1_CREATE_DTO)) - .funders(List.of()) - .licenses(List.of()) + .creators(List.of()) .publisher(IDENTIFIER_4_PUBLISHER) .type(IDENTIFIER_4_TYPE_DTO) - .visibility(IDENTIFIER_4_VISIBILITY_DTO) - .build(); - - public final static Long IDENTIFIER_5_ID = 5L; - public final static Long IDENTIFIER_5_DATABASE_ID = DATABASE_1_ID; - public final static String IDENTIFIER_5_DOI = null; - public final static Instant IDENTIFIER_5_CREATED = Instant.ofEpochSecond(1651588352); - public final static Instant IDENTIFIER_5_MODIFIED = Instant.ofEpochSecond(1551588352); - public final static Instant IDENTIFIER_5_EXECUTION = Instant.ofEpochSecond(1551588352); - public final static Integer IDENTIFIER_5_PUBLICATION_DAY = 10; - public final static Integer IDENTIFIER_5_PUBLICATION_MONTH = 7; - public final static Integer IDENTIFIER_5_PUBLICATION_YEAR = 2023; - public final static String IDENTIFIER_5_QUERY_HASH = QUERY_1_QUERY_HASH; - public final static String IDENTIFIER_5_RESULT_HASH = QUERY_1_RESULT_HASH; - public final static String IDENTIFIER_5_QUERY = QUERY_1_STATEMENT; - public final static String IDENTIFIER_5_NORMALIZED = QUERY_1_STATEMENT; - public final static Long IDENTIFIER_5_RESULT_NUMBER = QUERY_1_RESULT_NUMBER; - public final static String IDENTIFIER_5_PUBLISHER = "Swedish Government"; - public final static IdentifierType IDENTIFIER_5_TYPE = IdentifierType.SUBSET; - public final static IdentifierTypeDto IDENTIFIER_5_TYPE_DTO = IdentifierTypeDto.SUBSET; - public final static VisibilityType IDENTIFIER_5_VISIBILITY = VisibilityType.EVERYONE; - public final static VisibilityTypeDto IDENTIFIER_5_VISIBILITY_DTO = VisibilityTypeDto.EVERYONE; - - public final static Identifier IDENTIFIER_5 = Identifier.builder() - .id(IDENTIFIER_5_ID) - .databaseId(IDENTIFIER_5_DATABASE_ID) - .descriptions(List.of()) - .titles(List.of()) - .doi(IDENTIFIER_5_DOI) - .database(DATABASE_1) - .created(IDENTIFIER_5_CREATED) - .lastModified(IDENTIFIER_5_MODIFIED) - .execution(IDENTIFIER_5_EXECUTION) - .publicationDay(IDENTIFIER_5_PUBLICATION_DAY) - .publicationMonth(IDENTIFIER_5_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_5_PUBLICATION_YEAR) - .queryHash(IDENTIFIER_5_QUERY_HASH) - .resultHash(IDENTIFIER_5_RESULT_HASH) - .query(IDENTIFIER_5_QUERY) - .queryNormalized(IDENTIFIER_5_NORMALIZED) - .resultNumber(IDENTIFIER_5_RESULT_NUMBER) - .publisher(IDENTIFIER_5_PUBLISHER) - .type(IDENTIFIER_5_TYPE) - .createdBy(USER_1_ID) - .licenses(List.of(LICENSE_1)) - .creators(List.of()) - .visibility(IDENTIFIER_5_VISIBILITY) - .build(); - - public final static Identifier IDENTIFIER_5_SIMPLE = Identifier.builder() - .id(IDENTIFIER_5_ID) - .databaseId(IDENTIFIER_5_DATABASE_ID) - .descriptions(List.of() /* for jpa */) - .titles(List.of() /* for jpa */) - .doi(IDENTIFIER_5_DOI) - .database(null /* for jpa */) - .created(IDENTIFIER_5_CREATED) - .lastModified(IDENTIFIER_5_MODIFIED) - .execution(IDENTIFIER_5_EXECUTION) - .publicationDay(IDENTIFIER_5_PUBLICATION_DAY) - .publicationMonth(IDENTIFIER_5_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_5_PUBLICATION_YEAR) - .queryHash(IDENTIFIER_5_QUERY_HASH) - .resultHash(IDENTIFIER_5_RESULT_HASH) - .query(IDENTIFIER_5_QUERY) - .queryNormalized(IDENTIFIER_5_NORMALIZED) - .resultNumber(IDENTIFIER_5_RESULT_NUMBER) - .publisher(IDENTIFIER_5_PUBLISHER) - .type(IDENTIFIER_5_TYPE) - .createdBy(USER_1_ID) - .licenses(List.of() /* for jpa */) - .creators(List.of() /* for jpa */) - .visibility(IDENTIFIER_5_VISIBILITY) - .build(); - - public final static IdentifierDto IDENTIFIER_5_DTO = IdentifierDto.builder() - .id(IDENTIFIER_5_ID) - .databaseId(IDENTIFIER_5_DATABASE_ID) - .descriptions(List.of()) - .titles(List.of()) - .doi(IDENTIFIER_5_DOI) - .database(DATABASE_1_DTO) - .created(IDENTIFIER_5_CREATED) - .lastModified(IDENTIFIER_5_MODIFIED) - .execution(IDENTIFIER_5_EXECUTION) - .publicationDay(IDENTIFIER_5_PUBLICATION_DAY) - .publicationMonth(IDENTIFIER_5_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_5_PUBLICATION_YEAR) - .queryHash(IDENTIFIER_5_QUERY_HASH) - .resultHash(IDENTIFIER_5_RESULT_HASH) - .query(IDENTIFIER_5_QUERY) - .queryNormalized(IDENTIFIER_5_NORMALIZED) - .resultNumber(IDENTIFIER_5_RESULT_NUMBER) - .publisher(IDENTIFIER_5_PUBLISHER) - .type(IDENTIFIER_5_TYPE_DTO) - .creator(USER_1_DTO) - .licenses(List.of(LICENSE_1_DTO)) - .creators(List.of()) - .visibility(IDENTIFIER_5_VISIBILITY_DTO) - .build(); - - public final static IdentifierSaveDto IDENTIFIER_5_DTO_REQUEST = IdentifierSaveDto.builder() - .databaseId(IDENTIFIER_5_DATABASE_ID) - .descriptions(List.of()) - .titles(List.of()) - .relatedIdentifiers(List.of()) - .publicationMonth(IDENTIFIER_5_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_5_PUBLICATION_YEAR) - .creators(List.of()) - .publisher(IDENTIFIER_5_PUBLISHER) - .type(IDENTIFIER_5_TYPE_DTO) - .visibility(IDENTIFIER_5_VISIBILITY_DTO) - .licenses(List.of(LICENSE_1_DTO)) - .queryId(QUERY_1_ID) - .build(); - - public final static Long IDENTIFIER_6_ID = 6L; - public final static Long IDENTIFIER_6_DATABASE_ID = DATABASE_1_ID; - public final static Long IDENTIFIER_6_VIEW_ID = VIEW_1_ID; - public final static String IDENTIFIER_6_DOI = null; - public final static Instant IDENTIFIER_6_CREATED = Instant.ofEpochSecond(1651588352); - public final static Instant IDENTIFIER_6_MODIFIED = Instant.ofEpochSecond(1551588352); - public final static Instant IDENTIFIER_6_EXECUTION = Instant.ofEpochSecond(1551588352); - public final static Integer IDENTIFIER_6_PUBLICATION_DAY = 10; - public final static Integer IDENTIFIER_6_PUBLICATION_MONTH = 7; - public final static Integer IDENTIFIER_6_PUBLICATION_YEAR = 2023; - public final static String IDENTIFIER_6_QUERY_HASH = VIEW_1_QUERY_HASH; - public final static String IDENTIFIER_6_RESULT_HASH = null; - public final static String IDENTIFIER_6_QUERY = VIEW_1_QUERY; - public final static String IDENTIFIER_6_NORMALIZED = VIEW_1_QUERY; - public final static Long IDENTIFIER_6_RESULT_NUMBER = null; - public final static String IDENTIFIER_6_PUBLISHER = "Polish Government"; - public final static IdentifierType IDENTIFIER_6_TYPE = IdentifierType.VIEW; - public final static IdentifierTypeDto IDENTIFIER_6_TYPE_DTO = IdentifierTypeDto.VIEW; - public final static VisibilityType IDENTIFIER_6_VISIBILITY = VisibilityType.EVERYONE; - public final static VisibilityTypeDto IDENTIFIER_6_VISIBILITY_DTO = VisibilityTypeDto.EVERYONE; - - public final static Identifier IDENTIFIER_6 = Identifier.builder() - .id(IDENTIFIER_6_ID) - .databaseId(IDENTIFIER_6_DATABASE_ID) - .viewId(IDENTIFIER_6_VIEW_ID) - .descriptions(List.of()) - .titles(List.of()) - .doi(IDENTIFIER_6_DOI) - .database(DATABASE_1) - .created(IDENTIFIER_6_CREATED) - .lastModified(IDENTIFIER_6_MODIFIED) - .execution(IDENTIFIER_6_EXECUTION) - .publicationDay(IDENTIFIER_6_PUBLICATION_DAY) - .publicationMonth(IDENTIFIER_6_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_6_PUBLICATION_YEAR) - .queryHash(IDENTIFIER_6_QUERY_HASH) - .resultHash(IDENTIFIER_6_RESULT_HASH) - .query(IDENTIFIER_6_QUERY) - .queryNormalized(IDENTIFIER_6_NORMALIZED) - .resultNumber(IDENTIFIER_6_RESULT_NUMBER) - .publisher(IDENTIFIER_6_PUBLISHER) - .type(IDENTIFIER_6_TYPE) - .createdBy(USER_1_ID) - .licenses(List.of(LICENSE_1)) - .creators(List.of()) - .visibility(IDENTIFIER_6_VISIBILITY) - .build(); - - public final static Identifier IDENTIFIER_6_SIMPLE = Identifier.builder() - .id(IDENTIFIER_6_ID) - .databaseId(IDENTIFIER_6_DATABASE_ID) - .viewId(IDENTIFIER_6_VIEW_ID) - .descriptions(List.of()) - .titles(List.of()) - .doi(IDENTIFIER_6_DOI) - .database(null /* for jpa */) - .created(IDENTIFIER_6_CREATED) - .lastModified(IDENTIFIER_6_MODIFIED) - .execution(IDENTIFIER_6_EXECUTION) - .publicationDay(IDENTIFIER_6_PUBLICATION_DAY) - .publicationMonth(IDENTIFIER_6_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_6_PUBLICATION_YEAR) - .queryHash(IDENTIFIER_6_QUERY_HASH) - .resultHash(IDENTIFIER_6_RESULT_HASH) - .query(IDENTIFIER_6_QUERY) - .queryNormalized(IDENTIFIER_6_NORMALIZED) - .resultNumber(IDENTIFIER_6_RESULT_NUMBER) - .publisher(IDENTIFIER_6_PUBLISHER) - .type(IDENTIFIER_6_TYPE) - .createdBy(USER_1_ID) - .licenses(List.of(LICENSE_1)) - .creators(List.of()) - .visibility(IDENTIFIER_6_VISIBILITY) - .build(); - - public final static IdentifierDto IDENTIFIER_6_DTO = IdentifierDto.builder() - .id(IDENTIFIER_6_ID) - .databaseId(IDENTIFIER_6_DATABASE_ID) - .viewId(IDENTIFIER_6_VIEW_ID) - .descriptions(List.of()) - .titles(List.of()) - .doi(IDENTIFIER_6_DOI) - .database(DATABASE_1_DTO) - .created(IDENTIFIER_6_CREATED) - .lastModified(IDENTIFIER_6_MODIFIED) - .execution(IDENTIFIER_6_EXECUTION) - .publicationDay(IDENTIFIER_6_PUBLICATION_DAY) - .publicationMonth(IDENTIFIER_6_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_6_PUBLICATION_YEAR) - .queryHash(IDENTIFIER_6_QUERY_HASH) - .resultHash(IDENTIFIER_6_RESULT_HASH) - .query(IDENTIFIER_6_QUERY) - .queryNormalized(IDENTIFIER_6_NORMALIZED) - .resultNumber(IDENTIFIER_6_RESULT_NUMBER) - .publisher(IDENTIFIER_6_PUBLISHER) - .type(IDENTIFIER_6_TYPE_DTO) - .creator(USER_1_DTO) - .licenses(List.of(LICENSE_1_DTO)) - .creators(List.of()) - .visibility(IDENTIFIER_6_VISIBILITY_DTO) - .build(); - - public final static IdentifierSaveDto IDENTIFIER_6_DTO_REQUEST = IdentifierSaveDto.builder() - .databaseId(IDENTIFIER_6_DATABASE_ID) - .viewId(IDENTIFIER_6_VIEW_ID) - .descriptions(List.of()) - .titles(List.of()) - .relatedIdentifiers(List.of()) - .publicationMonth(IDENTIFIER_6_PUBLICATION_MONTH) - .publicationYear(IDENTIFIER_6_PUBLICATION_YEAR) - .creators(List.of()) - .publisher(IDENTIFIER_6_PUBLISHER) - .type(IDENTIFIER_6_TYPE_DTO) - .visibility(IDENTIFIER_6_VISIBILITY_DTO) - .licenses(List.of(LICENSE_1_DTO)) + .licenses(List.of(LICENSE_1_DTO)) .build(); public final static String VIRTUAL_HOST_NAME = "fda"; @@ -7211,7 +6346,7 @@ public abstract class BaseTest { public final static String BANNER_MESSAGE_1_MESSAGE = "Next maintenance in 7 days!"; public final static BannerMessageType BANNER_MESSAGE_1_TYPE = BannerMessageType.INFO; public final static BannerMessageTypeDto BANNER_MESSAGE_1_TYPE_DTO = BannerMessageTypeDto.INFO; - public final static Instant BANNER_MESSAGE_1_START = Instant.ofEpochSecond(1684577786); + public final static Instant BANNER_MESSAGE_1_START = Instant.ofEpochSecond(1684577786L); public final static Instant BANNER_MESSAGE_1_END = null; public final static BannerMessage BANNER_MESSAGE_1 = BannerMessage.builder() @@ -7240,8 +6375,8 @@ public abstract class BaseTest { public final static String BANNER_MESSAGE_2_MESSAGE = "No operation on Christmas 2022!"; public final static BannerMessageType BANNER_MESSAGE_2_TYPE = BannerMessageType.ERROR; public final static BannerMessageTypeDto BANNER_MESSAGE_2_TYPE_DTO = BannerMessageTypeDto.ERROR; - public final static Instant BANNER_MESSAGE_2_START = Instant.ofEpochSecond(1671836400); - public final static Instant BANNER_MESSAGE_2_END = Instant.ofEpochSecond(1672009200); + public final static Instant BANNER_MESSAGE_2_START = Instant.ofEpochSecond(1671836400L); + public final static Instant BANNER_MESSAGE_2_END = Instant.ofEpochSecond(1672009200L); public final static BannerMessage BANNER_MESSAGE_2 = BannerMessage.builder() .id(BANNER_MESSAGE_2_ID) @@ -7258,4 +6393,440 @@ public abstract class BaseTest { .displayEnd(BANNER_MESSAGE_2_END) .build(); + public final static Database DATABASE_1 = Database.builder() + .id(DATABASE_1_ID) + .created(Instant.now().minus(1, HOURS)) + .lastModified(Instant.now()) + .isPublic(DATABASE_1_PUBLIC) + .name(DATABASE_1_NAME) + .description(DATABASE_1_DESCRIPTION) + .identifiers(List.of(IDENTIFIER_1, IDENTIFIER_2, IDENTIFIER_3, IDENTIFIER_4)) + .cid(CONTAINER_1_ID) + .container(CONTAINER_1) + .internalName(DATABASE_1_INTERNALNAME) + .exchangeName(DATABASE_1_EXCHANGE) + .created(DATABASE_1_CREATED) + .lastModified(DATABASE_1_LAST_MODIFIED) + .createdBy(DATABASE_1_CREATOR) + .creator(USER_1) + .ownedBy(DATABASE_1_OWNER) + .owner(USER_1) + .contactPerson(USER_1_ID) + .contact(USER_1) + .tables(List.of(TABLE_1, TABLE_2, TABLE_3, TABLE_4)) + .views(List.of(VIEW_1, VIEW_2, VIEW_3)) + .accesses(List.of() /* set in junit tests */) + .build(); + + public final static DatabaseDto DATABASE_1_DTO = DatabaseDto.builder() + .id(DATABASE_1_ID) + .created(Instant.now().minus(1, HOURS)) + .isPublic(DATABASE_1_PUBLIC) + .name(DATABASE_1_NAME) + .internalName(DATABASE_1_INTERNALNAME) + .exchangeName(DATABASE_1_EXCHANGE) + .identifiers(List.of(IDENTIFIER_1_DTO, IDENTIFIER_2_DTO, IDENTIFIER_3_DTO, IDENTIFIER_4_DTO)) + .tables(List.of(TABLE_1_DTO, TABLE_2_DTO, TABLE_3_DTO, TABLE_4_DTO)) + .views(List.of(VIEW_1_DTO, VIEW_2_DTO, VIEW_3_DTO)) + .build(); + + public final static DatabaseBriefDto DATABASE_1_DTO_BRIEF = DatabaseBriefDto.builder() + .id(DATABASE_1_ID) + .container(CONTAINER_1_DTO_BRIEF) + .created(Instant.now().minus(1, HOURS)) + .isPublic(DATABASE_1_PUBLIC) + .name(DATABASE_1_NAME) + .internalName(DATABASE_1_INTERNALNAME) + .build(); + + public final static DatabaseAccess DATABASE_1_USER_1_READ_ACCESS = DatabaseAccess.builder() + .type(AccessType.READ) + .hdbid(DATABASE_1_ID) + .database(DATABASE_1) + .huserid(USER_1_ID) + .user(USER_1) + .build(); + + public final static DatabaseAccess DATABASE_1_USER_1_WRITE_OWN_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_OWN) + .hdbid(DATABASE_1_ID) + .database(DATABASE_1) + .huserid(USER_1_ID) + .user(USER_1) + .build(); + + public final static DatabaseAccess DATABASE_1_USER_1_WRITE_ALL_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_ALL) + .hdbid(DATABASE_1_ID) + .database(DATABASE_1) + .huserid(USER_1_ID) + .user(USER_1) + .build(); + + public final static DatabaseAccess DATABASE_1_USER_2_READ_ACCESS = DatabaseAccess.builder() + .type(AccessType.READ) + .hdbid(DATABASE_1_ID) + .database(DATABASE_1) + .huserid(USER_2_ID) + .user(USER_2) + .build(); + + public final static DatabaseAccess DATABASE_1_USER_2_WRITE_OWN_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_OWN) + .hdbid(DATABASE_1_ID) + .database(DATABASE_1) + .huserid(USER_2_ID) + .user(USER_2) + .build(); + + public final static DatabaseAccess DATABASE_1_USER_2_WRITE_ALL_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_ALL) + .hdbid(DATABASE_1_ID) + .database(DATABASE_1) + .huserid(USER_2_ID) + .user(USER_2) + .build(); + + public final static DatabaseAccess DATABASE_1_USER_3_READ_ACCESS = DatabaseAccess.builder() + .type(AccessType.READ) + .hdbid(DATABASE_1_ID) + .database(DATABASE_1) + .huserid(USER_3_ID) + .user(USER_3) + .build(); + + public final static DatabaseAccess DATABASE_1_USER_3_WRITE_OWN_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_OWN) + .hdbid(DATABASE_1_ID) + .database(DATABASE_1) + .huserid(USER_3_ID) + .user(USER_3) + .build(); + + public final static DatabaseAccess DATABASE_1_USER_3_WRITE_ALL_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_ALL) + .hdbid(DATABASE_1_ID) + .database(DATABASE_1) + .huserid(USER_3_ID) + .user(USER_3) + .build(); + + public final static Database DATABASE_2 = Database.builder() + .id(DATABASE_2_ID) + .created(DATABASE_2_CREATED) + .lastModified(Instant.now()) + .isPublic(DATABASE_2_PUBLIC) + .name(DATABASE_2_NAME) + .description(DATABASE_2_DESCRIPTION) + .cid(CONTAINER_1_ID) + .identifiers(List.of(IDENTIFIER_5)) + .container(CONTAINER_1) + .internalName(DATABASE_2_INTERNALNAME) + .exchangeName(DATABASE_2_EXCHANGE) + .created(DATABASE_2_CREATED) + .lastModified(DATABASE_2_LAST_MODIFIED) + .createdBy(DATABASE_2_CREATOR) + .creator(USER_2) + .ownedBy(DATABASE_2_OWNER) + .owner(USER_2) + .contactPerson(USER_2_ID) + .contact(USER_2) + .tables(List.of(TABLE_5, TABLE_6, TABLE_7)) + .views(List.of(VIEW_4)) + .accesses(List.of() /* set in junit tests */) + .build(); + + public final static DatabaseDto DATABASE_2_DTO = DatabaseDto.builder() + .id(DATABASE_2_ID) + .created(DATABASE_2_CREATED) + .isPublic(DATABASE_2_PUBLIC) + .name(DATABASE_2_NAME) + .internalName(DATABASE_2_INTERNALNAME) + .exchangeName(DATABASE_2_EXCHANGE) + .identifiers(List.of(IDENTIFIER_5_DTO)) + .tables(List.of(TABLE_5_DTO, TABLE_6_DTO, TABLE_7_DTO)) + .views(List.of(VIEW_4_DTO)) + .build(); + + public final static DatabaseAccess DATABASE_2_USER_1_READ_ACCESS = DatabaseAccess.builder() + .type(AccessType.READ) + .hdbid(DATABASE_2_ID) + .database(DATABASE_2) + .huserid(USER_1_ID) + .user(USER_1) + .build(); + + public final static DatabaseAccess DATABASE_2_USER_1_WRITE_OWN_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_OWN) + .hdbid(DATABASE_2_ID) + .database(DATABASE_2) + .huserid(USER_1_ID) + .user(USER_1) + .build(); + + public final static DatabaseAccess DATABASE_2_USER_1_WRITE_ALL_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_ALL) + .hdbid(DATABASE_2_ID) + .database(DATABASE_2) + .huserid(USER_1_ID) + .user(USER_1) + .build(); + + public final static DatabaseAccess DATABASE_2_USER_2_READ_ACCESS = DatabaseAccess.builder() + .type(AccessType.READ) + .hdbid(DATABASE_2_ID) + .database(DATABASE_2) + .huserid(USER_2_ID) + .user(USER_2) + .build(); + + public final static DatabaseAccess DATABASE_2_USER_2_WRITE_OWN_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_OWN) + .hdbid(DATABASE_2_ID) + .database(DATABASE_2) + .huserid(USER_2_ID) + .user(USER_2) + .build(); + + public final static DatabaseAccess DATABASE_2_USER_2_WRITE_ALL_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_ALL) + .hdbid(DATABASE_2_ID) + .database(DATABASE_2) + .huserid(USER_2_ID) + .user(USER_2) + .build(); + + public final static DatabaseAccess DATABASE_2_USER_3_READ_ACCESS = DatabaseAccess.builder() + .type(AccessType.READ) + .hdbid(DATABASE_2_ID) + .database(DATABASE_2) + .huserid(USER_3_ID) + .user(USER_3) + .build(); + + public final static DatabaseAccess DATABASE_2_USER_3_WRITE_OWN_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_OWN) + .hdbid(DATABASE_2_ID) + .database(DATABASE_2) + .huserid(USER_3_ID) + .user(USER_3) + .build(); + + public final static DatabaseAccess DATABASE_2_USER_3_WRITE_ALL_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_ALL) + .hdbid(DATABASE_2_ID) + .database(DATABASE_2) + .huserid(USER_3_ID) + .user(USER_3) + .build(); + + public final static Database DATABASE_3 = Database.builder() + .id(DATABASE_3_ID) + .created(Instant.now().minus(1, HOURS)) + .lastModified(Instant.now()) + .isPublic(DATABASE_3_PUBLIC) + .name(DATABASE_3_NAME) + .description(DATABASE_3_DESCRIPTION) + .identifiers(List.of(IDENTIFIER_6)) + .cid(CONTAINER_1_ID) + .container(CONTAINER_1) + .internalName(DATABASE_3_INTERNALNAME) + .exchangeName(DATABASE_3_EXCHANGE) + .created(DATABASE_3_CREATED) + .lastModified(DATABASE_3_LAST_MODIFIED) + .createdBy(DATABASE_3_CREATOR) + .creator(USER_3) + .ownedBy(DATABASE_3_OWNER) + .owner(USER_3) + .contactPerson(USER_3_ID) + .contact(USER_3) + .tables(List.of(TABLE_8)) + .views(List.of(VIEW_5)) + .accesses(List.of() /* set in junit tests */) + .build(); + + public final static DatabaseAccess DATABASE_3_USER_1_READ_ACCESS = DatabaseAccess.builder() + .type(AccessType.READ) + .hdbid(DATABASE_3_ID) + .database(DATABASE_3) + .huserid(USER_1_ID) + .user(USER_1) + .build(); + + public final static DatabaseAccess DATABASE_3_USER_1_WRITE_OWN_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_OWN) + .hdbid(DATABASE_3_ID) + .database(DATABASE_3) + .huserid(USER_1_ID) + .user(USER_1) + .build(); + + public final static DatabaseAccess DATABASE_3_USER_1_WRITE_ALL_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_ALL) + .hdbid(DATABASE_3_ID) + .database(DATABASE_3) + .huserid(USER_1_ID) + .user(USER_1) + .build(); + + public final static DatabaseAccess DATABASE_3_USER_2_READ_ACCESS = DatabaseAccess.builder() + .type(AccessType.READ) + .hdbid(DATABASE_3_ID) + .database(DATABASE_3) + .huserid(USER_2_ID) + .user(USER_2) + .build(); + + public final static DatabaseAccess DATABASE_3_USER_2_WRITE_OWN_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_OWN) + .hdbid(DATABASE_3_ID) + .database(DATABASE_3) + .huserid(USER_2_ID) + .user(USER_2) + .build(); + + public final static DatabaseAccess DATABASE_3_USER_2_WRITE_ALL_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_ALL) + .hdbid(DATABASE_3_ID) + .database(DATABASE_3) + .huserid(USER_2_ID) + .user(USER_2) + .build(); + + public final static DatabaseAccess DATABASE_3_USER_3_READ_ACCESS = DatabaseAccess.builder() + .type(AccessType.READ) + .hdbid(DATABASE_3_ID) + .database(DATABASE_3) + .huserid(USER_3_ID) + .user(USER_3) + .build(); + + public final static DatabaseAccess DATABASE_3_USER_3_WRITE_OWN_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_OWN) + .hdbid(DATABASE_3_ID) + .database(DATABASE_3) + .huserid(USER_3_ID) + .user(USER_3) + .build(); + + public final static DatabaseAccess DATABASE_3_USER_3_WRITE_ALL_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_ALL) + .hdbid(DATABASE_3_ID) + .database(DATABASE_3) + .huserid(USER_3_ID) + .user(USER_3) + .build(); + + public final static Identifier IDENTIFIER_7 = Identifier.builder() + .id(IDENTIFIER_7_ID) + .databaseId(DATABASE_4_ID) + .descriptions(List.of()) + .titles(List.of()) + .doi(IDENTIFIER_7_DOI) + .created(IDENTIFIER_7_CREATED) + .lastModified(IDENTIFIER_7_MODIFIED) + .execution(IDENTIFIER_7_EXECUTION) + .publicationDay(IDENTIFIER_7_PUBLICATION_DAY) + .publicationMonth(IDENTIFIER_7_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_7_PUBLICATION_YEAR) + .queryHash(IDENTIFIER_7_QUERY_HASH) + .resultHash(IDENTIFIER_7_RESULT_HASH) + .query(IDENTIFIER_7_QUERY) + .queryNormalized(IDENTIFIER_7_NORMALIZED) + .resultNumber(IDENTIFIER_7_RESULT_NUMBER) + .publisher(IDENTIFIER_7_PUBLISHER) + .type(IDENTIFIER_7_TYPE) + .createdBy(USER_4_ID) + .licenses(List.of()) + .creators(List.of(IDENTIFIER_7_CREATOR_1)) + .funders(List.of()) + .build(); + + public final static Database DATABASE_4 = Database.builder() + .id(DATABASE_4_ID) + .created(Instant.now().minus(4, HOURS)) + .lastModified(Instant.now()) + .isPublic(DATABASE_4_PUBLIC) + .name(DATABASE_4_NAME) + .description(DATABASE_4_DESCRIPTION) + .identifiers(List.of(IDENTIFIER_7)) + .cid(CONTAINER_4_ID) + .container(CONTAINER_4) + .internalName(DATABASE_4_INTERNALNAME) + .exchangeName(DATABASE_4_EXCHANGE) + .created(DATABASE_4_CREATED) + .lastModified(DATABASE_4_LAST_MODIFIED) + .createdBy(DATABASE_4_CREATOR) + .creator(USER_4) + .ownedBy(DATABASE_4_OWNER) + .owner(USER_4) + .contactPerson(USER_4_ID) + .contact(USER_4) + .tables(List.of()) + .views(List.of()) + .build(); + + public final static DatabaseAccess DATABASE_4_USER_1_READ_ACCESS = DatabaseAccess.builder() + .type(AccessType.READ) + .hdbid(DATABASE_4_ID) + .database(DATABASE_4) + .huserid(USER_1_ID) + .build(); + + public final static DatabaseAccess DATABASE_4_USER_1_WRITE_OWN_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_OWN) + .hdbid(DATABASE_4_ID) + .database(DATABASE_4) + .huserid(USER_1_ID) + .build(); + + public final static DatabaseAccess DATABASE_4_USER_1_WRITE_ALL_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_ALL) + .hdbid(DATABASE_4_ID) + .database(DATABASE_4) + .huserid(USER_1_ID) + .build(); + + public final static DatabaseAccess DATABASE_4_USER_2_READ_ACCESS = DatabaseAccess.builder() + .type(AccessType.READ) + .hdbid(DATABASE_4_ID) + .database(DATABASE_4) + .huserid(USER_2_ID) + .build(); + + public final static DatabaseAccess DATABASE_4_USER_2_WRITE_OWN_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_OWN) + .hdbid(DATABASE_4_ID) + .database(DATABASE_4) + .huserid(USER_2_ID) + .build(); + + public final static DatabaseAccess DATABASE_4_USER_2_WRITE_ALL_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_ALL) + .hdbid(DATABASE_4_ID) + .database(DATABASE_4) + .huserid(USER_2_ID) + .build(); + + public final static DatabaseAccess DATABASE_4_USER_3_READ_ACCESS = DatabaseAccess.builder() + .type(AccessType.READ) + .hdbid(DATABASE_4_ID) + .database(DATABASE_4) + .huserid(USER_3_ID) + .build(); + + public final static DatabaseAccess DATABASE_4_USER_3_WRITE_OWN_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_OWN) + .hdbid(DATABASE_4_ID) + .database(DATABASE_4) + .huserid(USER_3_ID) + .build(); + + public final static DatabaseAccess DATABASE_4_USER_3_WRITE_ALL_ACCESS = DatabaseAccess.builder() + .type(AccessType.WRITE_ALL) + .hdbid(DATABASE_4_ID) + .database(DATABASE_4) + .huserid(USER_3_ID) + .build(); + } diff --git a/dbrepo-mirror-service/.gitignore b/dbrepo-mirror-service/.gitignore deleted file mode 100644 index 7731f1adf24dc32351fdde402faa04b19e2f389f..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### Generated ### -ready - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/dbrepo-mirror-service/.mvn/wrapper/MavenWrapperDownloader.java b/dbrepo-mirror-service/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index a45eb6ba269cd38f8965cef786729790945d9537..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if (mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if (mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if (!outputFile.getParentFile().exists()) { - if (!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/dbrepo-mirror-service/.mvn/wrapper/maven-wrapper.jar b/dbrepo-mirror-service/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054..0000000000000000000000000000000000000000 Binary files a/dbrepo-mirror-service/.mvn/wrapper/maven-wrapper.jar and /dev/null differ diff --git a/dbrepo-mirror-service/.mvn/wrapper/maven-wrapper.properties b/dbrepo-mirror-service/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 642d572ce90e5085986bdd9c9204b9404f028084..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,2 +0,0 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/dbrepo-mirror-service/Dockerfile b/dbrepo-mirror-service/Dockerfile deleted file mode 100644 index bbab9033a167453eaa5bcee3da1dcfcc38d4aa65..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/Dockerfile +++ /dev/null @@ -1,44 +0,0 @@ -###### FIRST STAGE ###### -FROM dbrepo-metadata-service:build as dependency -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -###### SECOND STAGE ###### -FROM maven:3-openjdk-17 as build -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -COPY ./pom.xml ./ - -RUN mvn -fn -B dependency:go-offline - -COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien - -COPY ./rest-service ./rest-service -COPY ./services ./services -COPY ./report ./report - -# Make sure it compiles -RUN mvn clean package -DskipTests - -###### THIRD STAGE ###### -FROM openjdk:17-alpine as runtime -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -RUN apk --no-cache add curl bash - -ENV METADATA_DB=fda -ENV METADATA_HOST=metadata-db -ENV METADATA_JDBC_EXTRA_ARGS="" -ENV METADATA_PASSWORD=dbrepo -ENV METADATA_USERNAME=root -ENV SEARCH_USERNAME=admin -ENV SEARCH_PASSWORD=admin -ENV LOG_LEVEL=debug -ENV SYNC_RATE=60 - -WORKDIR /app - -COPY --from=build ./rest-service/target/rest-service-*.jar ./mirror-service.jar - -EXPOSE 9050 - -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./mirror-service.jar"] diff --git a/dbrepo-mirror-service/README.md b/dbrepo-mirror-service/README.md deleted file mode 100644 index c38ce06f4005ff679c8a50309b848254cb1f1183..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Mirror Service - -## Actuator - -- Info: http://localhost:9050/actuator/info -- Health: http://localhost:9050/actuator/health - - Readiness: http://localhost:9050/actuator/health/readiness - - Liveness: http://localhost:9050/actuator/health/liveness -- Prometheus: http://localhost:9050/actuator/prometheus - -## Swagger UI Endpoints - -- Swagger UI: http://localhost:9050/swagger-ui/index.html - -## OpenAPI Endpoints - -- OpenAPI v3 as .yaml: http://localhost:9050/v3/api-docs.yaml diff --git a/dbrepo-mirror-service/mvnw b/dbrepo-mirror-service/mvnw deleted file mode 100755 index a16b5431b4c3cab50323a3f558003fd0abd87dad..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/mvnw +++ /dev/null @@ -1,310 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` - fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/dbrepo-mirror-service/mvnw.cmd b/dbrepo-mirror-service/mvnw.cmd deleted file mode 100644 index c8d43372c986d97911cdc21bd87e0cbe3d83bdda..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/mvnw.cmd +++ /dev/null @@ -1,182 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM https://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/dbrepo-mirror-service/pom.xml b/dbrepo-mirror-service/pom.xml deleted file mode 100644 index aefd7d87b05a68d904d7b8435483bc4a709427a6..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/pom.xml +++ /dev/null @@ -1,266 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-parent</artifactId> - <version>3.0.6</version> - </parent> - - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-mirror-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-mirror-service</name> - <description> - The query service provides an interface to insert data into the tables created by the table service. It - also allows for view-only (possibly paginated and versioned) query execution to the raw data and consumes - messages in the message queue from the Broker Service. - </description> - <url>https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/</url> - <developers> - <developer> - <name>Martin Weise</name> - <email>martin.weise@tuwien.ac.at</email> - <organization>TU Wien</organization> - </developer> - </developers> - - <packaging>pom</packaging> - <modules> - <module>rest-service</module> - <module>services</module> - <module>report</module> - </modules> - - <properties> - <java.version>17</java.version> - <spring-cloud.version>4.0.2</spring-cloud.version> - <mapstruct.version>1.5.5.Final</mapstruct.version> - <jacoco.version>0.8.10</jacoco.version> - <jwt.version>4.3.0</jwt.version> - <opencsv.version>5.7.1</opencsv.version> - <super-csv.version>2.4.0</super-csv.version> - <jsql.version>4.6</jsql.version> - <c3p0.version>0.9.5.5</c3p0.version> - <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version> - <springdoc-openapi.version>2.1.0</springdoc-openapi.version> - <hsqldb.version>2.7.2</hsqldb.version> - <testcontainers.version>1.18.3</testcontainers.version> - <opensearch-testcontainer.version>2.0.0</opensearch-testcontainer.version> - <opensearch-client.version>1.1.0</opensearch-client.version> - <opensearch-rest-client.version>2.8.0</opensearch-rest-client.version> - <jackson.version>2.15.2</jackson.version> - </properties> - - <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-bootstrap</artifactId> - <version>${spring-cloud.version}</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-security</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-test</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-actuator</artifactId> - </dependency> - <!-- Entities and API --> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-entities</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-api</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-repositories</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-test</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-data-jpa</artifactId> - </dependency> - <!-- Open API --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-api</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - <!-- DataSource --> - <dependency> - <groupId>org.mariadb.jdbc</groupId> - <artifactId>mariadb-java-client</artifactId> - <version>${mariadb.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-starter</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <!-- OpenSearch --> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-core</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-databind</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-annotations</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-high-level-client</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-client-sniffer</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <!-- AMPQ --> - <dependency> - <groupId>com.rabbitmq</groupId> - <artifactId>amqp-client</artifactId> - <version>${rabbit-amqp-client.version}</version> - </dependency> - <!-- Testing --> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-test-autoconfigure</artifactId> - <version>${opensearch-client.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <exclusions> - <exclusion> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-vintage-engine</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>junit-jupiter</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>junit-jupiter</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.opensearch</groupId> - <artifactId>opensearch-testcontainers</artifactId> - <version>${opensearch-testcontainer.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - </dependency> - <!-- IDE --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - </dependency> - <!-- Mapping --> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct-processor</artifactId> - <version>${mapstruct.version}</version> - <optional>true</optional><!-- IntelliJ --> - </dependency> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - <version>${mapstruct.version}</version> - </dependency> - </dependencies> - - <build> - <resources> - <resource> - <directory>${basedir}/src/main/resources</directory> - <filtering>true</filtering> - <includes> - <include>**/application*.yml</include> - </includes> - </resource> - </resources> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <configuration> - <excludes> - <exclude>at/tuwien/mapper/**/*</exclude> - <exclude>at/tuwien/exception/**/*</exclude> - <exclude>at/tuwien/config/**/*</exclude> - <exclude>at/tuwien/auth/**/*</exclude> - <exclude>at/tuwien/handlers/**/*</exclude> - <exclude>**/DbrepoSearchSyncAgent.class</exclude> - </excludes> - </configuration> - <executions> - <execution> - <id>default-prepare-agent</id> - <goals> - <goal>prepare-agent</goal> - </goals> - </execution> - <execution> - <id>report</id> - <phase>verify</phase> - <goals> - <goal>report</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> diff --git a/dbrepo-mirror-service/report/pom.xml b/dbrepo-mirror-service/report/pom.xml deleted file mode 100644 index 33b14b5068c5cf950b93772c7334b5d2adc5e17a..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/report/pom.xml +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-mirror-service</artifactId> - <version>1.3.0</version> - </parent> - - <artifactId>report</artifactId> - <version>1.3.0</version> - <name>dbrepo-mirror-service-report</name> - <description> - This module is only intended for the pipeline coverage report. See the detailed report in the - respective modules - </description> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>rest-service</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <executions> - <execution> - <id>report-aggregate</id> - <phase>verify</phase> - <goals> - <goal>report-aggregate</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-mirror-service/rest-service/pom.xml b/dbrepo-mirror-service/rest-service/pom.xml deleted file mode 100644 index fce01ec3e2d024bae353fcb4389621430f3418b0..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/rest-service/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-mirror-service</artifactId> - <version>1.3.0</version> - </parent> - - <artifactId>rest-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-mirror-service-rest-service</name> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>repackage</goal><!-- to make it exuteable with $ java -jar ./app.jar --> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-mirror-service/rest-service/src/main/java/at/tuwien/DbrepoMirrorServiceApplication.java b/dbrepo-mirror-service/rest-service/src/main/java/at/tuwien/DbrepoMirrorServiceApplication.java deleted file mode 100644 index aee057ef15575490f57f9984312ee4199d386822..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/rest-service/src/main/java/at/tuwien/DbrepoMirrorServiceApplication.java +++ /dev/null @@ -1,27 +0,0 @@ -package at.tuwien; - -import lombok.extern.log4j.Log4j2; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration; -import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; -import org.springframework.data.jpa.repository.config.EnableJpaAuditing; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -@Log4j2 -@EnableJpaAuditing -@EnableTransactionManagement -@EntityScan(basePackages = {"at.tuwien.entities"}) -@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.sdb"}) -@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb"}) -@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class, ElasticsearchRestClientAutoConfiguration.class}) -public class DbrepoMirrorServiceApplication { - - public static void main(String[] args) { - SpringApplication.run(DbrepoMirrorServiceApplication.class); - } - -} diff --git a/dbrepo-mirror-service/rest-service/src/main/resources/application-local.yml b/dbrepo-mirror-service/rest-service/src/main/resources/application-local.yml deleted file mode 100644 index 4eb609d9ae7da903dd2dd39e535fe1be32790b68..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/rest-service/src/main/resources/application-local.yml +++ /dev/null @@ -1,46 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - datasource: - url: jdbc:mariadb://localhost:3306/fda - driver-class-name: org.mariadb.jdbc.Driver - username: root - password: dbrepo - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - search: - default: - elasticsearch: - host: localhost - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: fda - jdbc: - time_zone: UTC - application: - name: search-startup-agent - opensearch: - username: admin - password: admin - host: localhost - port: 9200 - protocol: http - cloud: - loadbalancer.ribbon.enabled: false -management.endpoints.web.exposure.include: health,info,prometheus -server: - port: 9050 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: trace - org.opensearch.client.: trace - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -fda: - syncRate: 60 \ No newline at end of file diff --git a/dbrepo-mirror-service/rest-service/src/main/resources/application.yml b/dbrepo-mirror-service/rest-service/src/main/resources/application.yml deleted file mode 100644 index ac5e16cb1a6fcafba12e3a23e48ad82b8ea79c7b..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/rest-service/src/main/resources/application.yml +++ /dev/null @@ -1,58 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - autoconfigure: - exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration - datasource: - url: "jdbc:mariadb://${METADATA_HOST}:3306/${METADATA_DB}${METADATA_JDBC_EXTRA_ARGS}" - driver-class-name: org.mariadb.jdbc.Driver - username: "${METADATA_USERNAME}" - password: "${METADATA_PASSWORD}" - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - search: - default: - elasticsearch: - host: search-db - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: "${METADATA_DB}" - jdbc: - time_zone: UTC - application: - name: mirror-service - opensearch: - username: "${SEARCH_USERNAME}" - password: "${SEARCH_PASSWORD}" - host: search-db - port: 9200 - protocol: http -management: - endpoints: - web: - exposure: - include: health,info,prometheus - endpoint: - health: - probes: - enabled: true - health: - readinessState: - enabled: true - livenessState: - enabled: true -server: - port: 9050 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: "${LOG_LEVEL}" - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -fda: - syncRate: "${SYNC_RATE}" \ No newline at end of file diff --git a/dbrepo-mirror-service/rest-service/src/main/resources/config.properties b/dbrepo-mirror-service/rest-service/src/main/resources/config.properties deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-mirror-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/dbrepo-mirror-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java deleted file mode 100644 index 01f84e12b909533314c3cc741739e02801e78ee5..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien; - -import at.tuwien.test.BaseTest; -import org.springframework.test.context.TestPropertySource; - -@TestPropertySource(locations = "classpath:application.properties") -public abstract class BaseUnitTest extends BaseTest { - -} diff --git a/dbrepo-mirror-service/rest-service/src/test/java/at/tuwien/config/IndexConfigComponentTest.java b/dbrepo-mirror-service/rest-service/src/test/java/at/tuwien/config/IndexConfigComponentTest.java deleted file mode 100644 index a0e5b6071da784f74cf411ccb8ed23556835a1ba..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/rest-service/src/test/java/at/tuwien/config/IndexConfigComponentTest.java +++ /dev/null @@ -1,290 +0,0 @@ -package at.tuwien.config; - -import at.tuwien.BaseUnitTest; -import at.tuwien.service.SyncService; -import lombok.extern.log4j.Log4j2; -import org.junit.Rule; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.rules.Timeout; -import org.opensearch.client.RequestOptions; -import org.opensearch.client.RestHighLevelClient; -import org.opensearch.client.indices.GetIndexRequest; -import org.opensearch.client.indices.GetMappingsRequest; -import org.opensearch.client.indices.GetMappingsResponse; -import org.opensearch.testcontainers.OpensearchContainer; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.DynamicPropertyRegistry; -import org.springframework.test.context.DynamicPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; -import org.testcontainers.utility.DockerImageName; - -import java.io.IOException; -import java.util.LinkedHashMap; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.*; - -@Log4j2 -@Testcontainers -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class IndexConfigComponentTest extends BaseUnitTest { - - @Autowired - private SyncService syncService; - - @Autowired - private RestHighLevelClient opensearchClient; - - @Rule - public Timeout globalTimeout = Timeout.seconds(60); - - @Container - private static final OpensearchContainer opensearchContainer = new OpensearchContainer(DockerImageName.parse("opensearchproject/opensearch:2.10.0")); - - @DynamicPropertySource - static void elasticsearchProperties(DynamicPropertyRegistry registry) { - final int idx = opensearchContainer.getHttpHostAddress().lastIndexOf(':'); - registry.add("spring.opensearch.host", () -> "127.0.0.1"); - registry.add("spring.opensearch.port", () -> opensearchContainer.getHttpHostAddress().substring(idx + 1)); - registry.add("spring.opensearch.username", opensearchContainer::getUsername); - registry.add("spring.opensearch.password", opensearchContainer::getPassword); - } - - @BeforeEach - public void beforeEach() { - syncService.start(); - } - - @Test - public void index_conceptExists_succeeds() throws IOException { - - /* test */ - assertTrue(opensearchClient.indices() - .exists(new GetIndexRequest("concept"), RequestOptions.DEFAULT)); - } - - @Test - public void index_databaseExists_succeeds() throws IOException { - - /* test */ - assertTrue(opensearchClient.indices() - .exists(new GetIndexRequest("database"), RequestOptions.DEFAULT)); - } - - @Test - public void index_identifierExists_succeeds() throws IOException { - - /* test */ - assertTrue(opensearchClient.indices() - .exists(new GetIndexRequest("identifier"), RequestOptions.DEFAULT)); - } - - @Test - public void index_columnExists_succeeds() throws IOException { - - /* test */ - assertTrue(opensearchClient.indices() - .exists(new GetIndexRequest("column"), RequestOptions.DEFAULT)); - } - - @Test - public void index_tableExists_succeeds() throws IOException { - - /* test */ - assertTrue(opensearchClient.indices() - .exists(new GetIndexRequest("table"), RequestOptions.DEFAULT)); - } - - @Test - public void index_unitExists_succeeds() throws IOException { - - /* test */ - assertTrue(opensearchClient.indices() - .exists(new GetIndexRequest("unit"), RequestOptions.DEFAULT)); - } - - @Test - public void index_userExists_succeeds() throws IOException { - - /* test */ - assertTrue(opensearchClient.indices() - .exists(new GetIndexRequest("user"), RequestOptions.DEFAULT)); - } - - @Test - public void index_viewExists_succeeds() throws IOException { - - /* test */ - assertTrue(opensearchClient.indices() - .exists(new GetIndexRequest("view"), RequestOptions.DEFAULT)); - } - - @Test - public void index_conceptMapping_succeeds() throws IOException { - - /* test */ - final GetMappingsResponse response = opensearchClient.indices() - .getMapping(new GetMappingsRequest().indices("concept"), RequestOptions.DEFAULT); - final Map<String, String> types = getTypes("concept", response); - assertEquals("keyword", types.get("id")); - assertEquals("keyword", types.get("uri")); - assertEquals("keyword", types.get("name")); - assertEquals("text", types.get("description")); - assertEquals("date", types.get("created")); - assertNull(types.get("columns")); - } - - @Test - public void index_unitMapping_succeeds() throws IOException { - - /* test */ - final GetMappingsResponse response = opensearchClient.indices() - .getMapping(new GetMappingsRequest().indices("unit"), RequestOptions.DEFAULT); - final Map<String, String> types = getTypes("unit", response); - assertEquals("keyword", types.get("id")); - assertEquals("keyword", types.get("uri")); - assertEquals("keyword", types.get("name")); - assertEquals("text", types.get("description")); - assertEquals("date", types.get("created")); - assertNull(types.get("columns")); - } - - @Test - public void index_databaseMapping_succeeds() throws IOException { - - /* test */ - final GetMappingsResponse response = opensearchClient.indices() - .getMapping(new GetMappingsRequest().indices("database"), RequestOptions.DEFAULT); - final Map<String, String> types = getTypes("database", response); - assertEquals("keyword", types.get("id")); - assertEquals("keyword", types.get("name")); - assertEquals("keyword", types.get("exchange_name")); - assertEquals("keyword", types.get("internal_name")); - assertNull(types.get("tables")); - assertNull(types.get("views")); - assertEquals("boolean", types.get("is_public")); - assertNull(types.get("image")); - assertEquals("nested", types.get("container")); - assertNull(types.get("accesses")); - assertEquals("nested", types.get("creator")); - assertEquals("nested", types.get("owner")); - assertEquals("date", types.get("created")); - } - - @Test - public void index_identifierMapping_succeeds() throws IOException { - - /* test */ - final GetMappingsResponse response = opensearchClient.indices() - .getMapping(new GetMappingsRequest().indices("identifier"), RequestOptions.DEFAULT); - final Map<String, String> types = getTypes("identifier", response); - assertEquals("keyword", types.get("id")); - assertEquals("keyword", types.get("database_id")); - assertEquals("keyword", types.get("query_id")); - assertEquals("keyword", types.get("view_id")); - assertEquals("keyword", types.get("type")); - assertEquals("nested", types.get("titles")); - assertEquals("nested", types.get("descriptions")); - assertEquals("nested", types.get("funders")); - assertEquals("text", types.get("query")); - assertEquals("text", types.get("query_normalized")); - assertEquals("nested", types.get("related_identifiers")); - assertNull(types.get("database")); - assertEquals("text", types.get("query_hash")); - assertEquals("date", types.get("execution")); - assertEquals("text", types.get("result_hash")); - assertEquals("long", types.get("result_number")); - assertEquals("keyword", types.get("visibility")); - assertEquals("keyword", types.get("doi")); - assertEquals("text", types.get("publisher")); - assertEquals("nested", types.get("creator")); - assertEquals("integer", types.get("publication_day")); - assertEquals("integer", types.get("publication_month")); - assertEquals("integer", types.get("publication_year")); - assertEquals("keyword", types.get("language")); - assertEquals("nested", types.get("licenses")); - assertEquals("nested", types.get("creators")); - assertEquals("date", types.get("created")); - } - - @Test - public void index_viewMapping_succeeds() throws IOException { - - /* test */ - final GetMappingsResponse response = opensearchClient.indices() - .getMapping(new GetMappingsRequest().indices("view"), RequestOptions.DEFAULT); - final Map<String, String> types = getTypes("view", response); - assertEquals("keyword", types.get("id")); - assertEquals("keyword", types.get("database_id")); - assertNull(types.get("database")); - assertEquals("keyword", types.get("name")); - assertNull(types.get("identifier")); - assertEquals("keyword", types.get("internal_name")); - assertEquals("boolean", types.get("is_public")); - assertEquals("boolean", types.get("initial_view")); - assertEquals("text", types.get("query")); - assertEquals("keyword", types.get("query_hash")); - assertEquals("date", types.get("created")); - assertNull(types.get("created_by")); - assertEquals("nested", types.get("creator")); - assertNull(types.get("columns")); - assertNull(types.get("last_modified")); - } - - @Test - public void index_tableMapping_succeeds() throws IOException { - - /* test */ - final GetMappingsResponse response = opensearchClient.indices() - .getMapping(new GetMappingsRequest().indices("table"), RequestOptions.DEFAULT); - final Map<String, String> types = getTypes("table", response); - assertEquals("keyword", types.get("id")); - assertEquals("keyword", types.get("database_id")); - assertNull(types.get("database")); - assertEquals("keyword", types.get("name")); - assertEquals("keyword", types.get("internal_name")); - assertEquals("boolean", types.get("is_versioned")); - assertNull(types.get("created_by")); - assertEquals("nested", types.get("creator")); - assertEquals("nested", types.get("owner")); - assertEquals("keyword", types.get("queue_name")); - assertEquals("keyword", types.get("routing_key")); - assertEquals("text", types.get("description")); - assertEquals("boolean", types.get("is_public")); - assertEquals("date", types.get("created")); - assertNull(types.get("columns")); - assertEquals("nested", types.get("constraints")); - } - - @Test - public void index_userMapping_succeeds() throws IOException { - - /* test */ - final GetMappingsResponse response = opensearchClient.indices() - .getMapping(new GetMappingsRequest().indices("user"), RequestOptions.DEFAULT); - final Map<String, String> types = getTypes("user", response); - assertEquals("keyword", types.get("id")); - assertEquals("keyword", types.get("username")); - assertEquals("keyword", types.get("name")); - assertEquals("keyword", types.get("firstname")); - assertEquals("keyword", types.get("lastname")); - assertEquals("nested", types.get("attributes")); - assertNull(types.get("email")); - } - - private Map<String, String> getTypes(String indexName, GetMappingsResponse data) { - final Map<String, Map<String, String>> properties = (Map<String, Map<String, String>>) data.mappings().get(indexName).getSourceAsMap().get("properties"); - final Map<String, String> types = new LinkedHashMap<>(); - properties.entrySet() - .stream() - .filter(entry -> !entry.getKey().equals("_class")) - .forEach(entry -> types.put(entry.getKey(), entry.getValue().get("type"))); - return types; - } -} diff --git a/dbrepo-mirror-service/rest-service/src/test/resources/application.properties b/dbrepo-mirror-service/rest-service/src/test/resources/application.properties deleted file mode 100644 index 97fd2c93b7acd05dccb16624ac0a339577481c5f..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/rest-service/src/test/resources/application.properties +++ /dev/null @@ -1,28 +0,0 @@ -# enable local spring profile -spring.profiles.active=local - -# disable discovery -spring.cloud.discovery.enabled=false - -# disable cloud config and config discovery -spring.cloud.config.discovery.enabled=false -spring.cloud.config.enabled=false - -# internal datasource -spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA;NON_KEYWORDS=value -spring.datasource.driverClassName=org.h2.Driver -spring.datasource.username=sa -spring.datasource.password=password -spring.jpa.database-platform=org.hibernate.dialect.H2Dialect -spring.sql.init.mode=always -spring.sql.init.schema-locations=classpath*:init/schema.sql -spring.jpa.hibernate.ddl-auto=create - -# log -logging.level.org.hibernate.SQL=trace - -# rabbitmq -spring.rabbitmq.host=dbrepo-broker-service -spring.rabbitmq.virtual-host=/ -spring.rabbitmq.username=guest -spring.rabbitmq.password=guest \ No newline at end of file diff --git a/dbrepo-mirror-service/services/pom.xml b/dbrepo-mirror-service/services/pom.xml deleted file mode 100644 index d47a68af78a19ba51c7330107654fa01c04f2cb6..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/services/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-mirror-service</artifactId> - <version>1.3.0</version> - </parent> - - <artifactId>services</artifactId> - <version>1.3.0</version> - <name>dbrepo-mirror-service-services</name> - - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <source>${java.version}</source> - <target>${java.version}</target> - <annotationProcessorPaths> - <path> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <version>${lombok.version}</version> - </path> - <!-- keep this order https://stackoverflow.com/questions/47676369/mapstruct-and-lombok-not-working-together#answer-65021876 --> - <path> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct-processor</artifactId> - <version>${mapstruct.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-mirror-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-mirror-service/services/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index 69777fe635b103c1f3b4380f31ba11bcdc92a878..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,32 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.cfg.EnumFeature; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.Date; -import java.util.TimeZone; - -@Slf4j -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() throws JsonProcessingException { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new Jdk8Module()); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - objectMapper.configure(EnumFeature.WRITE_ENUMS_TO_LOWERCASE, true); - objectMapper.setTimeZone(TimeZone.getTimeZone("UTC")); - log.debug("current time is {}", objectMapper.writeValueAsString(new Date())); - return objectMapper; - } - -} diff --git a/dbrepo-mirror-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-mirror-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java deleted file mode 100644 index 48f9f2eedab0c47715f263b9d51cfa0b3ab43fb3..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java +++ /dev/null @@ -1,61 +0,0 @@ -package at.tuwien.config; - -import lombok.extern.log4j.Log4j2; -import org.apache.http.HttpHost; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.opensearch.client.RestClient; -import org.opensearch.client.RestClientBuilder; -import org.opensearch.client.RestHighLevelClient; -import org.opensearch.client.sniff.NodesSniffer; -import org.opensearch.client.sniff.OpenSearchNodesSniffer; -import org.opensearch.client.sniff.Sniffer; -import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.concurrent.TimeUnit; - -@Log4j2 -@Configuration -public class OpenSearchConfig extends AbstractOpenSearchConfiguration { - - @Value("${spring.opensearch.host}") - private String openSearchHost; - - @Value("${spring.opensearch.port}") - private Integer openSearchPort; - - @Value("${spring.opensearch.protocol}") - private String openSearchProtocol; - - @Value("${spring.opensearch.username}") - private String openSearchUsername; - - @Value("${spring.opensearch.password}") - private String openSearchPassword; - - @Bean - @Override - public RestHighLevelClient opensearchClient() { - log.debug("open search endpoint: {}://{}:{}", openSearchProtocol, openSearchHost, openSearchPort); - final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(openSearchUsername, openSearchPassword)); - RestClientBuilder builder = RestClient.builder(new HttpHost(openSearchHost, openSearchPort, openSearchProtocol)) - .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)); - return new RestHighLevelClient(builder); - } - - @Bean - public Sniffer nodesSniffer() { - final NodesSniffer nodesSniffer = new OpenSearchNodesSniffer(opensearchClient().getLowLevelClient(), - TimeUnit.SECONDS.toMillis(5), OpenSearchNodesSniffer.Scheme.HTTP); - return Sniffer.builder(opensearchClient().getLowLevelClient()) - .setNodesSniffer(nodesSniffer) - .build(); - - } -} \ No newline at end of file diff --git a/dbrepo-mirror-service/services/src/main/java/at/tuwien/config/SyncConfig.java b/dbrepo-mirror-service/services/src/main/java/at/tuwien/config/SyncConfig.java deleted file mode 100644 index 35da9ae9014414f131b0917be6656f61430ed115..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/services/src/main/java/at/tuwien/config/SyncConfig.java +++ /dev/null @@ -1,33 +0,0 @@ -package at.tuwien.config; - -import at.tuwien.service.SyncService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.event.ApplicationStartedEvent; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.event.EventListener; -import org.springframework.transaction.annotation.Transactional; - -@Log4j2 -@Configuration -public class SyncConfig { - - @Value("${fda.syncRate}") - private Long syncRate; - - private final SyncService syncService; - - @Autowired - public SyncConfig(SyncService syncService) { - this.syncService = syncService; - } - - @EventListener(ApplicationStartedEvent.class) - @Transactional - public void init() { - log.debug("sync rate is {} second(s)", syncRate); - syncService.start(); - } - -} diff --git a/dbrepo-mirror-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-mirror-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java deleted file mode 100644 index 7e4adb3405d14d50a01098d9d82cefb4532fdd89..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java +++ /dev/null @@ -1,77 +0,0 @@ -package at.tuwien.config; - -import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; -import io.swagger.v3.oas.annotations.security.SecurityScheme; -import jakarta.servlet.http.HttpServletResponse; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.web.SecurityFilterChain; -import org.springframework.security.web.util.matcher.AntPathRequestMatcher; -import org.springframework.security.web.util.matcher.OrRequestMatcher; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -@Configuration -@EnableWebSecurity -@EnableGlobalMethodSecurity(prePostEnabled = true) -@SecurityScheme( - name = "bearerAuth", - type = SecuritySchemeType.HTTP, - bearerFormat = "JWT", - scheme = "bearer" -) -public class WebSecurityConfig { - - @Bean - public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - final OrRequestMatcher internalEndpoints = new OrRequestMatcher( - new AntPathRequestMatcher("/actuator/**", "GET"), - new AntPathRequestMatcher("/v3/api-docs.yaml"), - new AntPathRequestMatcher("/v3/api-docs/**"), - new AntPathRequestMatcher("/swagger-ui/**"), - new AntPathRequestMatcher("/swagger-ui.html") - ); - /* enable CORS and disable CSRF */ - http = http.cors().and().csrf().disable(); - /* set session management to stateless */ - http = http - .sessionManagement() - .sessionCreationPolicy(SessionCreationPolicy.STATELESS) - .and(); - /* set unauthorized requests exception handler */ - http = http - .exceptionHandling() - .authenticationEntryPoint( - (request, response, ex) -> { - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, - ex.getMessage() - ); - } - ).and(); - /* set permissions on endpoints */ - http.authorizeHttpRequests() - /* our internal endpoints */ - .requestMatchers(internalEndpoints).permitAll() - /* our private endpoints */ - .anyRequest().authenticated(); - return http.build(); - } - - @Bean - public CorsFilter corsFilter() { - final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - final CorsConfiguration config = new CorsConfiguration(); - config.setAllowCredentials(true); - config.addAllowedOriginPattern("*"); - config.addAllowedHeader("*"); - config.addAllowedMethod("*"); - source.registerCorsConfiguration("/**", config); - return new CorsFilter(source); - } - -} diff --git a/dbrepo-mirror-service/services/src/main/java/at/tuwien/scheduler/SyncScheduler.java b/dbrepo-mirror-service/services/src/main/java/at/tuwien/scheduler/SyncScheduler.java deleted file mode 100644 index 9d2ea0e1f8af54e78297d26c96c0728c6e9b7601..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/services/src/main/java/at/tuwien/scheduler/SyncScheduler.java +++ /dev/null @@ -1,25 +0,0 @@ -package at.tuwien.scheduler; - -import at.tuwien.service.SyncService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -import java.util.concurrent.TimeUnit; - -@Component -public class SyncScheduler { - - private final SyncService syncService; - - @Autowired - public SyncScheduler(SyncService syncService) { - this.syncService = syncService; - } - - @Scheduled(fixedRateString = "${fda.syncRate}", timeUnit = TimeUnit.SECONDS) - public void schedule() { - syncService.start(); - } - -} diff --git a/dbrepo-mirror-service/services/src/main/java/at/tuwien/service/SyncService.java b/dbrepo-mirror-service/services/src/main/java/at/tuwien/service/SyncService.java deleted file mode 100644 index 27366e4136c4f3ebb26d1ce1952c3b2424449ec0..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/services/src/main/java/at/tuwien/service/SyncService.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.service; - -public interface SyncService { - - /** - * Synchronize the metadata database to the search database - */ - void start(); -} diff --git a/dbrepo-mirror-service/services/src/main/java/at/tuwien/service/impl/SyncServiceImpl.java b/dbrepo-mirror-service/services/src/main/java/at/tuwien/service/impl/SyncServiceImpl.java deleted file mode 100644 index cae4f1f7e9262ad320da26082c1e211ba4e6f02b..0000000000000000000000000000000000000000 --- a/dbrepo-mirror-service/services/src/main/java/at/tuwien/service/impl/SyncServiceImpl.java +++ /dev/null @@ -1,146 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.columns.ColumnDto; -import at.tuwien.api.database.table.columns.concepts.ConceptDto; -import at.tuwien.api.database.table.columns.concepts.UnitDto; -import at.tuwien.api.identifier.IdentifierDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.mapper.*; -import at.tuwien.repository.mdb.*; -import at.tuwien.repository.sdb.*; -import at.tuwien.service.SyncService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Log4j2 -@Service -public class SyncServiceImpl implements SyncService { - - private final UserMapper userMapper; - private final ViewMapper viewMapper; - private final TableMapper tableMapper; - private final OntologyMapper ontologyMapper; - private final DatabaseMapper databaseMapper; - private final ViewRepository viewRepository; - private final UnitRepository unitRepository; - private final UserRepository userRepository; - private final TableRepository tableRepository; - private final IdentifierMapper identifierMapper; - private final ConceptRepository conceptRepository; - private final UnitIdxRepository unitIdxRepository; - private final UserIdxRepository userIdxRepository; - private final ViewIdxRepository viewIdxRepository; - private final DatabaseRepository databaseRepository; - private final TableIdxRepository tableIdxRepository; - private final IdentifierRepository identifierRepository; - private final ConceptIdxRepository conceptIdxRepository; - private final DatabaseIdxRepository databaseIdxRepository; - private final TableColumnRepository tableColumnRepository; - private final IdentifierIdxRepository identifierIdxRepository; - private final TableColumnIdxRepository tableColumnIdxRepository; - - @Autowired - public SyncServiceImpl(UserMapper userMapper, ViewMapper viewMapper, TableMapper tableMapper, - OntologyMapper ontologyMapper, DatabaseMapper databaseMapper, ViewRepository viewRepository, - UnitRepository unitRepository, UserRepository userRepository, TableRepository tableRepository, - IdentifierMapper identifierMapper, ConceptRepository conceptRepository, - UnitIdxRepository unitIdxRepository, UserIdxRepository userIdxRepository, - ViewIdxRepository viewIdxRepository, DatabaseRepository databaseRepository, - TableIdxRepository tableIdxRepository, IdentifierRepository identifierRepository, - ConceptIdxRepository conceptIdxRepository, DatabaseIdxRepository databaseIdxRepository, - TableColumnRepository tableColumnRepository, IdentifierIdxRepository identifierIdxRepository, - TableColumnIdxRepository tableColumnIdxRepository) { - this.userMapper = userMapper; - this.viewMapper = viewMapper; - this.tableMapper = tableMapper; - this.ontologyMapper = ontologyMapper; - this.databaseMapper = databaseMapper; - this.viewRepository = viewRepository; - this.unitRepository = unitRepository; - this.userRepository = userRepository; - this.tableRepository = tableRepository; - this.identifierMapper = identifierMapper; - this.conceptRepository = conceptRepository; - this.unitIdxRepository = unitIdxRepository; - this.userIdxRepository = userIdxRepository; - this.viewIdxRepository = viewIdxRepository; - this.databaseRepository = databaseRepository; - this.tableIdxRepository = tableIdxRepository; - this.identifierRepository = identifierRepository; - this.conceptIdxRepository = conceptIdxRepository; - this.databaseIdxRepository = databaseIdxRepository; - this.tableColumnRepository = tableColumnRepository; - this.identifierIdxRepository = identifierIdxRepository; - this.tableColumnIdxRepository = tableColumnIdxRepository; - } - - @Override - @Transactional - public void start() { - /* concepts */ - final List<ConceptDto> concepts = conceptRepository.findAll() - .stream() - .map(ontologyMapper::tableColumnConceptToConceptDto) - .toList(); - conceptIdxRepository.saveAll(concepts); - log.debug("saved {} concepts to open search database", concepts.size()); - /* databases */ - final List<DatabaseDto> databases = databaseRepository.findAll() - .stream() - .map(databaseMapper::databaseToDatabaseDto) - .toList(); - databaseIdxRepository.saveAll(databases); - log.debug("saved {} databases to open search database", databases.size()); - /* identifiers */ - final List<IdentifierDto> identifiers = identifierRepository.findAll() - .stream() - .map(identifierMapper::identifierToIdentifierDto) - .toList(); - identifierIdxRepository.saveAll(identifiers); - log.debug("saved {} identifiers to open search database", identifiers.size()); - /* columns */ - final List<ColumnDto> columns = tableColumnRepository.findAll() - .stream() - .map(tableMapper::tableColumnToColumnDto) - .toList(); - tableColumnIdxRepository.saveAll(columns); - log.debug("saved {} columns to open search database", columns.size()); - /* tables */ - final List<TableDto> tables = tableRepository.findAll() - .stream() - .map(tableMapper::tableToTableDto) - .toList(); - tableIdxRepository.saveAll(tables); - log.debug("saved {} tables to open search database", tables.size()); - /* units */ - final List<UnitDto> units = unitRepository.findAll() - .stream() - .map(ontologyMapper::tableColumnUnitToUnitDto) - .toList(); - unitIdxRepository.saveAll(units); - log.debug("saved {} units to open search database", units.size()); - /* users */ - final List<UserDto> users = userRepository.findAll() - .stream() - .map(userMapper::userToUserDto) - .toList(); - userIdxRepository.saveAll(users); - log.debug("saved {} users to open search database", users.size()); - /* view */ - final List<ViewDto> views = viewRepository.findAll() - .stream() - .map(viewMapper::viewToViewDto) - .toList(); - viewIdxRepository.saveAll(views); - log.debug("saved {} views to open search database", views.size()); - log.info("Synchronized 8 indices"); - } - -} diff --git a/dbrepo-search-db/init/create-indices.sh b/dbrepo-search-db/init/create-indices.sh index 73b67344ff495817a0b574b0d1bce9a378eddf37..c7b51e2e1a0c859d0a337c8be899a721bc6fb3bb 100644 --- a/dbrepo-search-db/init/create-indices.sh +++ b/dbrepo-search-db/init/create-indices.sh @@ -7,17 +7,16 @@ do echo "Not yet ready, wait 5s ..." sleep 5 done -for index in "user" "view" "database" "identifier" "concept" "column" "table" "unit"; do - STATUS=$(curl ${CURL_EXTRA_ARGS} -sSLI "${OPENSEARCH_HOST}/$index" -u "${OPENSEARCH_USERNAME}:${OPENSEARCH_PASSWORD}" 2>/dev/null | head -n 1 | cut -d$' ' -f2) - if [ "${STATUS}" == "200" ]; then - echo "Index $index already present, skipping..." - continue - fi - RES=$(curl ${CURL_EXTRA_ARGS} -sSL -X PUT "${OPENSEARCH_HOST}/$index" -u "${OPENSEARCH_USERNAME}:${OPENSEARCH_PASSWORD}" -H "Content-Type: application/json" --data "@$index.json") - ACK=$(echo "$RES" | jq .acknowledged) - if [ $ACK ]; then - echo "Created $index index" - else - echo "Failed to create $index index: $RES" - fi -done \ No newline at end of file +index="database" +STATUS=$(curl ${CURL_EXTRA_ARGS} -sSLI "${OPENSEARCH_HOST}/$index" -u "${OPENSEARCH_USERNAME}:${OPENSEARCH_PASSWORD}" 2>/dev/null | head -n 1 | cut -d$' ' -f2) +if [ "${STATUS}" == "200" ]; then + echo "Index $index already present, skipping..." + continue +fi +RES=$(curl ${CURL_EXTRA_ARGS} -sSL -X PUT "${OPENSEARCH_HOST}/$index" -u "${OPENSEARCH_USERNAME}:${OPENSEARCH_PASSWORD}" -H "Content-Type: application/json" --data "@$index.json") +ACK=$(echo "$RES" | jq .acknowledged) +if [ $ACK ]; then + echo "Created $index index" +else + echo "Failed to create $index index: $RES" +fi diff --git a/dbrepo-search-db/init/indices/column.json b/dbrepo-search-db/init/indices/column.json deleted file mode 100644 index ca5f82d2115030b0a01d077e6ef49df891489ace..0000000000000000000000000000000000000000 --- a/dbrepo-search-db/init/indices/column.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "aliases": {}, - "mappings": { - "properties": { - "auto_generated": { - "type": "boolean" - }, - "column_type": { - "type": "keyword" - }, - "concept": { - "type": "nested", - "include_in_parent": true, - "properties": { - "created": { - "type": "date", - "format": "date_optional_time||epoch_millis" - }, - "description": { - "type": "text" - }, - "id": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "uri": { - "type": "keyword" - } - } - }, - "d": { - "type": "integer" - }, - "val_min": { - "type": "double" - }, - "val_max": { - "type": "double" - }, - "mean": { - "type": "double" - }, - "median": { - "type": "double" - }, - "std_dev": { - "type": "double" - }, - "database_id": { - "type": "keyword" - }, - "date_format": { - "type": "nested", - "include_in_parent": true, - "properties": { - "created_at": { - "type": "date", - "format": "date_optional_time||epoch_millis" - } - } - }, - "enums": { - "type": "nested" - }, - "id": { - "type": "keyword" - }, - "index_length": { - "type": "integer" - }, - "internal_name": { - "type": "keyword" - }, - "is_null_allowed": { - "type": "boolean" - }, - "is_primary_key": { - "type": "boolean" - }, - "is_public": { - "type": "boolean" - }, - "name": { - "type": "keyword" - }, - "sets": { - "type": "nested" - }, - "size": { - "type": "integer" - }, - "table_id": { - "type": "keyword" - }, - "unit": { - "type": "nested", - "include_in_parent": true, - "properties": { - "created": { - "type": "date", - "format": "date_optional_time||epoch_millis" - }, - "description": { - "type": "text" - }, - "id": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "uri": { - "type": "keyword" - } - } - } - } - }, - "settings": { - "index": { - "number_of_shards": "1", - "number_of_replicas": "1" - } - } -} \ No newline at end of file diff --git a/dbrepo-search-db/init/indices/concept.json b/dbrepo-search-db/init/indices/concept.json deleted file mode 100644 index 8564e7ba7731f5f04edf7a3abc6b116ed36c2fc7..0000000000000000000000000000000000000000 --- a/dbrepo-search-db/init/indices/concept.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "aliases": {}, - "mappings": { - "properties": { - "_class": { - "type": "keyword", - "index": false, - "doc_values": false - }, - "created": { - "type": "date", - "format": "date_optional_time||epoch_millis" - }, - "description": { - "type": "text" - }, - "id": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "uri": { - "type": "keyword" - } - } - }, - "settings": { - "index": { - "number_of_shards": "1", - "number_of_replicas": "1" - } - } -} \ No newline at end of file diff --git a/dbrepo-search-db/init/indices/database.json b/dbrepo-search-db/init/indices/database.json index ce5d4c4fb690c4c77bb7aa78c208a5e7b1e96387..bb015f2384fc499589b9e0028aa8980198c4e92b 100644 --- a/dbrepo-search-db/init/indices/database.json +++ b/dbrepo-search-db/init/indices/database.json @@ -2,13 +2,323 @@ "aliases": {}, "mappings": { "properties": { + "accesses": { + "type": "nested", + "properties": { + "access_type": { + "type": "keyword" + }, + "created": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "database_id": { + "type": "keyword" + } + } + }, + "identifier": { + "type": "nested", + "properties": { + "creators": { + "type": "nested", + "properties": { + "affiliation": { + "type": "keyword" + }, + "affiliation_identifier": { + "type": "keyword" + }, + "affiliation_identifier_scheme_type": { + "type": "keyword" + }, + "creator_name": { + "type": "keyword" + }, + "firstname": { + "type": "keyword" + }, + "id": { + "type": "keyword" + }, + "lastname": { + "type": "keyword" + }, + "name_identifier": { + "type": "keyword" + }, + "name_identifier_scheme_type": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "database_id": { + "type": "keyword" + }, + "descriptions": { + "type": "nested", + "properties": { + "description": { + "type": "text" + }, + "id": { + "type": "keyword" + }, + "language": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "doi": { + "type": "keyword" + }, + "execution": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "funders": { + "type": "nested", + "properties": { + "award_number": { + "type": "keyword" + }, + "award_title": { + "type": "keyword" + }, + "funder_identifier": { + "type": "keyword" + }, + "funder_identifier_type": { + "type": "keyword" + }, + "funder_name": { + "type": "keyword" + }, + "id": { + "type": "keyword" + } + } + }, + "language": { + "type": "keyword" + }, + "licenses": { + "type": "nested", + "properties": { + "identifier": { + "type": "keyword" + }, + "uri": { + "type": "keyword" + } + } + }, + "publication_day": { + "type": "integer" + }, + "publication_month": { + "type": "integer" + }, + "publication_year": { + "type": "integer" + }, + "publisher": { + "type": "keyword" + }, + "query": { + "type": "text" + }, + "query_hash": { + "type": "keyword" + }, + "query_id": { + "type": "keyword" + }, + "query_normalized": { + "type": "text" + }, + "related_identifiers": { + "type": "nested", + "properties": { + "id": { + "type": "keyword" + }, + "relation": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "value": { + "type": "keyword" + } + } + }, + "result_hash": { + "type": "keyword" + }, + "result_number": { + "type": "long" + }, + "titles": { + "type": "nested", + "properties": { + "id": { + "type": "keyword" + }, + "language": { + "type": "keyword" + }, + "title": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "type": { + "type": "keyword" + }, + "view_id": { + "type": "keyword" + }, + "visibility": { + "type": "keyword" + } + } + }, + "contact": { + "type": "nested", + "properties": { + "accesses": { + "type": "nested", + "properties": { + "access_type": { + "type": "keyword" + }, + "created": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "database_id": { + "type": "keyword" + } + } + }, + "affiliation": { + "type": "keyword" + }, + "firstname": { + "type": "keyword" + }, + "id": { + "type": "keyword" + }, + "lastname": { + "type": "keyword" + }, + "orcid": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + }, "container": { "type": "nested", - "include_in_parent": true, "properties": { "created": { "type": "date", "format": "date_optional_time||epoch_millis" + }, + "host": { + "type": "text" + }, + "id": { + "type": "keyword" + }, + "image": { + "type": "nested", + "properties": { + "created": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "date_formats": { + "type": "nested", + "properties": { + "created": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "database_format": { + "type": "keyword" + }, + "example": { + "type": "text" + }, + "has_time": { + "type": "boolean" + }, + "id": { + "type": "keyword" + }, + "unix_format": { + "type": "keyword" + } + } + }, + "dialect": { + "type": "text" + }, + "driver_class": { + "type": "text" + }, + "id": { + "type": "keyword" + }, + "jdbc_method": { + "type": "text" + }, + "name": { + "type": "keyword" + }, + "version": { + "type": "keyword" + } + } + }, + "internal_name": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "port": { + "type": "integer" + }, + "sidecar_host": { + "type": "text" + }, + "sidecar_port": { + "type": "integer" + }, + "ui_additional_flags": { + "type": "text" + }, + "ui_host": { + "type": "text" + }, + "ui_port": { + "type": "integer" } } }, @@ -18,7 +328,41 @@ }, "creator": { "type": "nested", - "include_in_parent": true + "properties": { + "accesses": { + "type": "nested", + "properties": { + "access_type": { + "type": "keyword" + }, + "created": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "database_id": { + "type": "keyword" + } + } + }, + "affiliation": { + "type": "keyword" + }, + "firstname": { + "type": "keyword" + }, + "id": { + "type": "keyword" + }, + "lastname": { + "type": "keyword" + }, + "orcid": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } }, "description": { "type": "text" @@ -26,9 +370,6 @@ "exchange_name": { "type": "keyword" }, - "exchange_type": { - "type": "keyword" - }, "id": { "type": "keyword" }, @@ -43,7 +384,948 @@ }, "owner": { "type": "nested", - "include_in_parent": true + "properties": { + "accesses": { + "type": "nested", + "properties": { + "access_type": { + "type": "keyword" + }, + "created": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "database_id": { + "type": "keyword" + } + } + }, + "affiliation": { + "type": "keyword" + }, + "firstname": { + "type": "keyword" + }, + "id": { + "type": "keyword" + }, + "lastname": { + "type": "keyword" + }, + "orcid": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + }, + "queries": { + "type": "nested", + "properties": { + "creators": { + "type": "nested", + "properties": { + "affiliation": { + "type": "keyword" + }, + "affiliation_identifier": { + "type": "keyword" + }, + "affiliation_identifier_scheme_type": { + "type": "keyword" + }, + "creator_name": { + "type": "keyword" + }, + "firstname": { + "type": "keyword" + }, + "id": { + "type": "keyword" + }, + "lastname": { + "type": "keyword" + }, + "name_identifier": { + "type": "keyword" + }, + "name_identifier_scheme_type": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "database_id": { + "type": "keyword" + }, + "descriptions": { + "type": "nested", + "properties": { + "description": { + "type": "text" + }, + "id": { + "type": "keyword" + }, + "language": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "doi": { + "type": "keyword" + }, + "execution": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "funders": { + "type": "nested", + "properties": { + "award_number": { + "type": "keyword" + }, + "award_title": { + "type": "keyword" + }, + "funder_identifier": { + "type": "keyword" + }, + "funder_identifier_type": { + "type": "keyword" + }, + "funder_name": { + "type": "keyword" + }, + "id": { + "type": "keyword" + } + } + }, + "language": { + "type": "keyword" + }, + "licenses": { + "type": "nested", + "properties": { + "identifier": { + "type": "keyword" + }, + "uri": { + "type": "keyword" + } + } + }, + "publication_day": { + "type": "integer" + }, + "publication_month": { + "type": "integer" + }, + "publication_year": { + "type": "integer" + }, + "publisher": { + "type": "keyword" + }, + "query": { + "type": "text" + }, + "query_hash": { + "type": "keyword" + }, + "query_id": { + "type": "keyword" + }, + "query_normalized": { + "type": "text" + }, + "related_identifiers": { + "type": "nested", + "properties": { + "id": { + "type": "keyword" + }, + "relation": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "value": { + "type": "keyword" + } + } + }, + "result_hash": { + "type": "keyword" + }, + "result_number": { + "type": "long" + }, + "titles": { + "type": "nested", + "properties": { + "id": { + "type": "keyword" + }, + "language": { + "type": "keyword" + }, + "title": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "type": { + "type": "keyword" + }, + "view_id": { + "type": "keyword" + }, + "visibility": { + "type": "keyword" + } + } + }, + "tables": { + "type": "nested", + "properties": { + "avg_row_length": { + "type": "long" + }, + "columns": { + "type": "nested", + "properties": { + "concept": { + "type": "nested", + "properties": { + "created": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "description": { + "type": "text" + }, + "id": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "uri": { + "type": "keyword" + } + } + }, + "created": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "d": { + "type": "integer" + }, + "date_format": { + "type": "nested", + "properties": { + "created": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "database_format": { + "type": "keyword" + }, + "example": { + "type": "text" + }, + "has_time": { + "type": "boolean" + }, + "id": { + "type": "keyword" + }, + "unix_format": { + "type": "keyword" + } + } + }, + "enums": { + "type": "nested" + }, + "id": { + "type": "keyword" + }, + "index_length": { + "type": "integer" + }, + "internal_name": { + "type": "keyword" + }, + "is_auto_generated": { + "type": "boolean" + }, + "is_null_allowed": { + "type": "boolean" + }, + "is_primary_key": { + "type": "boolean" + }, + "length": { + "type": "integer" + }, + "mean": { + "type": "double" + }, + "median": { + "type": "double" + }, + "name": { + "type": "keyword" + }, + "ordinal_position": { + "type": "integer" + }, + "size": { + "type": "integer" + }, + "std_dev": { + "type": "double" + }, + "type": { + "type": "keyword" + }, + "unit": { + "type": "nested", + "properties": { + "created": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "description": { + "type": "text" + }, + "id": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "uri": { + "type": "keyword" + } + } + }, + "val_max": { + "type": "double" + }, + "val_min": { + "type": "double" + }, + "value": { + "type": "nested" + } + } + }, + "constraints": { + "type": "nested", + "properties": { + } + }, + "created": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "data_length": { + "type": "long" + }, + "database_id": { + "type": "keyword" + }, + "description": { + "type": "text" + }, + "internal_name": { + "type": "keyword" + }, + "is_versioned": { + "type": "boolean" + }, + "max_data_length": { + "type": "long" + }, + "name": { + "type": "keyword" + }, + "num_rows": { + "type": "long" + }, + "owner": { + "type": "nested", + "properties": { + "accesses": { + "type": "nested", + "properties": { + "access_type": { + "type": "keyword" + }, + "created": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "database_id": { + "type": "keyword" + } + } + }, + "affiliation": { + "type": "keyword" + }, + "firstname": { + "type": "keyword" + }, + "id": { + "type": "keyword" + }, + "lastname": { + "type": "keyword" + }, + "orcid": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + }, + "queue_name": { + "type": "keyword" + }, + "routing_key": { + "type": "keyword" + } + } + }, + "views": { + "type": "nested", + "properties": { + "columns": { + "type": "nested", + "properties": { + "concept": { + "type": "nested", + "properties": { + "created": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "description": { + "type": "text" + }, + "id": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "uri": { + "type": "keyword" + } + } + }, + "created": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "d": { + "type": "integer" + }, + "date_format": { + "type": "nested", + "properties": { + "created": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "database_format": { + "type": "keyword" + }, + "example": { + "type": "text" + }, + "has_time": { + "type": "boolean" + }, + "id": { + "type": "keyword" + }, + "unix_format": { + "type": "keyword" + } + } + }, + "enums": { + "type": "nested" + }, + "id": { + "type": "keyword" + }, + "index_length": { + "type": "integer" + }, + "internal_name": { + "type": "keyword" + }, + "is_auto_generated": { + "type": "boolean" + }, + "is_null_allowed": { + "type": "boolean" + }, + "is_primary_key": { + "type": "boolean" + }, + "length": { + "type": "integer" + }, + "mean": { + "type": "double" + }, + "median": { + "type": "double" + }, + "name": { + "type": "keyword" + }, + "ordinal_position": { + "type": "integer" + }, + "size": { + "type": "integer" + }, + "std_dev": { + "type": "double" + }, + "type": { + "type": "keyword" + }, + "unit": { + "type": "nested", + "properties": { + "created": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "description": { + "type": "text" + }, + "id": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "uri": { + "type": "keyword" + } + } + }, + "val_max": { + "type": "double" + }, + "val_min": { + "type": "double" + }, + "value": { + "type": "nested" + } + } + }, + "created": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "identifier": { + "type": "nested", + "properties": { + "creators": { + "type": "nested", + "properties": { + "affiliation": { + "type": "keyword" + }, + "affiliation_identifier": { + "type": "keyword" + }, + "affiliation_identifier_scheme_type": { + "type": "keyword" + }, + "creator_name": { + "type": "keyword" + }, + "firstname": { + "type": "keyword" + }, + "id": { + "type": "keyword" + }, + "lastname": { + "type": "keyword" + }, + "name_identifier": { + "type": "keyword" + }, + "name_identifier_scheme_type": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "database_id": { + "type": "keyword" + }, + "descriptions": { + "type": "nested", + "properties": { + "description": { + "type": "text" + }, + "id": { + "type": "keyword" + }, + "language": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "doi": { + "type": "keyword" + }, + "execution": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "funders": { + "type": "nested", + "properties": { + "award_number": { + "type": "keyword" + }, + "award_title": { + "type": "keyword" + }, + "funder_identifier": { + "type": "keyword" + }, + "funder_identifier_type": { + "type": "keyword" + }, + "funder_name": { + "type": "keyword" + }, + "id": { + "type": "keyword" + } + } + }, + "language": { + "type": "keyword" + }, + "licenses": { + "type": "nested", + "properties": { + "identifier": { + "type": "keyword" + }, + "uri": { + "type": "keyword" + } + } + }, + "publication_day": { + "type": "integer" + }, + "publication_month": { + "type": "integer" + }, + "publication_year": { + "type": "integer" + }, + "publisher": { + "type": "keyword" + }, + "query": { + "type": "text" + }, + "query_hash": { + "type": "keyword" + }, + "query_id": { + "type": "keyword" + }, + "query_normalized": { + "type": "text" + }, + "related_identifiers": { + "type": "nested", + "properties": { + "id": { + "type": "keyword" + }, + "relation": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "value": { + "type": "keyword" + } + } + }, + "result_hash": { + "type": "keyword" + }, + "result_number": { + "type": "long" + }, + "titles": { + "type": "nested", + "properties": { + "id": { + "type": "keyword" + }, + "language": { + "type": "keyword" + }, + "title": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "type": { + "type": "keyword" + }, + "view_id": { + "type": "keyword" + }, + "visibility": { + "type": "keyword" + } + } + }, + "subsets": { + "type": "nested", + "properties": { + "creators": { + "type": "nested", + "properties": { + "affiliation": { + "type": "keyword" + }, + "affiliation_identifier": { + "type": "keyword" + }, + "affiliation_identifier_scheme_type": { + "type": "keyword" + }, + "creator_name": { + "type": "keyword" + }, + "firstname": { + "type": "keyword" + }, + "id": { + "type": "keyword" + }, + "lastname": { + "type": "keyword" + }, + "name_identifier": { + "type": "keyword" + }, + "name_identifier_scheme_type": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "database_id": { + "type": "keyword" + }, + "descriptions": { + "type": "nested", + "properties": { + "description": { + "type": "text" + }, + "id": { + "type": "keyword" + }, + "language": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "doi": { + "type": "keyword" + }, + "execution": { + "type": "date", + "format": "date_optional_time||epoch_millis" + }, + "funders": { + "type": "nested", + "properties": { + "award_number": { + "type": "keyword" + }, + "award_title": { + "type": "keyword" + }, + "funder_identifier": { + "type": "keyword" + }, + "funder_identifier_type": { + "type": "keyword" + }, + "funder_name": { + "type": "keyword" + }, + "id": { + "type": "keyword" + } + } + }, + "language": { + "type": "keyword" + }, + "licenses": { + "type": "nested", + "properties": { + "identifier": { + "type": "keyword" + }, + "uri": { + "type": "keyword" + } + } + }, + "publication_day": { + "type": "integer" + }, + "publication_month": { + "type": "integer" + }, + "publication_year": { + "type": "integer" + }, + "publisher": { + "type": "keyword" + }, + "query": { + "type": "text" + }, + "query_hash": { + "type": "keyword" + }, + "query_id": { + "type": "keyword" + }, + "query_normalized": { + "type": "text" + }, + "related_identifiers": { + "type": "nested", + "properties": { + "id": { + "type": "keyword" + }, + "relation": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "value": { + "type": "keyword" + } + } + }, + "result_hash": { + "type": "keyword" + }, + "result_number": { + "type": "long" + }, + "titles": { + "type": "nested", + "properties": { + "id": { + "type": "keyword" + }, + "language": { + "type": "keyword" + }, + "title": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "type": { + "type": "keyword" + }, + "view_id": { + "type": "keyword" + }, + "visibility": { + "type": "keyword" + } + } + }, + "internal_name": { + "type": "keyword" + }, + "is_initial_view": { + "type": "boolean" + }, + "is_public": { + "type": "boolean" + }, + "name": { + "type": "keyword" + }, + "query": { + "type": "text" + }, + "query_hash": { + "type": "keyword" + } + } } } }, diff --git a/dbrepo-search-db/init/indices/identifier.json b/dbrepo-search-db/init/indices/identifier.json deleted file mode 100644 index 2d2390992ad7c9cad0220555318c0d47e998c9a6..0000000000000000000000000000000000000000 --- a/dbrepo-search-db/init/indices/identifier.json +++ /dev/null @@ -1,235 +0,0 @@ -{ - "aliases": {}, - "mappings": { - "properties": { - "created": { - "type": "date", - "format": "date_optional_time||epoch_millis" - }, - "creator": { - "type": "nested", - "properties": { - "attributes": { - "type": "nested", - "include_in_parent": true, - "properties": { - "affiliation": { - "type": "keyword" - }, - "orcid": { - "type": "keyword" - } - } - }, - "firstname": { - "type": "keyword" - }, - "id": { - "type": "keyword" - }, - "lastname": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - }, - "creators": { - "type": "nested", - "include_in_parent": true, - "properties": { - "affiliation": { - "type": "keyword" - }, - "affiliation_identifier": { - "type": "keyword" - }, - "affiliation_identifier_scheme": { - "type": "keyword" - }, - "affiliation_identifier_scheme_uri": { - "type": "keyword" - }, - "creator_name": { - "type": "text" - }, - "firstname": { - "type": "text" - }, - "id": { - "type": "keyword" - }, - "lastname": { - "type": "text" - }, - "name_identifier": { - "type": "keyword" - }, - "name_identifier_scheme": { - "type": "keyword" - }, - "name_identifier_scheme_uri": { - "type": "keyword" - }, - "name_type": { - "type": "keyword" - } - } - }, - "database_id": { - "type": "keyword" - }, - "descriptions": { - "type": "nested", - "include_in_parent": true, - "properties": { - "description": { - "type": "text" - }, - "id": { - "type": "keyword" - }, - "language": { - "type": "keyword" - }, - "type": { - "type": "keyword" - } - } - }, - "doi": { - "type": "keyword" - }, - "execution": { - "type": "date", - "format": "date_optional_time||epoch_millis" - }, - "funders": { - "type": "nested", - "include_in_parent": true, - "properties": { - "award_number": { - "type": "keyword" - }, - "award_title": { - "type": "keyword" - }, - "funder_identifier": { - "type": "keyword" - }, - "funder_identifier_type": { - "type": "keyword" - }, - "funder_name": { - "type": "keyword" - }, - "id": { - "type": "keyword" - }, - "scheme_uri": { - "type": "keyword" - } - } - }, - "id": { - "type": "keyword" - }, - "language": { - "type": "keyword" - }, - "licenses": { - "type": "nested", - "include_in_parent": true - }, - "publication_day": { - "type": "integer" - }, - "publication_month": { - "type": "integer" - }, - "publication_year": { - "type": "integer" - }, - "publisher": { - "type": "text" - }, - "query": { - "type": "text" - }, - "query_hash": { - "type": "text" - }, - "query_id": { - "type": "keyword" - }, - "query_normalized": { - "type": "text" - }, - "related_identifiers": { - "type": "nested", - "include_in_parent": true, - "properties": { - "created": { - "type": "date", - "format": "date_optional_time||epoch_millis" - }, - "id": { - "type": "keyword" - }, - "relation": { - "type": "keyword" - }, - "type": { - "type": "keyword" - }, - "value": { - "type": "keyword" - } - } - }, - "result_hash": { - "type": "text" - }, - "result_number": { - "type": "long" - }, - "titles": { - "type": "nested", - "include_in_parent": true, - "properties": { - "id": { - "type": "keyword" - }, - "language": { - "type": "keyword" - }, - "title": { - "type": "keyword" - }, - "type": { - "type": "keyword" - } - } - }, - "type": { - "type": "keyword" - }, - "view_id": { - "type": "keyword" - }, - "visibility": { - "type": "keyword" - } - } - }, - "settings": { - "index": { - "number_of_shards": "1", - "number_of_replicas": "1" - } - } -} \ No newline at end of file diff --git a/dbrepo-search-db/init/indices/table.json b/dbrepo-search-db/init/indices/table.json deleted file mode 100644 index 2db4eac6c7e735b44e885e7a32259d53c2d20840..0000000000000000000000000000000000000000 --- a/dbrepo-search-db/init/indices/table.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "aliases": {}, - "mappings": { - "properties": { - "constraints": { - "type": "nested", - "include_in_parent": true, - "properties": { - "checks": { - "type": "nested" - }, - "foreign_keys": { - "type": "nested", - "include_in_parent": true, - "properties": { - "_class": { - "type": "keyword", - "index": false, - "doc_values": false - }, - "on_delete": { - "type": "keyword" - }, - "on_update": { - "type": "keyword" - } - } - }, - "uniques": { - "type": "nested", - "include_in_parent": true, - "properties": { - "id": { - "type": "keyword" - } - } - } - } - }, - "created": { - "type": "date", - "format": "date_optional_time||epoch_millis" - }, - "creator": { - "type": "nested", - "include_in_parent": true, - "properties": { - "attributes": { - "type": "nested", - "include_in_parent": true, - "properties": { - "affiliation": { - "type": "keyword" - }, - "orcid": { - "type": "keyword" - } - } - }, - "firstname": { - "type": "keyword" - }, - "id": { - "type": "keyword" - }, - "lastname": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - }, - "description": { - "type": "text" - }, - "id": { - "type": "keyword" - }, - "database_id": { - "type": "keyword" - }, - "internal_name": { - "type": "keyword" - }, - "is_public": { - "type": "boolean" - }, - "is_versioned": { - "type": "boolean" - }, - "name": { - "type": "keyword" - }, - "owner": { - "type": "nested", - "include_in_parent": true, - "properties": { - "attributes": { - "type": "nested", - "include_in_parent": true, - "properties": { - "affiliation": { - "type": "keyword" - }, - "orcid": { - "type": "keyword" - } - } - }, - "firstname": { - "type": "keyword" - }, - "id": { - "type": "keyword" - }, - "lastname": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - }, - "queue_name": { - "type": "keyword" - }, - "queue_type": { - "type": "keyword" - }, - "routing_key": { - "type": "keyword" - } - } - }, - "settings": { - "index": { - "number_of_shards": "1", - "number_of_replicas": "1" - } - } -} \ No newline at end of file diff --git a/dbrepo-search-db/init/indices/unit.json b/dbrepo-search-db/init/indices/unit.json deleted file mode 100644 index aeb66c7eaacbc7a4783b28a53b45360feb8e0981..0000000000000000000000000000000000000000 --- a/dbrepo-search-db/init/indices/unit.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "aliases": {}, - "mappings": { - "properties": { - "created": { - "type": "date", - "format": "date_optional_time||epoch_millis" - }, - "description": { - "type": "text" - }, - "id": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "uri": { - "type": "keyword" - } - } - }, - "settings": { - "index": { - "number_of_shards": "1", - "number_of_replicas": "1" - } - } -} \ No newline at end of file diff --git a/dbrepo-search-db/init/indices/user.json b/dbrepo-search-db/init/indices/user.json deleted file mode 100644 index f8a68910d76ebf23356d646145afb9df4017e7c3..0000000000000000000000000000000000000000 --- a/dbrepo-search-db/init/indices/user.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "aliases": {}, - "mappings": { - "properties": { - "attributes": { - "type": "nested", - "include_in_parent": true, - "properties": { - "affiliation": { - "type": "keyword" - }, - "orcid": { - "type": "keyword" - } - } - }, - "firstname": { - "type": "keyword" - }, - "id": { - "type": "keyword" - }, - "lastname": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "username": { - "type": "keyword" - }, - "qualified_name": { - "type": "keyword" - } - } - }, - "settings": { - "index": { - "number_of_shards": "1", - "number_of_replicas": "1" - } - } -} \ No newline at end of file diff --git a/dbrepo-search-db/init/indices/view.json b/dbrepo-search-db/init/indices/view.json deleted file mode 100644 index 9483af5c1ea832522ff2d4c16f47f49edd2b7a03..0000000000000000000000000000000000000000 --- a/dbrepo-search-db/init/indices/view.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "aliases": {}, - "mappings": { - "properties": { - "created": { - "type": "date", - "format": "date_optional_time||epoch_millis" - }, - "creator": { - "type": "nested", - "include_in_parent": true, - "properties": { - "attributes": { - "type": "nested", - "include_in_parent": true, - "properties": { - "affiliation": { - "type": "keyword" - }, - "orcid": { - "type": "keyword" - } - } - }, - "firstname": { - "type": "keyword" - }, - "id": { - "type": "keyword" - }, - "lastname": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - }, - "database_id": { - "type": "keyword" - }, - "id": { - "type": "keyword" - }, - "initial_view": { - "type": "boolean" - }, - "internal_name": { - "type": "keyword" - }, - "is_public": { - "type": "boolean" - }, - "name": { - "type": "keyword" - }, - "query": { - "type": "text" - }, - "query_hash": { - "type": "keyword" - } - } - }, - "settings": { - "index": { - "number_of_shards": "1", - "number_of_replicas": "1" - } - } -} \ No newline at end of file diff --git a/dbrepo-search-service/.gitignore b/dbrepo-search-service/.gitignore index 78db1b98b3e0d6b9492d26f03be6ca91dd0f8af1..839f32b589547a95ec043da241cf668477eb80d6 100644 --- a/dbrepo-search-service/.gitignore +++ b/dbrepo-search-service/.gitignore @@ -6,6 +6,9 @@ __pycache__/ # C extensions *.so +# Generated +coverage.txt + # Distribution / packaging .Python build/ diff --git a/dbrepo-search-service/Dockerfile b/dbrepo-search-service/Dockerfile index 1faeae58d0b12caecb23d92a0ae160cf52080157..bb0ea12c68bf4194dd8e085cce48d8f05a7ddfcc 100644 --- a/dbrepo-search-service/Dockerfile +++ b/dbrepo-search-service/Dockerfile @@ -14,7 +14,7 @@ COPY ./app ./app COPY ./omlib ./omlib COPY ./scripts ./scripts COPY ./us-yml ./us-yml -COPY config.py wsgi.py ./ +COPY config.py wsgi.py friendly_names_overrides.json ./ ENV FLASK_APP=wsgi.py ENV COLLECTION="['database','table','column','identifier','unit','concept','user','view']" @@ -22,7 +22,7 @@ ENV OPENSEARCH_HOST=localhost ENV OPENSEARCH_PORT=9200 ENV OPENSEARCH_USERNAME=admin ENV OPENSEARCH_PASSWORD=admin -ENV LOG_LEVEL=INFO +ENV LOG_LEVEL=info RUN chown -R alpine:alpine ./ USER alpine diff --git a/dbrepo-search-service/app/__init__.py b/dbrepo-search-service/app/__init__.py index f7554e25da9ab5b36a5157b611980adadbee41fe..71269f940a393e5b2f180c0ccab9bf4904a323d8 100644 --- a/dbrepo-search-service/app/__init__.py +++ b/dbrepo-search-service/app/__init__.py @@ -8,9 +8,10 @@ from opensearchpy import OpenSearch from config import Config from prometheus_flask_exporter import PrometheusMetrics -log_level = os.getenv('LOG_LEVEL', 'INFO') +log_level = os.getenv('LOG_LEVEL', 'info').upper() -logging.basicConfig(level=logging.getLevelName(log_level)) +logging.addLevelName(level=logging.NOTSET, levelName='TRACE') +logging.basicConfig(level=logging.getLevelName(log_level.upper())) from logging.config import dictConfig diff --git a/dbrepo-search-service/app/api/routes.py b/dbrepo-search-service/app/api/routes.py index 8850f57939262043eb8bad141ac78ea6a9f330fe..5f98a66762e38df95ae4d3b8291ddcf88c07d5d6 100644 --- a/dbrepo-search-service/app/api/routes.py +++ b/dbrepo-search-service/app/api/routes.py @@ -7,16 +7,15 @@ from ast import literal_eval from flask import request -# ToDo: make import recognisable by PyCharm from app.api import api_bp from flasgger.utils import swag_from from app.opensearch_client import * import math -available_indices = literal_eval( +available_types = literal_eval( os.getenv("COLLECTION", "['database','table','column','identifier','unit','concept','user','view']")) -logging.info(f"Available collection loaded as: {available_indices}") +logging.info(f"Available collection loaded as: {available_types}") def general_filter(index, results): @@ -67,11 +66,11 @@ def get_index(index): :return: list of the results """ logging.info(f'Searching for index: {index}') - if index not in available_indices: + if index not in available_types: return { "results": {}, }, 404 # ToDo: replace with better error handling - results = query_index_by_term_opensearch(index, "*", "contains") + results = query_index_by_term_opensearch("*", "contains") results = general_filter(index, results) total_number_of_results = len(results) @@ -79,24 +78,24 @@ def get_index(index): max_pages = math.ceil(len(results) / results_per_page) page = min(request.args.get("page", 1, type=int), max_pages) results = results[(results_per_page * (page - 1)): (results_per_page * page)] - return {"results": results, "total": total_number_of_results, "status": 200} + return {"results": results}, 200 -@api_bp.route("/api/search/<string:index>/fields", methods=["GET"], endpoint="search_get_index_fields") -def get_fields(index): +@api_bp.route("/api/search/<string:type>/fields", methods=["GET"], endpoint="search_get_index_fields") +def get_fields(type): """ returns a list of attributes of the data for a specific index. - :param index: + :param type: The search type :return: """ - logging.info(f'Searching for index: {index}') - if index not in available_indices: + logging.info(f'Searching in index database for type: {type}') + if type not in available_types: return { "results": {}, }, 404 - fields = get_fields_for_index(index) - logging.debug(f'get fields for index {index} resulted in {len(fields)} field(s)') - return {"fields": fields, "status": 200} + fields = get_fields_for_index(type) + logging.debug(f'get fields for type {type} resulted in {len(fields)} field(s)') + return fields, 200 @api_bp.route("/api/search", methods=["POST"], endpoint="search_fuzzy_search") @@ -113,12 +112,12 @@ def post_fuzzy_search(): req_body = request.json logging.debug(f"search request body: {req_body}") search_term = req_body.get("search_term") - response = general_search(None, available_indices, search_term, None, None, None) - return response, 200 + response = general_search(None, search_term, None, None, None) + return {"results": response}, 200 -@api_bp.route("/api/search/<string:index>", methods=["POST"], endpoint="search_general_search") -def post_general_search(index): +@api_bp.route("/api/search/<string:type>", methods=["POST"], endpoint="search_general_search") +def post_general_search(type): """ Main endpoint for fuzzy searching. :return: @@ -129,11 +128,11 @@ def post_general_search(index): "suggested_content_types": ["application/json"], }, 415 req_body = request.json - logging.info(f'Searching for index: {index}') + logging.info(f'Searching in index database for type: {type}') logging.debug(f"search request body: {req_body}") search_term = req_body.get("search_term") - if index is not None and index not in available_indices: - logging.error(f"Index {index} is not in list of searchable indices: {available_indices}") + if type is not None and type not in available_types: + logging.error(f"Type {type} is not in collection: {available_types}") return { "results": {}, }, 404 @@ -147,5 +146,50 @@ def post_general_search(index): if t1 is not None and t2 is not None and "unit.uri" in field_value_pairs and "concept.uri" in field_value_pairs: response = unit_independent_search(t1, t2, field_value_pairs) else: - response = general_search(index, available_indices, search_term, t1, t2, field_value_pairs) - return response, 200 + response = general_search(type, search_term, t1, t2, field_value_pairs) + # filter by type + if type == 'table': + tmp = [] + for database in response: + for table in database["tables"]: + table["is_public"] = database["is_public"] + tmp.append(table) + response = tmp + if type == 'identifier': + tmp = [] + for database in response: + for identifier in database['identifiers']: + tmp.append(identifier) + for identifier in database['subsets']: + tmp.append(identifier) + for table in database['tables']: + for identifier in table['identifiers']: + tmp.append(identifier) + for view in [x for xs in response for x in xs["views"]]: + if 'identifier' in view: + tmp.append(view['identifier']) + response = tmp + elif type == 'column': + response = [x for xs in response for x in xs["tables"]] + for table in response: + for column in table["columns"]: + column["table_id"] = table["id"] + column["database_id"] = table["database_id"] + response = [x for xs in response for x in xs["columns"]] + elif type == 'concept': + tmp = [] + tables = [x for xs in response for x in xs["tables"]] + for column in [x for xs in tables for x in xs["columns"]]: + if 'concept' in column and column["concept"] is not None: + tmp.append(column["concept"]) + response = tmp + elif type == 'unit': + tmp = [] + tables = [x for xs in response for x in xs["tables"]] + for column in [x for xs in tables for x in xs["columns"]]: + if 'unit' in column and column["unit"] is not None: + tmp.append(column["unit"]) + response = tmp + elif type == 'view': + response = [x for xs in response for x in xs["views"]] + return {'results': response, 'type': type}, 200 diff --git a/dbrepo-search-service/app/opensearch_client.py b/dbrepo-search-service/app/opensearch_client.py index d5d5e8f877caafd90c8de12effd7c0fc98ea2f4d..27be6168ecaa89eb6e802fd333a74f015b70801a 100644 --- a/dbrepo-search-service/app/opensearch_client.py +++ b/dbrepo-search-service/app/opensearch_client.py @@ -13,6 +13,39 @@ from omlib.omconstants import OM from omlib.unit import Unit +def key_to_attr_name(key: str) -> str: + """ + Maps an attribute key to a machine-readable representation + :param key: The attribute key + :return: The machine-readable representation of the attribute key + """ + parts = [] + previous = None + for part in key.split(".")[1:-1]: # remove the first and last sub-item database.xxx.yyy.zzz.type -> xxx.yyy.zzz + if part == "mappings" or part == "mapping": # remove the mapping sub-item(s) + continue + if part == previous: # remove redundant sub-item(s) + continue + previous = part + parts.append(part) + return ".".join(parts) + + +def attr_name_to_attr_friendly_name(key: str) -> str: + """ + Maps an attribute key to a human-readable representation + :param key: The attribute key + :return: The human-readable representation of the attribute key + """ + with open('friendly_names_overrides.json') as json_data: + d = json.load(json_data) + for json_key in d.keys(): + if json_key == key: + logging.debug(f"friendly name exists for key {json_key}") + return d[json_key] + return ''.join(key.replace('_', ' ').title().split('.')[-1:]) + + def flatten_dict( d: MutableMapping, parent_key: str = "", sep: str = "." ) -> MutableMapping: @@ -26,48 +59,7 @@ def flatten_dict( return dict(items) -def create_friendly_name(attribute_name): - """ - replaces the attribute names so they are more human readable for the front end - - :todo: extend special_attribute_names - :param attribute_name: - :return: - """ - special_attribute_names = { - "creator.properties.username": "Username (creator)", - "owner.properties.username": "Username (owner)", - "owner.properties.id": "Id (owner)", - "creator.properties.id": "Id (creator)", - } - if attribute_name not in special_attribute_names: - friendly_name = attribute_name.split(".")[-1] - friendly_name = friendly_name.replace("_", " ").strip() - friendly_name = friendly_name.capitalize() - return friendly_name - else: - return special_attribute_names[attribute_name] - - -def get_keys(d, parent_key=""): - # currently not in use, probably obsolete? - keys = [] - for key, value in d.items(): - new_key = f"{parent_key}.{key}" if parent_key else key - if isinstance(value, dict): - if "type" in value.keys(): - keys.append( - { - "attribute_name": new_key, - "data_type": value["type"], - } - ) - else: - keys.extend(get_keys(value, new_key)) - return keys - - -def query_index_by_term_opensearch(index, term, mode): +def query_index_by_term_opensearch(term, mode): """ old code, is effectively replaced by general_search() now @@ -81,7 +73,7 @@ def query_index_by_term_opensearch(index, term, mode): query_str = f"*{term}*" response = current_app.opensearch_client.search( - index=index, + index="database", body={ "query": { "query_string": { @@ -95,35 +87,45 @@ def query_index_by_term_opensearch(index, term, mode): return results -def get_fields_for_index(index): +def get_fields_for_index(type: str): """ returns a list of attributes of the data for a specific index. - :param index: the index of interest + :param type: The search type :return: list of fields """ - logging.debug('request fields for index: %s', index) - fields = current_app.opensearch_client.indices.get_mapping(index) - fields = fields[index]["mappings"]["properties"] - logging.debug('fields: %s', fields) + fields = { + "database": "*", + "table": "tables.*", + "column": "tables.columns.*", + "concept": "tables.columns.concept.*", + "unit": "tables.columns.unit.*", + "identifier": "identifier.*", + "view": "views.*", + "user": "creator.*", + } + logging.debug(f'requesting field(s) {fields[type]} for filter: {type}') + fields = current_app.opensearch_client.indices.get_field_mapping(fields[type]) fields_list = [] fd = flatten_dict(fields) for key in fd.keys(): + if not key.startswith('database'): + continue entry = {} if key.split(".")[-1] == "type": - entry["attribute_name"] = ".".join(key.split(".")[:-1]) + entry["attr_name"] = key_to_attr_name(key) + entry["attr_friendly_name"] = attr_name_to_attr_friendly_name(entry["attr_name"]) entry["type"] = fd[key] fields_list.append(entry) return fields_list -def general_search(index=None, indices=[], search_term=None, t1=None, t2=None, field_value_pairs=None): +def general_search(type=None, search_term=None, t1=None, t2=None, field_value_pairs=None): """ Main method for seaching stuff in the opensearch db all parameters are optional - :param index: The index to be searched. Optional. - :param indices: The available indices to be searched. + :param type: The index to be searched. Optional. :param search_term: The search term. Optional. :param t1: The start range value. Optional. :param t2: The end range value. Optional. @@ -146,17 +148,15 @@ def general_search(index=None, indices=[], search_term=None, t1=None, t2=None, f } } logging.debug(f'search body: {fuzzy_body}') - index = ','.join(indices) - logging.debug(f'search index: {index}') response = current_app.opensearch_client.search( - index=index, + index="database", body=fuzzy_body ) logging.info(f"Found {len(response['hits']['hits'])} result(s)") return response + musts = [] if field_value_pairs is not None and len(field_value_pairs) > 0: logging.debug('query has field_value_pairs present') - musts = [] is_range_open_end = False is_range_open_begin = False is_range_query = False @@ -170,18 +170,6 @@ def general_search(index=None, indices=[], search_term=None, t1=None, t2=None, f is_range_query = True logging.debug(f"query has start value {t1} and end value {t2} present") for key, value in field_value_pairs.items(): - logging.debug(f"current key={key}, value={value}") - # if key in field_list: - if re.match(f"{index}\.", key): - new_field = key[key.index(".") + 1:len(key)] - logging.debug( - f"field name {key} starts with index name {index}: flattened field name to {new_field}") - key = new_field - if re.match(".*properties\..*", key): - new_field = key.replace("properties.", "") - logging.debug( - f"field name {key} contains properties keyword: flattened field name to {new_field}") - key = new_field if is_range_open_end and re.match(f"unit\.", key): logging.debug(f"omit key={key} because query type=open end range and key is somewhat unit") logging.info(f"add match-query for range ),{t2}]") @@ -221,27 +209,37 @@ def general_search(index=None, indices=[], search_term=None, t1=None, t2=None, f } }) else: - precision = "90%" - if key in ["attributes.orcid", "creators.name_identifier", "concept.uri"]: - precision = "100%" - logging.debug(f"key {key} needs precision of 100%") - musts.append({ - "match": { - key: {"query": value, "minimum_should_match": precision} - } - }) - specific_query = {"bool": {"must": musts}} - queries.append(specific_query) + if '.' in key: + logging.debug(f'key {key} is nested: use nested query') + index = key.split('.')[0] + musts.append({ + "nested": { + "path": index, + "query": { + "term": { + key: value + } + } + } + }) + else: + logging.debug(f'key {key} is flat: use bool query') + musts.append({ + "match": { + key: {"query": value, "minimum_should_match": "90%"} + } + }) body = { - "query": {"bool": {"must": queries}} + "query": {"bool": {"must": musts}} } - logging.debug('search index: %s', index) - logging.debug('search body: %s', body) + logging.debug(f'search in index database for type: {type}') + logging.debug(f'search body: {body}') response = current_app.opensearch_client.search( - index=index, + index="database", body=json.dumps(body) ) - return response + results = [hit["_source"] for hit in response["hits"]["hits"]] + return results def flatten(mylist): @@ -255,7 +253,7 @@ def unit_uri_to_unit(uri): def unit_independent_search(t1=None, t2=None, field_value_pairs=None): """ - Main method for seaching stuff in the opensearch db + Main method for searching stuff in the opensearch db all parameters are optional diff --git a/dbrepo-search-service/friendly_names_overrides.json b/dbrepo-search-service/friendly_names_overrides.json new file mode 100644 index 0000000000000000000000000000000000000000..07de98c882338ab541ee38e73b92ff62eb4490ae --- /dev/null +++ b/dbrepo-search-service/friendly_names_overrides.json @@ -0,0 +1,14 @@ +{ + "tables.name": "Table Name", + "owner.id": "Owner ID", + "owner.username": "Owner Username", + "owner.attributes.orcid": "Owner ORCID", + "creator.orcid": "Creator ORCID", + "identifier.licenses.uri": "License URI", + "identifier.related_identifiers.type": "Related Identifier Type", + "identifier.funders.id": "Funder ID", + "identifier.result_hash": "Result Hash", + "is_public": "Public", + "tables.columns.concept.uri": "URI", + "tables.columns.unit.uri": "URI" +} \ No newline at end of file diff --git a/dbrepo-storage-service/init/create-buckets.sh b/dbrepo-storage-service/init/create-buckets.sh index d0e3223f669147a3fb87da50bf5cde02b7c2362a..28fdb5b5b9f79427b650203989a84c5f06c71210 100644 --- a/dbrepo-storage-service/init/create-buckets.sh +++ b/dbrepo-storage-service/init/create-buckets.sh @@ -3,6 +3,7 @@ function log { echo "$(date '+%Y-%m-%d %H:%M:%S') $1" } +log "SeaweedFS master is set to ${SEAWEEDFS_ENDPOINT}" log "Starting to create buckets dbrepo-upload, dbrepo-download" echo "s3.bucket.create -name dbrepo-upload" | weed shell -master="${SEAWEEDFS_ENDPOINT}" log "Created bucket dbrepo-upload" diff --git a/dbrepo-ui/Dockerfile b/dbrepo-ui/Dockerfile index 3336cdc5b50683d5a6b02299f20e7cd6586bab9b..d070c7f5a9cd3c90cb0f52c0a8f518173c8c543f 100644 --- a/dbrepo-ui/Dockerfile +++ b/dbrepo-ui/Dockerfile @@ -21,7 +21,6 @@ COPY ./dbrepo.config.json ./dbrepo.config.json COPY ./assets ./assets COPY ./api ./api COPY ./components ./components -COPY ./lang ./lang COPY ./layouts ./layouts COPY ./locales ./locales COPY ./pages ./pages diff --git a/dbrepo-ui/api/authentication.mapper.js b/dbrepo-ui/api/authentication.mapper.js new file mode 100644 index 0000000000000000000000000000000000000000..f4eec57e98b40532dc1eab84ced758157c815059 --- /dev/null +++ b/dbrepo-ui/api/authentication.mapper.js @@ -0,0 +1,17 @@ +import jwtDecode from 'jwt-decode' + +class AuthenticationMapper { + isExpiredToken (token) { + return this.tokenToExpiryDate(token) < Date.now() + } + + tokenToExpiryDate (token) { + if (!token) { + return true + } + const { exp } = jwtDecode(token) + return new Date(exp * 1000) + } +} + +export default new AuthenticationMapper() diff --git a/dbrepo-ui/api/authentication.service.js b/dbrepo-ui/api/authentication.service.js index 035a8106202043cdb98f4ac36dc3c063f1d3aefb..776aca523bf5768604687c5f705609b2094e0f56 100644 --- a/dbrepo-ui/api/authentication.service.js +++ b/dbrepo-ui/api/authentication.service.js @@ -3,6 +3,7 @@ import store from '@/store' import qs from 'qs' import UserMapper from '@/api/user.mapper' import axios from 'axios' +import AuthenticationMapper from '@/api/authentication.mapper' /** * Service class for interaction with Authentication Service in the back end. @@ -99,6 +100,22 @@ class AuthenticationService { }) }) } + + refreshToken () { + const refreshToken = store().state.refreshToken + if (AuthenticationMapper.isExpiredToken(refreshToken)) { + /* refresh token expired */ + console.error('Refresh token expired:', AuthenticationMapper.tokenToExpiryDate(refreshToken)) + return false + } + this.authenticateToken(refreshToken) + .then((response) => { + store().commit('SET_TOKEN', response.access_token) + store().commit('SET_REFRESH_TOKEN', response.refresh_token) + console.debug('new access token expires:', AuthenticationMapper.tokenToExpiryDate(refreshToken)) + return false + }) + } } export default new AuthenticationService() diff --git a/dbrepo-ui/api/database.service.js b/dbrepo-ui/api/database.service.js index fa020ef185a8f1e18a5d814ff8af9157240e0834..9c4fb14f224c25ad6e2009317c6a5c53a55c6679 100644 --- a/dbrepo-ui/api/database.service.js +++ b/dbrepo-ui/api/database.service.js @@ -118,13 +118,12 @@ class DatabaseService { api.get(`/api/database/${databaseId}/access`, { headers: { Accept: 'application/json' } }) .then((response) => { const databases = response.data - console.debug('response databases', databases) + console.debug('response databases access', databases) resolve(databases) }) .catch((error) => { const { status } = error if (status !== 401 && status !== 403 && status !== 405) { /* ignore no access errors */ - displayError(error, 'Failed to check database access') reject(error) } }) diff --git a/dbrepo-ui/api/identifier.mapper.js b/dbrepo-ui/api/identifier.mapper.js index cdb9b9dc0745e51c75c62837890ae82aeeae738b..98ec359af1ef27e0e5c8728f305afa51dd974330 100644 --- a/dbrepo-ui/api/identifier.mapper.js +++ b/dbrepo-ui/api/identifier.mapper.js @@ -1,3 +1,5 @@ +import store from '@/store' + class IdentifierMapper { identifierToCreators (identifier) { if (!identifier) { @@ -13,12 +15,7 @@ class IdentifierMapper { str += ', ' } /* name */ - if (creators[i].firstname) { - str += (creators[i].firstname.toUpperCase().substring(0, 1) + '., ') - } - if (creators[i].lastname) { - str += creators[i].lastname - } + str += creators[i].creator_name } return str } @@ -28,6 +25,7 @@ class IdentifierMapper { database_id: data.database_id, query_id: data.query_id, view_id: data.view_id, + table_id: data.table_id, type: data.type, titles: data.titles.map((t) => { return { @@ -115,8 +113,22 @@ class IdentifierMapper { return filtered[0].description } + descriptionShort (description) { + const targetLength = 280 + const lengthMax = 300 + if (!description) { + return null + } + if (description.length <= lengthMax) { + return description + } + const extra = description.substring(targetLength, lengthMax) + const idx = extra.indexOf(' ') + return description.substring(0, targetLength + idx) + '...' + } + identifierPreferEnglishTitle (identifier) { - if (!identifier) { + if (!identifier || !identifier.titles || identifier.titles.length === 0) { return null } const filtered = identifier.titles.filter(d => d.language && d.language === 'en') @@ -125,6 +137,27 @@ class IdentifierMapper { } return filtered[0].title } + + identifierToUrl (identifier) { + if (!identifier) { + return null + } + return identifier.doi !== null ? `${store().state.doiUrl}/${identifier.doi}` : `/pid/${identifier.id}` + } + + identifierToDisplayName (identifier) { + if (!identifier) { + return null + } + return identifier.doi !== null ? identifier.doi : `/pid/${identifier.id}` + } + + identifierToDisplayAcronym (identifier) { + if (!identifier) { + return null + } + return identifier.doi !== null ? 'DOI' : 'URI' + } } export default new IdentifierMapper() diff --git a/dbrepo-ui/api/query.mapper.js b/dbrepo-ui/api/query.mapper.js index 7aa33d1038c2dadb7f6862383447531fda35dcb9..39aad503ea41b7c6ce1d522ccb18ddaca7dfae92 100644 --- a/dbrepo-ui/api/query.mapper.js +++ b/dbrepo-ui/api/query.mapper.js @@ -1,35 +1,35 @@ class QueryMapper { mySql8DataTypes () { return [ - { value: 'bool', text: 'BOOL' }, - { value: 'varchar', text: 'VARCHAR(size)', defaultSize: 255 }, - { value: 'text', text: 'TEXT' }, - { value: 'int', text: 'INT(size)', defaultSize: 255 }, - { value: 'char', text: 'CHAR(size)', defaultSize: 1 }, + { value: 'bigint', text: 'BIGINT(size)', defaultSize: 255 }, { value: 'binary', text: 'BINARY(size)', defaultSize: 1 }, - { value: 'varbinary', text: 'VARBINARY(size)', defaultSize: 1 }, - { value: 'tinyblob', text: 'TINYBLOB' }, - { value: 'tinytext', text: 'TINYTEXT' }, + { value: 'bit', text: 'BIT(size)', defaultSize: 1 }, { value: 'blob', text: 'BLOB' }, - { value: 'mediumtext', text: 'MEDIUMTEXT' }, - { value: 'mediumblob', text: 'MEDIUMBLOB' }, - { value: 'longtext', text: 'LONGTEXT' }, - { value: 'longblob', text: 'LONGBLOB' }, + { value: 'bool', text: 'BOOL' }, + { value: 'char', text: 'CHAR(size)', defaultSize: 1 }, + { value: 'date', text: 'DATE' }, + { value: 'datetime', text: 'DATETIME(fsp)' }, + { value: 'decimal', text: 'DECIMAL(size, d)', defaultSize: 10, defaultD: 4 }, + { value: 'double', text: 'DOUBLE(size, d)', defaultSize: 25, defaultD: 4 }, { value: 'enum', text: 'ENUM(val1,val2,...)' }, + { value: 'float', text: 'FLOAT(p)', defaultSize: 24 }, + { value: 'int', text: 'INT(size)', defaultSize: 255 }, + { value: 'longblob', text: 'LONGBLOB' }, + { value: 'longtext', text: 'LONGTEXT' }, + { value: 'mediumblob', text: 'MEDIUMBLOB' }, + { value: 'mediumint', text: 'MEDIUMINT(size)', defaultSize: 10 }, + { value: 'mediumtext', text: 'MEDIUMTEXT' }, { value: 'set', text: 'SET(val1,val2,...)' }, - { value: 'bit', text: 'BIT(size)', defaultSize: 1 }, - { value: 'tinyint', text: 'TINYINT(size)', defaultSize: 10 }, { value: 'smallint', text: 'SMALLINT(size)', defaultSize: 10 }, - { value: 'mediumint', text: 'MEDIUMINT(size)', defaultSize: 10 }, - { value: 'bigint', text: 'BIGINT(size)', defaultSize: 255 }, - { value: 'float', text: 'FLOAT(p)', defaultSize: 24 }, - { value: 'double', text: 'DOUBLE(size, d)', defaultSize: 25, defaultD: 4 }, - { value: 'decimal', text: 'DECIMAL(size, d)', defaultSize: 10, defaultD: 4 }, - { value: 'date', text: 'DATE' }, - { value: 'datetime', text: 'DATETIME(fsp)' }, - { value: 'timestamp', text: 'TIMESTAMP(fsp)' }, + { value: 'text', text: 'TEXT' }, { value: 'time', text: 'TIME(fsp)' }, - { value: 'year', text: 'YEAR' } + { value: 'timestamp', text: 'TIMESTAMP(fsp)' }, + { value: 'tinyblob', text: 'TINYBLOB' }, + { value: 'tinyint', text: 'TINYINT(size)', defaultSize: 10 }, + { value: 'tinytext', text: 'TINYTEXT' }, + { value: 'year', text: 'YEAR' }, + { value: 'varbinary', text: 'VARBINARY(size)', defaultSize: 1 }, + { value: 'varchar', text: 'VARCHAR(size)', defaultSize: 255 } ] } } diff --git a/dbrepo-ui/api/search.service.js b/dbrepo-ui/api/search.service.js index b30c79b6fee7a1b419bdc6be3764570f97be6475..8b3c1790611b750269075a32d91e8b7e1b77afa3 100644 --- a/dbrepo-ui/api/search.service.js +++ b/dbrepo-ui/api/search.service.js @@ -16,7 +16,7 @@ class SearchService { }) } - search (index, searchData) { + search (filter, searchData) { // transform values to what the search API expects let localSearchData = Object.assign({}, searchData) const searchTerm = localSearchData.search_term @@ -33,11 +33,9 @@ class SearchService { field_value_pairs: { ...localSearchData } } return new Promise((resolve, reject) => { - api.post(`/api/search${index ? `/${index}` : ''}`, payload, { headers: { Accept: 'application/json' } }) + api.post(`/api/search${filter ? `/${filter}` : ''}`, payload, { headers: { Accept: 'application/json' } }) .then((response) => { - const { hits } = response.data - console.debug('advanced search response', hits.hits) - resolve(hits.hits) + resolve(response.data) }) .catch((error) => { displayError('Failed to load search results', error) diff --git a/dbrepo-ui/components/DatabaseList.vue b/dbrepo-ui/components/DatabaseList.vue index df9bc11ce78ec71832d671a6304aa302c2a47af1..c1d6c6db2ae9d3d60adb0d08c5c5cc685bb7b1fe 100644 --- a/dbrepo-ui/components/DatabaseList.vue +++ b/dbrepo-ui/components/DatabaseList.vue @@ -7,7 +7,7 @@ <v-card v-for="(database, idx) in databases" :key="idx" - :to="link(database)" + :to="`/database/${database.id}/info`" flat tile> <v-divider v-if="idx !== 0" class="mx-4" /> @@ -31,10 +31,10 @@ outlined v-text="identifierYear(database)" /> <v-chip - v-if="hasIdentifier(database)" + v-if="identifier(database)" small outlined - v-text="database.identifier.publisher" /> + v-text="identifierPublisher(database)" /> <v-chip v-for="(license,i) in identifierLicenses(database)" :key="i" @@ -61,18 +61,24 @@ </template> <script> -import DatabaseService from '@/api/database.service' import DatabaseMapper from '@/api/database.mapper' import IdentifierMapper from '@/api/identifier.mapper' import { formatLanguage } from '@/utils' export default { + props: { + databases: { + type: Array, + default: () => { + return [] + } + } + }, data () { return { loadingDatabases: false, loadingCreate: false, createDbDialog: false, - databases: [], searchQuery: null, limit: 100, items: [ @@ -87,97 +93,62 @@ export default { }, user () { return this.$store.state.user - }, - isFiltered () { - return this.$route.query.f === 'my' } }, - watch: { - $route: { - handler () { - this.loadDatabases() - } - } - }, - mounted () { - this.loadDatabases() - }, methods: { formatCreators (database) { - if (!database.identifier) { + if (!this.identifier(database)) { return DatabaseMapper.databaseToOwner(database) } - return IdentifierMapper.identifierToCreators(database.identifier) - }, - hasIdentifier (database) { - return database && database.identifier + return IdentifierMapper.identifierToCreators(this.identifier(database)) }, formatTitle (database) { - if (!database) { - return null - } - if (!database.identifier) { + if (!this.identifier(database)) { return database.name } - return IdentifierMapper.identifierPreferEnglishTitle(database.identifier) + return IdentifierMapper.identifierPreferEnglishTitle(this.identifier(database)) }, identifierYear (database) { - if (!database || !database.identifier || !database.identifier.publication_year) { + if (!this.identifier(database)) { + return null + } + return this.identifier(database).publication_year + }, + identifierPublisher (database) { + if (!this.identifier(database)) { return null } - return database.identifier.publication_year + return this.identifier(database).publisher }, identifierLicenses (database) { - if (!database || !database.identifier) { + if (!this.identifier(database)) { return [] } - return database.identifier.licenses + return this.identifier(database).licenses }, identifierDescription (database) { - if (!database || !database.identifier) { + if (!this.identifier(database)) { return null } - return IdentifierMapper.identifierPreferEnglishDescription(database.identifier) + return IdentifierMapper.descriptionShort(IdentifierMapper.identifierPreferEnglishDescription(this.identifier(database))) }, identifierLanguage (database) { - if (!database || !database.identifier || !database.identifier.language) { + if (!this.identifier(database) || !this.identifier(database).language) { return null } - return formatLanguage(database.identifier.language.toLowerCase()) + return formatLanguage(this.identifier(database).language.toLowerCase()) }, identifierFunders (database) { - if (!database || !database.identifier || !database.identifier.funders) { + if (!this.identifier(database)) { return null } - return database.identifier.funders - }, - loadDatabases () { - this.loadingDatabases = true - if (this.isFiltered) { - DatabaseService.findAllOnlyAccess() - .then((databases) => { - this.databases = databases - console.info('Found', this.databases.length, 'database(s) with access') - }) - .finally(() => { - this.loadingDatabases = false - }) - } else { - DatabaseService.findAll() - .then((databases) => { - this.databases = databases - console.info('Found', this.databases.length, 'database(s)') - }) - .finally(() => { - this.loadingDatabases = false - }) - } + return this.identifier(database).funders }, - link (database) { - if (!database) { + identifier (database) { + if (!database || !database.identifiers || database.identifiers.length === 0) { return null } - return `/database/${database.id}` + return database.identifiers[0] }, formatLanguage } diff --git a/dbrepo-ui/components/DBToolbar.vue b/dbrepo-ui/components/DatabaseToolbar.vue similarity index 83% rename from dbrepo-ui/components/DBToolbar.vue rename to dbrepo-ui/components/DatabaseToolbar.vue index 2233810aaf9ce728e2c56bcb9874363cb11e7204..3b68b23fe3f3a03190c9a5914d42e4c1c2d1bb11 100644 --- a/dbrepo-ui/components/DBToolbar.vue +++ b/dbrepo-ui/components/DatabaseToolbar.vue @@ -43,9 +43,12 @@ <v-btn v-if="canCreateView" color="secondary" class="mb-1 white--text" :to="`/database/${$route.params.database_id}/view/create`"> <v-icon v-if="$vuetify.breakpoint.lgAndUp" left>mdi-view-carousel-outline</v-icon> Create View </v-btn> - <v-btn v-if="canCreateTable" color="primary" class="mb-1" :to="`/database/${$route.params.database_id}/table/create`"> + <v-btn v-if="canCreateTable" color="secondary" class="mb-1" :to="`/database/${$route.params.database_id}/table/create`"> <v-icon v-if="$vuetify.breakpoint.lgAndUp" left>mdi-table-large-plus</v-icon> Create Table </v-btn> + <v-btn v-if="canCreateIdentifier" color="primary" class="mb-1" :to="`/database/${$route.params.database_id}/persist`"> + <v-icon v-if="$vuetify.breakpoint.lgAndUp" left>mdi-identifier</v-icon> Get PID + </v-btn> </v-toolbar-title> <template v-slot:extension> <v-tabs v-model="tab" color="primary"> @@ -74,7 +77,9 @@ import DownloadButton from '@/components/identifier/DownloadButton' export default { - components: { DownloadButton }, + components: { + DownloadButton + }, data () { return { tab: null, @@ -91,12 +96,27 @@ export default { user () { return this.$store.state.user }, - token () { - return this.$store.state.token - }, roles () { return this.$store.state.roles }, + canCreateIdentifier () { + if (!this.roles) { + return false + } + if (this.roles.includes('create-foreign-identifier')) { + return true + } + return this.roles.includes('create-identifier') && this.isOwner + }, + canDeleteIdentifier () { + if (!this.user) { + return false + } + return this.roles.includes('delete-identifier') + }, + hasIdentifier () { + return this.database && 'identifiers' in this.database && this.database.identifiers.length > 0 + }, hasWriteAccess () { if (!this.access) { return false diff --git a/dbrepo-ui/components/QueryList.vue b/dbrepo-ui/components/QueryList.vue index 27a8f26580c9facf2aa91598dbacad68a7b6ddd9..00e6934e1a93c241ec517669e5d6bf95aadde28b 100644 --- a/dbrepo-ui/components/QueryList.vue +++ b/dbrepo-ui/components/QueryList.vue @@ -1,85 +1,35 @@ <template> <div> <v-progress-linear v-if="loadingIdentifiers || loadingQueries" color="primary" :indeterminate="!error" /> - <v-card v-if="!(loadingIdentifiers || loadingQueries) && queries && identifiers && queries.length === 0 && identifiers.length === 0" flat tile> - <v-card-text v-text="emptyText" /> - </v-card> <v-card v-if="isNotReachable" flat tile> <v-card-text> Failed to load queries: database is not reachable </v-card-text> </v-card> + <v-card v-if="queries.length === 0" flat tile> + <v-card-text>(no subsets)</v-card-text> + </v-card> <v-tabs-items> - <div v-if="!loadingQueries && !error"> - <div v-for="(item,i) in queries" :key="i"> - <v-divider v-if="i !== 0" class="mx-4" /> - <v-list-item-group> - <v-list-item two-line :class="clazz(item)" :to="link(item)" :href="navigate(item)"> - <v-list-item-content> - <v-list-item-title v-text="title(item)" /> - <v-list-item-subtitle class="mt-2"> - <pre>{{ item.query }}</pre> - </v-list-item-subtitle> - </v-list-item-content> - <v-list-item-action v-if="item.identifier"> - <v-tooltip left> - <template v-slot:activator="{ on, attrs }"> - <v-icon color="primary" v-bind="attrs" v-on="on">mdi-identifier</v-icon> - </template> - Subset has persistent identifier - </v-tooltip> - </v-list-item-action> - </v-list-item> - </v-list-item-group> - </div> - </div> - <div v-if="!loadingIdentifiers && loadingQueries"> - <!-- show identifiers when loading subsets --> - <div v-for="(item,i) in identifiers" :key="i"> - <v-divider v-if="i !== 0" class="mx-4" /> - <v-list-item-group> - <v-list-item two-line :class="clazz(item)" :to="link(item)" :href="navigate(item)"> - <v-list-item-content> - <v-list-item-title v-text="title(item)" /> - <v-list-item-subtitle class="mt-2"> - <pre>{{ item.query }}</pre> - </v-list-item-subtitle> - </v-list-item-content> - <v-list-item-action> - <v-tooltip left> - <template v-slot:activator="{ on, attrs }"> - <v-icon color="primary" v-bind="attrs" v-on="on">mdi-identifier</v-icon> - </template> - Subset has persistent identifier - </v-tooltip> - </v-list-item-action> - </v-list-item> - </v-list-item-group> - </div> - </div> - <div v-if="!loadingIdentifiers && !isPublicOrOwner"> - <!-- show identifiers when private --> - <div v-for="(item,i) in identifiers" :key="i"> - <v-divider v-if="i !== 0" class="mx-4" /> - <v-list-item-group> - <v-list-item two-line :class="clazz(item)" :to="link(item)" :href="navigate(item)"> - <v-list-item-content> - <v-list-item-title v-text="title(item)" /> - <v-list-item-subtitle class="mt-2"> - <pre>{{ item.query }}</pre> - </v-list-item-subtitle> - </v-list-item-content> - <v-list-item-action> - <v-tooltip left> - <template v-slot:activator="{ on, attrs }"> - <v-icon color="primary" v-bind="attrs" v-on="on">mdi-identifier</v-icon> - </template> - Subset has persistent identifier - </v-tooltip> - </v-list-item-action> - </v-list-item> - </v-list-item-group> - </div> + <div v-for="(item,i) in queries" :key="i"> + <v-divider v-if="i !== 0" class="mx-4" /> + <v-list-item-group> + <v-list-item two-line :class="clazz(item)" :to="link(item)" :href="link(item)"> + <v-list-item-content> + <v-list-item-title v-text="title(item)" /> + <v-list-item-subtitle class="mt-2"> + <pre>{{ item.query }}</pre> + </v-list-item-subtitle> + </v-list-item-content> + <v-list-item-action v-if="item.identifier"> + <v-tooltip left> + <template v-slot:activator="{ on, attrs }"> + <v-icon color="primary" v-bind="attrs" v-on="on">mdi-identifier</v-icon> + </template> + Subset has persistent identifier + </v-tooltip> + </v-list-item-action> + </v-list-item> + </v-list-item-group> </div> </v-tabs-items> </div> @@ -103,9 +53,6 @@ export default { } }, computed: { - baseUrl () { - return `${location.protocol}//${location.host}` - }, token () { return this.$store.state.token }, @@ -117,25 +64,6 @@ export default { }, creator () { return this.queryDetails.creator - }, - emptyText () { - const add = this.database && this.database.is_public ? '' : ' public' - return `(no${add} subsets)` - }, - isPublicOrOwner () { - if (!this.database) { - return false - } - if (this.database.is_public) { - return true - } - if (this.token === null) { - return false - } - if (!this.user) { - return false - } - return this.database.creator.username === this.user.username } }, mounted () { @@ -182,23 +110,8 @@ export default { } return enTitle[0].title }, - link (queryOrIdentifier) { - if (queryOrIdentifier.identifier === null) { - return `/database/${this.$route.params.database_id}/query/${queryOrIdentifier.id}` - } - if ('query_id' in queryOrIdentifier) { - return null - } - return null - }, - navigate (queryOrIdentifier) { - if (queryOrIdentifier.identifier === null) { - return - } - if ('query_id' in queryOrIdentifier) { - return `/pid/${queryOrIdentifier.id}` - } - return `/pid/${queryOrIdentifier.identifier.id}` + link (query) { + return `/database/${this.$route.params.database_id}/query/${query.id}/info` }, clazz (queryOrIdentifier) { if ('query_id' in queryOrIdentifier || queryOrIdentifier.identifier) { diff --git a/dbrepo-ui/components/SubsetToolbar.vue b/dbrepo-ui/components/SubsetToolbar.vue new file mode 100644 index 0000000000000000000000000000000000000000..0341d1233d2bcb800728799578c818247387a7ab --- /dev/null +++ b/dbrepo-ui/components/SubsetToolbar.vue @@ -0,0 +1,169 @@ +<template> + <div> + <v-toolbar flat> + <v-toolbar-title> + <v-btn id="back-btn" class="mr-2" :to="`/database/${$route.params.database_id}/query`"> + <v-icon left>mdi-arrow-left</v-icon> + </v-btn> + </v-toolbar-title> + <v-toolbar-title v-if="identifier" v-text="title" /> + <v-spacer /> + <v-toolbar-title> + <v-btn v-if="canPersistQuery" :loading="loadingSave" class="mb-1" @click.stop="save"> + <v-icon left>mdi-content-save-outline</v-icon> Save + </v-btn> + <v-btn v-if="result_visibility && subset && subset.result_number" class="mb-1" :loading="downloadLoading" @click.stop="downloadSubset"> + <v-icon left>mdi-download</v-icon> Data .csv + </v-btn> + <DownloadButton v-if="identifier" :pid="identifier.id" class="mb-1"> + <v-icon left>mdi-code-tags</v-icon> PID .xml + </DownloadButton> + <v-btn v-if="canGetPid" class="mb-1" color="primary" :disabled="!executionUTC" :to="`/database/${$route.params.database_id}/query/${$route.params.query_id}/persist`"> + <v-icon left>mdi-content-save-outline</v-icon> Get PID + </v-btn> + </v-toolbar-title> + </v-toolbar> + <v-tabs v-model="tab" color="primary"> + <v-tab :to="`/database/${$route.params.database_id}/query/${$route.params.query_id}/info`"> + Info + </v-tab> + <v-tab :to="`/database/${$route.params.database_id}/query/${$route.params.query_id}/data`"> + Data + </v-tab> + </v-tabs> + </div> +</template> + +<script> +import UserUtils from '@/api/user.utils' +import QueryService from '@/api/query.service' +import DownloadButton from '@/components/identifier/DownloadButton.vue' +import IdentifierMapper from '@/api/identifier.mapper' +import { formatTimestampUTCLabel } from '@/utils' + +export default { + components: { + DownloadButton + }, + data () { + return { + tab: null, + loading: false, + loadingSave: false, + downloadLoading: false, + identifier: null, + subset: null + } + }, + computed: { + pid () { + return this.$route.query.pid + }, + database () { + return this.$store.state.database + }, + access () { + return this.$store.state.access + }, + user () { + return this.$store.state.user + }, + roles () { + return this.$store.state.roles + }, + identifiers () { + if (!this.database || !this.database.subsets || this.database.subsets.length === 0) { + return [] + } + return this.database.subsets + }, + canPersistQuery () { + if (this.loading || !this.subset || this.subset.is_persisted) { + return false + } + return UserUtils.hasReadAccess(this.access) + }, + executionUTC () { + if (!this.subset) { + return null + } + return formatTimestampUTCLabel(this.subset.created) + }, + result_visibility () { + if (!this.database || this.database.is_public === null) { + return false + } + if (this.database.is_public) { + return true + } + return this.subset.creator.username === this.username + }, + canGetPid () { + if (!this.user || !this.subset || !this.database) { + return false + } + return this.database.owner.id === this.user.id || this.subset.creator.id === this.user.id + }, + title () { + if (!this.identifier) { + return null + } + return IdentifierMapper.identifierPreferEnglishTitle(this.identifier) + } + }, + mounted () { + /* mount pid */ + if (this.pid) { + const filter = this.identifiers.filter(i => i.id === Number(this.pid)) + if (filter.length > 0) { + this.identifier = filter[0] + console.debug('identifier set according to route pid', this.identifier) + return + } + } + this.identifier = this.identifiers[0] + console.debug('defaulted to latest identifier', this.identifier) + /* load subset metadata */ + if (!this.subset) { + this.loadSubset() + } + }, + methods: { + save () { + this.loadingSave = true + QueryService.persist(this.$route.params.database_id, this.$route.params.query_id) + .then((subset) => { + this.subset = subset + }) + .finally(() => { + this.loadingSave = false + }) + }, + loadSubset () { + this.loading = true + QueryService.findOne(this.$route.params.database_id, this.$route.params.query_id) + .then((subset) => { + this.subset = subset + }) + .finally(() => { + this.loading = false + }) + }, + downloadSubset () { + this.downloadLoading = true + QueryService.exportSubset(this.$route.params.database_id, this.$route.params.query_id) + .then((data) => { + const url = window.URL.createObjectURL(new Blob([data])) + const link = document.createElement('a') + link.href = url + link.setAttribute('download', 'subset.csv') + document.body.appendChild(link) + link.click() + }) + .finally(() => { + this.downloadLoading = false + }) + } + } +} +</script> diff --git a/dbrepo-ui/components/TableList.vue b/dbrepo-ui/components/TableList.vue index 261a8cc4a4a495b5df25f2ed221a42199a98a9a2..b63fb589c6c8c1222109efd85978f833d75febe4 100644 --- a/dbrepo-ui/components/TableList.vue +++ b/dbrepo-ui/components/TableList.vue @@ -9,9 +9,7 @@ <div v-for="(item,i) in tables" :key="i"> <v-divider v-if="i !== 0" class="mx-4" /> <v-list-item-group> - <v-list-item - two-line - :to="`/database/${$route.params.database_id}/table/${item.id}`"> + <v-list-item two-line :class="clazz(item)" :to="`/database/${$route.params.database_id}/table/${item.id}/info`"> <v-list-item-content> <v-list-item-title v-text="item.name" /> <v-list-item-subtitle class="mt-2"> @@ -19,12 +17,12 @@ <span v-else>(no description)</span> </v-list-item-subtitle> </v-list-item-content> - <v-list-item-action> + <v-list-item-action v-if="item.identifiers && item.identifiers.length > 0"> <v-tooltip left> <template v-slot:activator="{ on, attrs }"> - <span v-bind="attrs" v-on="on" v-text="permissionAcronyms(item)" /> + <v-icon color="primary" v-bind="attrs" v-on="on">mdi-identifier</v-icon> </template> - <span v-text="permissionTooltip(item)" /> + Persistent identifier </v-tooltip> </v-list-item-action> </v-list-item> @@ -46,18 +44,6 @@ export default { column: null, dialogSemantic: false, mode: 'unit', - tableDetails: { - id: null, - internal_name: null, - description: null, - queue_name: null, - routing_key: null, - columns: [], - created: null, - creator: { - username: null - } - }, dialogDelete: false, headers: [ { value: 'name', text: 'Name' }, @@ -100,27 +86,6 @@ export default { return null } return this.database.tables - }, - createdUTC () { - if (this.tableDetails.created === undefined || this.tableDetails.created === null) { - return null - } - return formatTimestampUTCLabel(this.tableDetails.created) - }, - canRead () { - if (this.database && this.database.is_public) { - return true - } - if (!this.user || !this.access) { - return false - } - return this.access.type === 'read' || this.access.type === 'write_own' || this.access.type === 'write_all' - }, - canModify () { - if (!this.user || !this.access) { - return false - } - return this.access.type === 'write_own' || this.access.type === 'write_all' } }, methods: { @@ -129,18 +94,11 @@ export default { this.mode = mode this.dialogSemantic = true }, - hasUnit (item) { - return item.unit !== null + clazz (table) { + return this.hasIdentifiers(table) ? 'primary--text' : null }, - hasConcept (item) { - return item.concept !== null - }, - columnName (column) { - const filter = this.columnTypes.filter(t => t.value === column.column_type) - if (filter.length > 0) { - return filter[0].text - } - return column.column_type + hasIdentifiers (table) { + return table && 'identifiers' in table && table.identifiers.length > 0 }, closed (data) { console.debug('closed dialog', data) @@ -148,37 +106,10 @@ export default { }, created (created) { return formatTimestampUTCLabel(created) - }, - permissionAcronyms (table) { - let acronyms = '' - if (this.canRead) { - acronyms += 'R' - } - if (!this.access) { - return acronyms - } - if (this.access.type === 'write_all' || (this.access.type === 'write_own' && table.owner.id === this.user.id)) { - acronyms += 'W' - } - return acronyms - }, - permissionTooltip (table) { - let tooltip = '' - if (this.canRead) { - tooltip += 'You can read' - } - if (!this.access) { - return tooltip - } - if (this.access.type === 'write_all' || (this.access.type === 'write_own' && table.owner.id === this.user.id)) { - tooltip += ' and write' - } - return tooltip } } } </script> - <style scoped> .colTable thead th { text-align: initial; diff --git a/dbrepo-ui/components/TableToolbar.vue b/dbrepo-ui/components/TableToolbar.vue index 90720a6ff2914c9da7e0fe3cd752d19f979ef963..05fca69bbe93792aa6ba9d90a53e747d89db69a3 100644 --- a/dbrepo-ui/components/TableToolbar.vue +++ b/dbrepo-ui/components/TableToolbar.vue @@ -20,18 +20,21 @@ <v-btn v-if="canDeleteTuple" color="error" class="mb-1" :loading="loadingDelete" @click="deleteItems"> <v-icon left>mdi-delete</v-icon> Delete <span v-if="selection.length > 1"> {{ selection.length }}</span> </v-btn> + <v-btn v-if="canImportCsv" class="mb-1" :to="`/database/${$route.params.database_id}/table/${$route.params.table_id}/import`"> + <v-icon left>mdi-cloud-upload</v-icon> Import .csv + </v-btn> <v-btn v-if="canExecuteQuery" class="mb-1" :to="`/database/${$route.params.database_id}/query/create?tid=${$route.params.table_id}`" color="secondary"> <v-icon left>mdi-wrench</v-icon> Create Subset </v-btn> <v-btn v-if="canCreateView" class="mb-1" :to="`/database/${$route.params.database_id}/view/create?tid=${$route.params.table_id}`" color="secondary"> <v-icon left>mdi-view-carousel</v-icon> Create View </v-btn> - <v-btn v-if="canImportCsv" class="mb-1" :to="`/database/${$route.params.database_id}/table/${$route.params.table_id}/import`"> - <v-icon left>mdi-cloud-upload</v-icon> Import .csv - </v-btn> <v-btn v-if="canDropTable" class="mb-1" color="error" @click="dropTableDialog = true"> <v-icon left>mdi-delete</v-icon> Drop Table </v-btn> + <v-btn v-if="canGetPid" class="mb-1" color="primary" :to="`/database/${$route.params.database_id}/table/${$route.params.table_id}/persist`"> + <v-icon left>mdi-content-save-outline</v-icon> Get PID + </v-btn> </v-toolbar-title> </v-toolbar> <v-tabs v-model="tab" color="primary"> @@ -49,7 +52,7 @@ v-model="editTupleDialog" persistent max-width="640"> - <EditTuple :columns="table.columns" :tuple="tuple" :edit="edit" @close="close" /> + <EditTuple :table="table" :tuple="tuple" :edit="edit" @close="close" /> </v-dialog> <v-dialog v-model="dropTableDialog" @@ -64,8 +67,8 @@ import EditTuple from '@/components/dialogs/EditTuple' import TableService from '@/api/table.service' import UserUtils from '@/api/user.utils' import DatabaseUtils from '@/api/database.utils' -import TableUtils from '@/api/table.utils' import DropTable from '@/components/dialogs/DropTable' +import TableUtils from '@/api/table.utils' export default { components: { @@ -92,9 +95,6 @@ export default { } }, computed: { - loadingColor () { - return 'primary' - }, database () { return this.$store.state.database }, @@ -110,9 +110,6 @@ export default { roles () { return this.$store.state.roles }, - token () { - return this.$store.state.token - }, canAddTuple () { if (!this.roles || !this.isDataTab) { return false @@ -144,10 +141,13 @@ export default { return UserUtils.hasReadAccess(this.access) && this.roles.includes('execute-query') }, canDropTable () { - if (!this.roles || !this.table) { + if (!this.roles || !this.table || !this.user) { return false } - return TableUtils.isOwner(this.table, this.user) || this.roles.includes('drop-foreign-table') + if (this.roles.includes('delete-foreign-table')) { + return true + } + return TableUtils.isOwner(this.table, this.user) && this.roles.includes('delete-table') && this.table.identifiers.length === 0 }, canCreateView () { if (!this.user) { @@ -180,11 +180,11 @@ export default { tuple () { return this.edit ? this.selection[0] : {} }, - isOwner () { - if (!this.user || !this.database || !this.database.creator) { + canGetPid () { + if (!this.user || !this.table || !this.database) { return false } - return this.database.creator.username === this.user.username + return this.database.owner.id === this.user.id || this.table.owner.id === this.user.id } }, methods: { @@ -209,10 +209,8 @@ export default { this.pickVersionDialog = true }, deleteItems () { - if (this.selection.length < 1) { - return - } this.loadingDelete = true + const wait = [] for (const select of this.selection) { /* remove in container */ const constraints = {} @@ -221,12 +219,20 @@ export default { .forEach((c) => { constraints[c.internal_name] = select[c.internal_name] }) - TableService.deleteTuple(this.$route.params.database_id, this.$route.params.table_id, { keys: constraints }) - .then(() => { - this.$toast.success(`Deleted ${this.selection.length} row${this.selection.length !== 1 ? 's' : ''}`) - this.$emit('modified', { success: true, action: 'delete' }) - }) - } + if (Object.keys(constraints).length === 0) { + console.warn(`Table with id ${this.$route.params.table_id} does not have primary key(s): attempt to delete by values`) + this.table.columns + .forEach((c) => { + constraints[c.internal_name] = select[c.internal_name] + }) + } + wait.push(TableService.deleteTuple(this.$route.params.database_id, this.$route.params.table_id, { keys: constraints })) + } + Promise.all(wait) + .then(() => { + this.$toast.success(`Deleted ${this.selection.length} row(s)`) + this.$emit('modified', { success: true, action: 'delete' }) + }) this.loadingDelete = false }, close (event) { diff --git a/dbrepo-ui/components/ViewList.vue b/dbrepo-ui/components/ViewList.vue index 5dace8f6151cdb39fd0129e344a5d04aaa8d0483..6e1370c4ab1bf7c45652bb8bc61b896a72319454 100644 --- a/dbrepo-ui/components/ViewList.vue +++ b/dbrepo-ui/components/ViewList.vue @@ -4,22 +4,22 @@ <v-card v-if="!loading && views.length === 0" flat> <v-card-text v-text="emptyText" /> </v-card> - <div v-for="(item,i) in views" :key="i"> + <div v-for="(view,i) in views" :key="i"> <v-divider v-if="i !== 0" class="mx-4" /> <v-list-item-group> - <v-list-item two-line :class="clazz(item)" :to="link(item)" :href="navigate(item)"> + <v-list-item two-line :class="clazz(view)" :to="`/database/${$route.params.database_id}/view/${view.id}/info`"> <v-list-item-content> - <v-list-item-title v-text="item.name" /> + <v-list-item-title v-text="view.name" /> <v-list-item-subtitle class="mt-2"> - <pre>{{ item.query }}</pre> + <pre>{{ view.query }}</pre> </v-list-item-subtitle> </v-list-item-content> - <v-list-item-action v-if="item.identifier"> + <v-list-item-action v-if="hasIdentifiers(view)"> <v-tooltip left> <template v-slot:activator="{ on, attrs }"> <v-icon color="primary" v-bind="attrs" v-on="on">mdi-identifier</v-icon> </template> - View has persistent identifier + Persistent identifier </v-tooltip> </v-list-item-action> </v-list-item> @@ -29,30 +29,15 @@ </template> <script> -import { formatTimestampUTCLabel } from '@/utils' -import DatabaseService from '@/api/database.service' - export default { data () { return { loading: false, loadingDetails: false, - error: false, - panel: null, - viewDetails: { - id: null, - internal_name: null, - description: null, - created: null, - is_public: null, - created_by: null - } + error: false } }, computed: { - token () { - return this.$store.state.token - }, loadingColor () { return this.error ? 'red lighten-2' : 'primary' }, @@ -70,60 +55,17 @@ export default { if (!this.database) { return [] } - return this.$store.state.database.views - }, - isOwner () { - if (!this.user) { - return false - } - return this.database.creator.username === this.user.username - }, - createdUTC () { - if (this.viewDetails.created === undefined || this.viewDetails.created === null) { - return null - } - return formatTimestampUTCLabel(this.viewDetails.created) - }, - canDelete () { - return this.viewDetails.created_by === this.user.id + return this.database.views } }, mounted () { }, methods: { - deleteView (view) { - this.loading = true - DatabaseService.deleteView(this.$route.params.database_id, view.id) - .then(() => { - this.$toast.success(`Successfully deleted view with id ${view.id}`) - }) - .finally(() => { - this.loading = false - }) + clazz (view) { + return this.hasIdentifiers(view) ? 'primary--text' : null }, - link (viewOrIdentifier) { - if (viewOrIdentifier.identifier === null) { - return `/database/${this.$route.params.database_id}/view/${viewOrIdentifier.id}` - } - if ('view_id' in viewOrIdentifier) { - return null - } - return null - }, - navigate (viewOrIdentifier) { - if (viewOrIdentifier.identifier === null) { - return - } - if ('query_id' in viewOrIdentifier) { - return `/pid/${viewOrIdentifier.id}` - } - return `/pid/${viewOrIdentifier.identifier.id}` - }, - clazz (viewOrIdentifier) { - if ('view_id' in viewOrIdentifier || viewOrIdentifier.identifier) { - return 'primary--text' - } - return null + hasIdentifiers (view) { + return view && 'identifiers' in view && view.identifiers.length > 0 } } } diff --git a/dbrepo-ui/components/ViewToolbar.vue b/dbrepo-ui/components/ViewToolbar.vue new file mode 100644 index 0000000000000000000000000000000000000000..b210ef696e03a3e855ea71849d014a34c7b8142d --- /dev/null +++ b/dbrepo-ui/components/ViewToolbar.vue @@ -0,0 +1,94 @@ +<template> + <div v-if="view"> + <v-toolbar flat> + <v-toolbar-title> + <v-btn id="back-btn" class="mr-2" :to="`/database/${$route.params.database_id}/view`"> + <v-icon left>mdi-arrow-left</v-icon> + </v-btn> + </v-toolbar-title> + <v-toolbar-title> + <span v-if="view.name">{{ view.name }}</span> + </v-toolbar-title> + <v-spacer /> + <v-toolbar-title> + <v-btn v-if="canDeleteView" :loading="loadingDelete" color="error" class="mb-1" @click="deleteView"> + <v-icon left>mdi-delete</v-icon> Delete + </v-btn> + <v-btn v-if="canCreatePid" class="mb-1 ml-2" color="primary" :to="`/database/${$route.params.database_id}/view/${$route.params.view_id}/persist`"> + <v-icon left>mdi-content-save-outline</v-icon> Get PID + </v-btn> + </v-toolbar-title> + </v-toolbar> + <v-tabs v-model="tab" color="primary"> + <v-tab :to="`/database/${$route.params.database_id}/view/${$route.params.view_id}/info`"> + Info + </v-tab> + <v-tab :to="`/database/${$route.params.database_id}/view/${$route.params.view_id}/data`"> + Data + </v-tab> + </v-tabs> + </div> +</template> + +<script> +import UserUtils from '@/api/user.utils' +import DatabaseService from '@/api/database.service' + +export default { + components: { + }, + data () { + return { + tab: null, + loading: false, + loadingDelete: false + } + }, + computed: { + database () { + return this.$store.state.database + }, + view () { + if (!this.database) { + return null + } + return this.database.views.filter(v => v.id === Number(this.$route.params.view_id))[0] + }, + canDeleteView () { + if (!this.roles || !this.user || !this.view || !this.view.creator) { + return false + } + return this.roles.includes('delete-database-view') && this.view.creator.id === this.user.id + }, + canCreatePid () { + if (!this.roles || !this.user || !this.view) { + return false + } + return this.roles.includes('create-identifier') && UserUtils.hasReadAccess(this.access) + }, + access () { + return this.$store.state.access + }, + user () { + return this.$store.state.user + }, + roles () { + return this.$store.state.roles + } + }, + methods: { + deleteView () { + this.loadingDelete = true + DatabaseService.deleteView(this.$route.params.database_id, this.$route.params.view_id) + .then(async () => { + this.$toast.success('Successfully deleted view!') + await this.$store.dispatch('reloadDatabase') + await this.$router.push(`/database/${this.$route.params.database_id}/view`) + }) + .finally(() => { + this.loadingDelete = false + }) + } + } +} +</script> diff --git a/dbrepo-ui/components/dialogs/CreateDB.vue b/dbrepo-ui/components/dialogs/CreateDB.vue index 0f31bb480da77f17843c9d76e870a8bd9b8a3c4d..aacac406b0c401db993e0eb81d03a18e20648faa 100644 --- a/dbrepo-ui/components/dialogs/CreateDB.vue +++ b/dbrepo-ui/components/dialogs/CreateDB.vue @@ -114,7 +114,6 @@ export default { this.loading = true try { this.database = await DatabaseService.create({ container_id: this.engine.id, name: this.createDatabaseDto.name, is_public: true }) - await this.$store.dispatch('reloadDatabaseCount') this.$emit('close', { success: true }) return this.database } finally { diff --git a/dbrepo-ui/components/dialogs/DeleteIdentifier.vue b/dbrepo-ui/components/dialogs/DeleteIdentifier.vue index 373f2b86c62ce0baa2fef230cd7b2ccea6119cfe..aa1da7508fc2bca26fe6b90b0763ecae8b8a910b 100644 --- a/dbrepo-ui/components/dialogs/DeleteIdentifier.vue +++ b/dbrepo-ui/components/dialogs/DeleteIdentifier.vue @@ -1,12 +1,12 @@ <template> <div> - <v-form ref="form" v-model="valid" autocomplete="off" @submit.prevent="submit"> + <v-form v-if="identifier" ref="form" v-model="valid" autocomplete="off" @submit.prevent="submit"> <v-card> <v-card-title v-text="title" /> <v-card-text> <v-row dense> <v-col> - This action cannot be undone! Type the identifier <strong>{{ confirmText }}</strong> below if you really want to delete it. + This action cannot be undone! Type the identifier <code>{{ confirmText }}</code> below if you really want to delete it. </v-col> </v-row> <v-row dense> @@ -63,21 +63,9 @@ export default { }, computed: { title () { - if (!this.identifier || !('doi' in this.identifier)) { - return null - } - if (this.identifier.doi) { - return `DOI ${this.identifier.doi}` - } - return `Identifier with id ${this.identifier.id}` + return `PID ${this.confirmText}` }, confirmText () { - if (!this.identifier || !('doi' in this.identifier)) { - return null - } - if (this.identifier.doi) { - return this.identifier.doi - } return `/pid/${this.identifier.id}` } }, diff --git a/dbrepo-ui/components/dialogs/DropTable.vue b/dbrepo-ui/components/dialogs/DropTable.vue index 0a60a4fb3200f1e72cbd2c89b336b493fb4cfd4e..91d0245ffbbd37b534f981981600e3c2dbe5be5f 100644 --- a/dbrepo-ui/components/dialogs/DropTable.vue +++ b/dbrepo-ui/components/dialogs/DropTable.vue @@ -33,6 +33,7 @@ color="error" :loading="loadingDelete" :disabled="confirm !== table.internal_name" + type="submit" @click="dropTable"> Delete </v-btn> @@ -56,6 +57,9 @@ export default { computed: { table () { return this.$store.state.table + }, + database () { + return this.$store.state.database } }, methods: { @@ -70,7 +74,7 @@ export default { return } this.loadingDelete = true - TableService.delete(this.table.database.id, this.table.id) + TableService.delete(this.database.id, this.table.id) .then(() => { console.info('Deleted table with id ', this.table.id) this.$toast.success('Successfully deleted table with id ' + this.table.id) diff --git a/dbrepo-ui/components/dialogs/EditAccess.vue b/dbrepo-ui/components/dialogs/EditAccess.vue index df50de88d9d538b72e053a1cb095e947cfa85e34..020a54b4badd722da6a22f74e6b9e6fba84ad9a0 100644 --- a/dbrepo-ui/components/dialogs/EditAccess.vue +++ b/dbrepo-ui/components/dialogs/EditAccess.vue @@ -2,7 +2,6 @@ <div> <v-form ref="form" v-model="valid" autocomplete="off" @submit.prevent="submit"> <v-card> - <v-progress-linear v-if="loading" :color="loadingColor" :indeterminate="!error" /> <v-card-title v-text="title" /> <v-card-subtitle v-if="subtitle" v-text="subtitle" /> <v-card-text> @@ -46,7 +45,7 @@ <v-btn id="database" class="mb-2 ml-3 mr-2 black--text" - :disabled="!valid || loading" + :disabled="!valid || loading || accessType === modify.type" :color="buttonColor" type="submit" :loading="loading" @@ -65,7 +64,7 @@ import UserService from '@/api/user.service' export default { props: { - username: { + userId: { type: String, default () { return null @@ -98,9 +97,6 @@ export default { } }, computed: { - loadingColor () { - return this.error ? 'red lighten-2' : 'primary' - }, token () { return this.$store.state.token }, @@ -138,14 +134,14 @@ export default { return 'warning' }, isModification () { - return this.username !== null + return this.userId !== null }, buttonText () { - return (this.isModification ? 'Modify' : 'Give') + ' Access' + return (this.isModification ? 'Modify' : 'Create') } }, watch: { - username () { + userId () { this.init() }, accessType () { @@ -163,6 +159,7 @@ export default { this.$emit('close-dialog', { success: false }) }, async updateAccess () { + this.loading = true if (this.isModification) { if (this.modify.type === 'revoke') { await this.revokeAccess() @@ -174,7 +171,6 @@ export default { } }, revokeAccess () { - this.loading = true DatabaseService.revokeAccess(this.$route.params.database_id, this.modify.userId) .then(() => { this.$toast.success('Successfully revoked access') @@ -185,7 +181,6 @@ export default { }) }, modifyAccess () { - this.loading = true DatabaseService.modifyAccess(this.$route.params.database_id, this.modify.userId, this.modify.type) .then(() => { this.$toast.success('Successfully modified access') @@ -196,7 +191,6 @@ export default { }) }, giveAccess () { - this.loading = true DatabaseService.giveAccess(this.$route.params.database_id, this.modify.userId, this.modify.type) .then(() => { this.$toast.success('Successfully provisioned access') @@ -217,11 +211,11 @@ export default { }) }, init () { - if (!this.username) { - this.modify.username = null + if (!this.userId) { + this.modify.userId = null this.loadUsers() } else { - this.modify.username = this.username + this.modify.userId = this.userId /* eligible users are computed separately */ } if (!this.accessType) { diff --git a/dbrepo-ui/components/dialogs/EditTuple.vue b/dbrepo-ui/components/dialogs/EditTuple.vue index d3f240100c500b27699675f47646857c8ed6ef71..7731998cbe04b6366c94d640b237e13175f23110 100644 --- a/dbrepo-ui/components/dialogs/EditTuple.vue +++ b/dbrepo-ui/components/dialogs/EditTuple.vue @@ -4,8 +4,9 @@ <v-card> <v-progress-linear v-if="loading" :color="loadingColor" :indeterminate="!error" /> <v-card-title v-text="title" /> + <v-card-subtitle v-if="subtitle" v-text="subtitle" /> <v-card-text> - <div v-for="(column,idx) in columns" :key="idx"> + <div v-for="(column,idx) in table.columns" :key="idx"> <v-text-field v-if="isNumber(column)" v-model.number="localTuple[column.internal_name]" @@ -144,9 +145,16 @@ export default { type: Boolean, default: false }, - columns: { - type: Array, - default: () => [] + table: { + type: Object, + default: () => { + return { + columns: [], + constraints: { + checks: [] + } + } + } } }, data () { @@ -172,6 +180,12 @@ export default { }, title () { return (this.edit ? 'Edit' : 'Add') + ' Tuple' + }, + subtitle () { + if (!this.table.constraints) { + return null + } + return this.table.constraints.checks.length > 0 ? `Constraints: ${this.table.constraints.checks}` : null } }, watch: { @@ -268,7 +282,7 @@ export default { }, updateTuple () { const constraints = {} - this.columns + this.table.columns .filter(c => c.is_primary_key) .forEach((c) => { constraints[c.internal_name] = this.tuple[c.internal_name] @@ -285,12 +299,12 @@ export default { }, addTuple () { const constraints = {} - this.columns + this.table.columns .filter(c => c.is_primary_key) .forEach((c) => { constraints[c.internal_name] = this.localTuple[c.internal_name] }) - this.columns.forEach((column) => { + this.table.columns.forEach((column) => { if (!(column.internal_name in this.localTuple)) { this.localTuple[column.internal_name] = null this.localDisplay[column.internal_name] = null diff --git a/dbrepo-ui/components/identifier/Banner.vue b/dbrepo-ui/components/identifier/Banner.vue index dd82242132dfa97d21f9f42b004ae7f6782dcba6..7bcd57411b31c1c647b7e7b98445e14beb69d2fb 100644 --- a/dbrepo-ui/components/identifier/Banner.vue +++ b/dbrepo-ui/components/identifier/Banner.vue @@ -1,9 +1,11 @@ <template> <div> - {{ prefix }}: <a :href="pidUrl">{{ displayName }}</a> + {{ prefix }}: <a :href="href">{{ displayName }}</a> </div> </template> <script> +import IdentifierMapper from '@/api/identifier.mapper' + export default { props: { identifier: { @@ -14,35 +16,14 @@ export default { } }, computed: { - baseUrl () { - return `${location.protocol}//${location.host}` - }, - baseDoi () { - return this.$store.state.doiUrl - }, - isDoi () { - if (!this.identifier) { - return null - } - return this.identifier.doi !== null - }, prefix () { - if (!this.identifier) { - return null - } - return this.isDoi ? 'DOI' : 'URI' - }, - pidUrl () { - if (!this.identifier) { - return null - } - return this.isDoi ? `${this.baseDoi}/${this.identifier.doi}` : `${this.baseUrl}/pid/${this.identifier.id}` + return IdentifierMapper.identifierToDisplayAcronym(this.identifier) }, displayName () { - if (!this.identifier) { - return null - } - return this.isDoi ? `${this.identifier.doi}` : `/pid/${this.identifier.id}` + return IdentifierMapper.identifierToDisplayName(this.identifier) + }, + href () { + return IdentifierMapper.identifierToUrl(this.identifier) } } } diff --git a/dbrepo-ui/components/identifier/Citation.vue b/dbrepo-ui/components/identifier/Citation.vue index 15ddd213e7dee67617aed12a5b2509a1f592aeae..f4f450946f8645ffba0ee455692b90b4522d6e59 100644 --- a/dbrepo-ui/components/identifier/Citation.vue +++ b/dbrepo-ui/components/identifier/Citation.vue @@ -5,17 +5,8 @@ </v-list-item-title> <v-list-item-content> <v-row no-gutters> - <v-col - v-if="loading"> - <v-skeleton-loader - class="skeleton-large" - type="list-item-two-line" /> - </v-col> - <v-col - v-if="!loading" - md="10"> - <pre - v-text="citation" /> + <v-col v-if="!loading" md="10"> + <pre v-text="citation" /> </v-col> <v-col md="2" diff --git a/dbrepo-ui/components/identifier/Persist.vue b/dbrepo-ui/components/identifier/Persist.vue index 02d1dbe9deafe58c3f0f689de2a735ec9377b6f0..9c8bc22c37d97f8ec9259d480eda3654919622c0 100644 --- a/dbrepo-ui/components/identifier/Persist.vue +++ b/dbrepo-ui/components/identifier/Persist.vue @@ -268,20 +268,6 @@ </v-card-text> <v-card-title>Publication</v-card-title> <v-card-text> - <v-row v-if="isSubset" dense> - <v-col cols="8"> - <v-select - v-model="identifier.visibility" - :items="visibilities" - item-text="name" - item-value="value" - label="Visibility *" - :hint="visibilityHint" - persistent-hint - :rules="[ v => !!v || $t('Required') ]" - required /> - </v-col> - </v-row> <v-row dense> <v-col cols="8"> <v-text-field @@ -508,6 +494,12 @@ export default { default () { return {} } + }, + table: { + type: Object, + default () { + return {} + } } }, data () { @@ -516,17 +508,13 @@ export default { loading: false, error: false, // XXX: `error` is never changed licenses: [], - visibilities: [ - { name: 'Public', value: 'everyone' }, - { name: 'Private', value: 'self' } - ], identifier: { database_id: parseInt(this.$route.params.database_id), query_id: parseInt(this.$route.params.query_id), view_id: parseInt(this.$route.params.view_id), + table_id: parseInt(this.$route.params.table_id), titles: [], descriptions: [], - visibility: 'everyone', publisher: this.$config.defaultPublisher, publication_year: formatYearUTC(Date.now()), publication_month: formatMonthUTC(Date.now()), @@ -611,12 +599,6 @@ export default { } }, computed: { - loadingColor () { - return this.error ? 'red lighten-2' : 'primary' - }, - token () { - return this.$store.state.token - }, user () { return this.$store.state.user }, @@ -629,6 +611,9 @@ export default { isView () { return this.type === 'view' }, + isTable () { + return this.type === 'table' + }, backTo () { if (this.isSubset) { return `/database/${this.$route.params.database_id}/query/${this.$route.params.query_id}` @@ -636,6 +621,8 @@ export default { return `/database/${this.$route.params.database_id}` } else if (this.isView) { return `/database/${this.$route.params.database_id}/view/${this.$route.params.view_id}` + } else if (this.isTable) { + return `/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}` } return null }, @@ -651,17 +638,15 @@ export default { } return this.identifier.creators.filter(c => c.name_identifier === this.user.attributes.orcid).length === 0 }, - visibilityHint () { - if (this.identifier.visibility === 'everyone') { - return 'The result set will be open access (world-readable)' - } - return 'The result set will be visible only to you' - }, prefix () { if (this.isSubset) { return 'Subset' } else if (this.isDatabase) { return 'Database' + } else if (this.isView) { + return 'View' + } else if (this.isTable) { + return 'Table' } return '' } @@ -853,32 +838,29 @@ export default { const payload = identifierMapper.identifierToIdentifierSave(this.identifier) if (this.isUpdate) { IdentifierService.update(this.identifier.id, payload) - .then(async () => { - await this.$store.dispatch('reloadDatabase') - await this.$router.push(this.backTo) - await this.$toast.success(this.prefix + ' successfully persisted') + .then(() => { + console.info('Updated identifier with id', this.identifier.id) + this.$store.dispatch('reloadDatabase') + this.$router.push(this.backTo) + this.$toast.success(this.prefix + ' successfully persisted') }) .finally(() => { this.loading = false }) - console.info('Updated identifier with id', this.identifier.id) } else { IdentifierService.create(payload) .then(async () => { + console.info('Created identifier') await this.$store.dispatch('reloadDatabase') - await this.$router.push(this.backTo) await this.$toast.success(this.prefix + ' successfully persisted') + await this.$router.push(this.backTo) }) .finally(() => { this.loading = false }) - console.info('Created identifier') } }, loadLicenses () { - if (!this.token) { - return - } this.loading = true DatabaseService.findAllLicenses() .then((licenses) => { diff --git a/dbrepo-ui/components/identifier/Select.vue b/dbrepo-ui/components/identifier/Select.vue new file mode 100644 index 0000000000000000000000000000000000000000..634e5ff7add8a6ec320c291d4a2d9c922f1c91a2 --- /dev/null +++ b/dbrepo-ui/components/identifier/Select.vue @@ -0,0 +1,114 @@ +<template> + <div> + <v-list-item-group v-model="idx" color="primary"> + <v-list-item v-for="(id,i) in identifiers" :key="i" :href="href(id)" two-line> + <v-list-item-content> + <v-list-item-title>{{ formatTimestampUTCLabel(id.created) }}</v-list-item-title> + <v-list-item-subtitle> + <Banner :identifier="id" /> + </v-list-item-subtitle> + </v-list-item-content> + <v-list-item-action> + <v-btn v-if="canDeleteIdentifier" color="error" x-small @click="deleteDialog = true">Delete PID</v-btn> + <v-tooltip v-else left> + <template v-slot:activator="{ on, attrs }"> + <v-icon color="primary" v-bind="attrs" v-on="on">mdi-identifier</v-icon> + </template> + Persistent identifier + </v-tooltip> + </v-list-item-action> + </v-list-item> + </v-list-item-group> + <v-dialog + v-model="deleteDialog" + persistent + max-width="480"> + <DeleteIdentifier :identifier="localIdentifier" @close="closeDeleteDialog" /> + </v-dialog> + </div> +</template> +<script> +import Banner from '@/components/identifier/Banner' +import { formatTimestampUTCLabel } from '@/utils' +import DeleteIdentifier from '@/components/dialogs/DeleteIdentifier' + +export default { + components: { + DeleteIdentifier, + Banner + }, + props: { + identifiers: { + type: Array, + default () { + return [] + } + }, + identifier: { + type: Object, + default () { + return {} + } + } + }, + data () { + return { + idx: null, + deleteDialog: false, + localIdentifier: null + } + }, + computed: { + user () { + return this.$store.state.user + }, + roles () { + return this.$store.state.roles + }, + canDeleteIdentifier () { + if (!this.user) { + return false + } + return this.roles.includes('delete-identifier') + } + }, + watch: { + identifier: { + handler () { + this.init() + }, + deep: true + }, + idx: { + handler () { + this.localIdentifier = this.identifiers[this.idx] + } + } + }, + mounted () { + this.init() + }, + methods: { + formatTimestampUTCLabel, + href (identifier) { + if (this.canDeleteIdentifier) { + return null + } + return `/pid/${identifier.id}` + }, + async closeDeleteDialog (event) { + if (event.action === 'deleted') { + await this.$store.dispatch('reloadDatabase') + } + this.deleteDialog = false + }, + init () { + if (!this.identifiers || this.identifiers.length === 0 || !this.identifier) { + return null + } + this.idx = this.identifiers.map(i => i.id).indexOf(this.identifier.id) + this.localIdentifier = this.identifier + } + } +} +</script> diff --git a/dbrepo-ui/components/identifier/Summary.vue b/dbrepo-ui/components/identifier/Summary.vue index 45a31d210631174a5a9866108eb4760e34df320a..9e034d30e5cc698e8071fad28efd218b58ff6bf5 100644 --- a/dbrepo-ui/components/identifier/Summary.vue +++ b/dbrepo-ui/components/identifier/Summary.vue @@ -1,7 +1,7 @@ <template> <v-card flat tile> <v-card-title>Identifier</v-card-title> - <v-card-text> + <v-card-text v-if="identifier"> <v-list dense> <v-list-item> <v-list-item-content> diff --git a/dbrepo-ui/components/query/Builder.vue b/dbrepo-ui/components/query/Builder.vue index 143a842b5d8efe59975451ee720675c97854cc7c..0b0433cdf7fa53d76d8a2240c0b3c4a384c3f7a3 100644 --- a/dbrepo-ui/components/query/Builder.vue +++ b/dbrepo-ui/components/query/Builder.vue @@ -9,7 +9,7 @@ <v-toolbar-title>{{ title }}</v-toolbar-title> <v-spacer /> <v-toolbar-title> - <v-btn v-if="token && !isExecuted" :disabled="!canExecute || !valid" :loading="loadingQuery" color="primary" @click="execute"> + <v-btn v-if="user && !isExecuted" :disabled="!canExecute || !valid" :loading="loadingQuery" color="primary" @click="execute"> <v-icon left>mdi-run</v-icon> Create </v-btn> @@ -34,7 +34,7 @@ <v-form v-model="valid"> <v-card flat> <v-card-text v-if="isView"> - <v-row> + <v-row dense> <v-col cols="6"> <v-text-field v-model="view.name" @@ -46,18 +46,30 @@ required /> </v-col> </v-row> - <v-row> + <v-row v-if="!view.is_public" dense> <v-col> - <v-switch + <v-alert + border="left" + color="warning"> + The view metadata (name, query, etc.) will still be public, but the data will only be visible to you. + </v-alert> + </v-col> + </v-row> + <v-row dense> + <v-col cols="6"> + <v-select v-model="view.is_public" - :label="`${view.is_public ? 'Public' : 'Private'} view`" /> + :items="visibilityOptions" + item-text="name" + item-value="value" + label="View visibility" /> </v-col> </v-row> </v-card-text> <v-card-text> <v-tabs-items v-model="tabs"> <v-tab-item> - <v-row> + <v-row dense> <v-col cols="6"> <v-select v-model="table" @@ -150,6 +162,7 @@ <script> import DatabaseService from '@/api/database.service' import MiddlewareService from '@/api/middleware.service' +import TableMapper from '@/api/table.mapper' export default { props: { @@ -208,16 +221,17 @@ export default { rawSQL: '', select: [], clauses: [], - tabs: 0 + tabs: 0, + visibilityOptions: [ + { name: 'Public', value: true }, + { name: 'Private', value: false } + ] } }, computed: { columnNames () { return this.columns && this.columns.map(s => s.internal_name) }, - tableId () { - return this.table.id - }, columns () { if (!this.table) { return [] @@ -233,19 +247,17 @@ export default { database () { return this.$store.state.database }, - viewLink () { - return `/database/${this.$route.params.database_id}` + (this.isView ? '/view' : '/query') + `/${this.resultId}` - }, - token () { - return this.$store.state.token + user () { + return this.$store.state.user }, - config () { - if (this.token === null) { - return {} - } - return { - headers: { Authorization: `Bearer ${this.token}` } + viewNames () { + if (!this.database) { + return [] } + return this.database.views.map(v => v.internal_name) + }, + viewLink () { + return `/database/${this.$route.params.database_id}` + (this.isView ? '/view' : '/query') + `/${this.resultId}` }, sql () { if (this.tabs === 0) { @@ -292,8 +304,7 @@ export default { if (!name) { return false } - const names = this.views.map(v => v.name) - return names.includes(name.toLowerCase()) + return this.viewNames.includes(TableMapper.tableNameToInternalName(name)) }, selectTable () { if (this.$route.query.tid === undefined) { diff --git a/dbrepo-ui/components/search/AdvancedSearch.vue b/dbrepo-ui/components/search/AdvancedSearch.vue index 6113cc14ff723ae1720f3f4bec67649537f24c31..ac02bdf2e12eeb66a69ee9ab4f05f576302e834c 100644 --- a/dbrepo-ui/components/search/AdvancedSearch.vue +++ b/dbrepo-ui/components/search/AdvancedSearch.vue @@ -6,7 +6,7 @@ <v-row dense> <v-col cols="3"> <v-select - v-model="index" + v-model="searchType" :items="fieldItems" item-text="name" item-value="value" @@ -14,7 +14,7 @@ label="Type" /> </v-col> </v-row> - <p>The following fields are <code>AND</code> connected and depend on the type above.</p> + <p>The following fields are <code>AND</code> connected.</p> <v-row dense> <v-col cols="3"> <v-text-field @@ -41,43 +41,64 @@ <v-progress-circular color="primary" indeterminate /> </v-row> <v-row v-if="!loadingFields && renderedFields" dense> - <v-col v-for="field in renderedFields" :key="`f-${field.attribute_name}`" cols="3"> + <v-col v-for="field in renderedFields" :key="`f-${field.attr_name}`" cols="3"> <v-select v-if="field.type === 'boolean'" - v-model="advancedSearchData[generateDynamicVModelKey(field)]" + v-model="advancedSearchData[field.attr_name]" clearable :items="booleanItems" item-text="name" item-value="value" - :label="generateFriendlyName(field)" /> + :label="field.attr_friendly_name" /> <v-text-field - v-if="(field.type === 'keyword' && field.attribute_name !== 'column_type') || field.type === 'text' || field.type === 'date'" - v-model="advancedSearchData[generateDynamicVModelKey(field)]" + v-if="(field.type === 'keyword' && field.attr_name !== 'column_type') || field.type === 'text' || field.type === 'date'" + v-model="advancedSearchData[field.attr_name]" type="text" - :label="generateFriendlyName(field)" + :label="field.attr_friendly_name" clearable /> <v-select - v-if="field.type === 'keyword' && field.attribute_name === 'column_type'" - v-model="advancedSearchData[generateDynamicVModelKey(field)]" + v-if="field.type === 'keyword' && field.attr_name === 'column_type'" + v-model="advancedSearchData[field.attr_name]" :items="columnTypes" item-value="value" clearable - :label="generateFriendlyName(field)" /> + :label="field.attr_friendly_name" /> <v-text-field - v-if="field.type === 'integer'" - v-model="advancedSearchData[generateDynamicVModelKey(field)]" + v-if="field.type.startsWith('integer') || field.type.startsWith('long') || field.type.startsWith('double')" + v-model="advancedSearchData[field.attr_name]" type="number" - :label="generateFriendlyName(field)" + :label="field.attr_friendly_name" clearable /> <v-autocomplete - v-if="field.attribute_name === 'licenses'" - v-model="advancedSearchData[generateDynamicVModelKey(field)]" - :items="fetchLicenses()" - :label="generateFriendlyName(field)" + v-if="field.attr_name === 'licenses'" + v-model="advancedSearchData[field.attr_name]" + :items="fetchLicenses" + :label="field.attr_friendly_name" clearable multiple /> </v-col> </v-row> + <p v-if="isEligibleYearRangeSearch" class="mt-4"> + Specify your custom publication year range: + </p> + <v-row v-if="isEligibleYearRangeSearch" dense> + <v-col cols="3"> + <v-text-field + v-model="advancedSearchData['t1']" + type="number" + label="Start Year" + required + :rules="[v => !!v || $t('Required')]" + clearable /> + </v-col> + <v-col cols="3"> + <v-text-field + v-model="advancedSearchData['t2']" + type="number" + label="End Year" + clearable /> + </v-col> + </v-row> <p v-if="isEligibleConceptOrUnitSearch" class="mt-4"> If you select a <code>concept</code> and <code>unit</code>, you can search across columns regardless of their unit of measurement. @@ -122,6 +143,7 @@ class="mr-2" color="primary" :loading="loading" + :disabled="!valid" small @click="advancedSearch"> Search @@ -141,17 +163,35 @@ import SemanticMapper from '@/api/semantic.mapper' export default { data () { return { - index: 'database', + searchType: 'database', valid: false, loading: false, loadingFields: false, showAdvancedSearch: false, concepts: [], units: [], + yearFrom: null, + yearFromItems: [ + { name: `Since ${new Date().getFullYear()}`, value: new Date().getFullYear() }, + { name: `Since ${new Date().getFullYear() - 1}`, value: new Date().getFullYear() - 1 }, + { name: `Since ${new Date().getFullYear() - 2}`, value: new Date().getFullYear() - 2 }, + { name: `Since ${new Date().getFullYear() - 3}`, value: new Date().getFullYear() - 3 }, + { name: 'Custom', value: 'custom' } + ], columnTypes: QueryMapper.mySql8DataTypes().map((datatype) => { datatype.value = datatype.value.toUpperCase() return datatype }), + dynamicFields: { + database: ['is_public', 'owner.attributes.orcid', 'owner.username', 'identifier.publication_year'], + table: [], + column: [], + user: ['creator.firstname', 'creator.lastname', 'creator.username', 'creator.orcid'], + identifier: [], + view: [], + concept: ['tables.columns.concept.uri'], + unit: ['tables.columns.unit.uri'] + }, fieldItems: [ { name: 'Database', value: 'database' }, { name: 'Table', value: 'table' }, @@ -177,42 +217,53 @@ export default { }, computed: { hideFields () { - const selectedOption = this.index + const selectedOption = this.searchType return { hideNameField: selectedOption === 'identifier', hideInternalNameField: ['identifier', 'user', 'concept', 'unit'].includes(selectedOption) } }, isEligibleConceptOrUnitSearch () { - return ['column'].includes(this.index) + return ['column'].includes(this.searchType) + }, + isEligibleYearRangeSearch () { + return this.searchType === 'database' && this.yearFrom === 'custom' }, isAdvancedSearch () { return !this.$route.query.q + }, + type () { + if (!this.$route.query || !this.$route.query.t) { + return null + } + return this.$route.query.t } }, watch: { - index: { + $route: { + handler () { + this.initFieldsFromRoute() + } + }, + type: { + handler () { + this.initFieldsFromRoute() + } + }, + searchType: { handler (newType, oldType) { if (!newType) { return } - this.resetAdvancedSearchFields() - this.$emit('search-result', []) - this.loadingFields = true - SearchService.getFields(newType) - .then((response) => { - this.loadingFields = false - const { fields } = response - this.renderedFields = fields.filter(field => this.shouldRenderItem(field)) - }) - .finally(() => { - this.loadingFields = false - }) + this.initSearch(newType) + this.advancedSearch() }, immediate: true } }, mounted () { + this.initFieldsFromRoute() + this.initSearch(this.searchType) this.advancedSearch() SemanticService.findAllConcepts() .then((response) => { @@ -230,8 +281,12 @@ export default { /* Removes all advanced search fields when switching the type */ resetAdvancedSearchFields () { Object.keys(this.advancedSearchData) - .filter(k => !['name', 'internal_name', 'id', 'type'].includes(k)) - .forEach(k => delete this.advancedSearchData[k]) + .filter(k => !['name', 'internal_name', 'id'].includes(k)) + .filter(k => !Object.keys(this.$route.query).includes(k)) + .forEach((k) => { + console.debug('delete advanced search key', k) + delete this.advancedSearchData[k] + }) }, advancedSearch () { console.debug('performing advanced search') @@ -247,71 +302,24 @@ export default { this.advancedSearchData.t2 = Number(this.advancedSearchData.t2) } this.loading = true - SearchService.search(this.index, this.advancedSearchData) + SearchService.search(this.searchType, this.advancedSearchData) .then((response) => { - this.$emit('search-result', response.map(h => h._source)) + this.$emit('search-result', response) }) .finally(() => { this.loading = false }) }, - isAdvancedSearchEmpty () { - return !( - this.advancedSearchData.id || - this.advancedSearchData.name || - this.advancedSearchData.internal_name - ) - }, - dynamicFieldsMap () { - // Defines a mapping to narrow down the fields rendered for the advanced search - return { - database: ['is_public'], - table: ['description', 'is_public'], - column: ['column_type', 'is_primary_key', 'is_null_allowed'], - user: ['firstname', 'lastname', 'username', 'attributes.properties.orcid'], - identifier: [ - 'creators.properties.creator_name', 'creators.properties.name_identifier', - 'descriptions.properties.description', 'doi', 'funders.properties.funder_identifier', - 'publication_year', 'titles.properties.title' - ], - view: ['is_public', 'query'], - concept: ['uri'], - unit: ['uri'] - } - }, - getLastFlattenedItem (str) { - // Returns substring after the last dot otherwise the string itself if no dots are contained - if (!str) { return '' } - - // Check if string is a flattened nested object - return str.includes('.') ? str.split('.').slice(-1)[0] : str - }, - generateFriendlyName (item) { - // Generates a proper name to be displayed with the dynamic component - if (!item) { return '' } - - const specialAbbreviations = { - doi: 'DOI', - uri: 'URI' - // Add more abbreviations here, if needed - } - const str = this.getLastFlattenedItem(item.attribute_name) - - return str.split('_').map((word) => { - const lowerWord = word.toLowerCase() - return specialAbbreviations[lowerWord] || (word.charAt(0).toUpperCase() + word.slice(1)) - }).join(' ') - }, - generateDynamicVModelKey (item) { - // Generates a dynamic v-model; It will be attached to the advancedSearchData object - if (!item) { return '' } - - return `${this.index}.${item.attribute_name}` - }, shouldRenderItem (item) { - // Checks if item's attribute_name matches any wanted field + // Checks if item's attr_name matches any wanted field // The expected response is of a flattened format, so this method must be modified accordingly if the response is changed - return this.dynamicFieldsMap()[this.index].includes(item.attribute_name) + const possibleFields = this.dynamicFields[this.searchType] + const shouldBeRendered = possibleFields.map(tuple => tuple).includes(item.attr_name) + if (shouldBeRendered) { + const attr = item.attr_name.substr(item.attr_name.lastIndexOf('.'), item.attr_name.length) + console.debug('attribute', attr, 'should be rendered') + } + return shouldBeRendered }, fetchLicenses () { // Licenses is a nested object in the backend, but without any values. @@ -319,6 +327,36 @@ export default { return [ 'Apache-2.0', 'BSD-3-Clause', 'BSD-4-Clause', 'CC-BY-4.0', 'CC0-1.0', 'GPL-3.0-only', 'MIT' ] + }, + initSearch (searchType) { + this.resetAdvancedSearchFields() + this.$emit('search-result', []) + this.loadingFields = true + SearchService.getFields(searchType) + .then((response) => { + this.loadingFields = false + this.renderedFields = response.filter(field => this.shouldRenderItem(field)) + this.renderedFields.forEach((field) => { + const filter = this.dynamicFields[this.searchType].filter(tuple => tuple.key === field.attr_name) + if (filter.length > 0) { + field.attr_friendly_name = filter[0].name + } + }) + }) + .finally(() => { + this.loadingFields = false + }) + }, + initFieldsFromRoute () { + if (this.type) { + this.searchType = this.type + console.debug('type', this.type, 'is present: set search type to', this.searchType) + } + const keys = Object.keys(this.$route.query).filter(key => key !== 't').filter(key => this.dynamicFields[this.searchType].filter(dkey => key === dkey)) + keys.forEach((key) => { + this.advancedSearchData[key] = this.$route.query[key] + console.debug('set advanced search field with key', key, 'to value', this.$route.query[key]) + }) } } } diff --git a/dbrepo-ui/dbrepo.config.json b/dbrepo-ui/dbrepo.config.json index ba2286af337a8ebc5a46afecb09aa42f160aef15..6439febaa0a62b25080cd69fb9f26847f2b9ca64 100644 --- a/dbrepo-ui/dbrepo.config.json +++ b/dbrepo-ui/dbrepo.config.json @@ -5,7 +5,7 @@ "force": false }, "logo": { - "path": "/logo.png" + "path": "/logo.svg" }, "icon": { "path": "/favicon.ico" @@ -15,6 +15,7 @@ }, "broker": { "connection": { + "host": "localhost", "ports": [ 5672 ], diff --git a/dbrepo-ui/lang/de-DE.js b/dbrepo-ui/lang/de-DE.js deleted file mode 100644 index 091676461f784c2bb385eb4db3bd5d3f9ed35466..0000000000000000000000000000000000000000 --- a/dbrepo-ui/lang/de-DE.js +++ /dev/null @@ -1,4 +0,0 @@ -export default { - db_created_success: 'Datenbank wurde erfolgreich erstellt', - internal_server_error: 'Internal Server Error' -} diff --git a/dbrepo-ui/lang/en-US.js b/dbrepo-ui/lang/en-US.js deleted file mode 100644 index c60a0a69a5393cc13f3a10a9314d0d5afae4f4a1..0000000000000000000000000000000000000000 --- a/dbrepo-ui/lang/en-US.js +++ /dev/null @@ -1,4 +0,0 @@ -export default { - db_created_success: 'Database created successfully', - internal_server_error: 'Internal Server Error' -} diff --git a/dbrepo-ui/layouts/default.vue b/dbrepo-ui/layouts/default.vue index 66d6ee2385368a687a844e5fa85671f313571f88..cfeece7cbc6ac33394e606378a11e474b412f616 100644 --- a/dbrepo-ui/layouts/default.vue +++ b/dbrepo-ui/layouts/default.vue @@ -36,31 +36,6 @@ <v-list-item-title>{{ $t('layout.search', { name: 'vue-i18n' }) }}</v-list-item-title> </v-list-item-content> </v-list-item> - <v-list-item - to="/database" - router - exact> - <v-list-item-action> - <v-icon>mdi-database</v-icon> - </v-list-item-action> - <v-list-item-content> - <v-list-item-title>{{ $t('layout.databases', { name: 'vue-i18n' }) }}</v-list-item-title> - </v-list-item-content> - <v-list-item-action v-if="databaseCount" v-text="databaseCount.all" /> - </v-list-item> - <v-list-item - v-if="user" - to="/database?f=my" - router - exact> - <v-list-item-action> - <v-icon>mdi-bookmark-outline</v-icon> - </v-list-item-action> - <v-list-item-content> - <v-list-item-title>{{ $t('layout.mydatabases', { name: 'vue-i18n' }) }}</v-list-item-title> - </v-list-item-content> - <v-list-item-action v-if="databaseCount" v-text="databaseCount.my" /> - </v-list-item> <v-list-item v-if="canListOntologies" to="/semantic" @@ -131,6 +106,11 @@ </v-btn> </template> <v-list> + <v-list-item + v-if="user" + :to="`/search?t=database&owner.username=${user.username}`"> + {{ $t('layout.mydatabases', { name: 'vue-i18n' }) }} + </v-list-item> <v-list-item v-if="user" @click="logout"> @@ -151,6 +131,8 @@ <script> import DatabaseService from '@/api/database.service' import TableService from '@/api/table.service' +import AuthenticationService from '@/api/authentication.service' +import AuthenticationMapper from '@/api/authentication.mapper' export default { data () { @@ -168,9 +150,6 @@ export default { } }, computed: { - availableLocales () { - return this.$i18n.locales.filter(i => i.code !== this.$i18n.locale) - }, user () { return this.$store.state.user }, @@ -203,9 +182,6 @@ export default { }, logo () { return this.$config.logo - }, - databaseCount () { - return this.$store.state.databaseCount } }, watch: { @@ -217,7 +193,6 @@ export default { '$route.params.database_id': { handler (id, oldId) { if (id !== oldId) { - this.$store.dispatch('reloadDatabaseCount') this.loadDatabase() this.loadAccess() } @@ -237,12 +212,9 @@ export default { }, mounted () { this.initEnvironment() - this.$store.dispatch('reloadDatabaseCount') + this.attemptRefreshToken() this.$store.dispatch('reloadMessages') this.$store.dispatch('reloadOntologies') - if (this.locale) { - this.$i18n.locale = this.locale - } if (this.$route.query && this.$route.query.q) { this.search = this.$route.query.q } @@ -323,6 +295,20 @@ export default { this.$store.commit('SET_SEARCH_PASSWORD', this.$config.searchPassword) this.$store.commit('SET_DOI_URL', this.$config.doiUrl) console.debug('runtime config', this.$config) + if (this.locale) { + this.$i18n.locale = this.locale + } + }, + attemptRefreshToken () { + if (!this.$store.state.token || !this.$store.state.refreshToken) { + return + } + if (AuthenticationMapper.isExpiredToken(this.$store.state.refreshToken)) { + console.error('Refresh token is expired: trigger logout of user') + this.$store.dispatch('logout') + } else { + AuthenticationService.refreshToken() + } } }, head () { diff --git a/dbrepo-ui/pages/database/_database_id/admin.vue b/dbrepo-ui/pages/database/_database_id/admin.vue index 6cd364777737544fd36ae6989a2d8c8a4d47dd9b..2ed10ade81a25c2b34882aa6c8a7ae146e4e5a5e 100644 --- a/dbrepo-ui/pages/database/_database_id/admin.vue +++ b/dbrepo-ui/pages/database/_database_id/admin.vue @@ -1,6 +1,6 @@ <template> <div v-if="db"> - <DBToolbar /> + <DatabaseToolbar /> <v-tabs-items v-model="tab"> <v-card flat> <v-card-title> @@ -37,12 +37,12 @@ </template> <script> -import DBToolbar from '@/components/DBToolbar.vue' +import DatabaseToolbar from '@/components/DatabaseToolbar.vue' import DatabaseService from '@/api/database.service' export default { components: { - DBToolbar + DatabaseToolbar }, data () { return { diff --git a/dbrepo-ui/pages/database/_database_id/info.vue b/dbrepo-ui/pages/database/_database_id/info.vue index 567d7a71fcf8b8b8a5481d4ef006ddcef9f22910..01d351ab8384128938a62e64898659551c6748c3 100644 --- a/dbrepo-ui/pages/database/_database_id/info.vue +++ b/dbrepo-ui/pages/database/_database_id/info.vue @@ -1,40 +1,15 @@ <template> <div v-if="database"> - <DBToolbar /> - <v-progress-linear v-if="loading" /> + <DatabaseToolbar /> <v-tabs-items v-model="tab"> <v-tab-item> - <Summary v-if="showIdentifierCard" :identifier="identifier" /> - <v-card flat tile> - <v-card-title v-if="!showIdentifierCard && (canCreateIdentifier || canDeleteIdentifier)">Identifier</v-card-title> - <v-card-text v-if="canCreateIdentifier || canDeleteIdentifier"> - <v-card-actions> - <v-btn - v-if="canCreateIdentifier" - small - :to="`/database/${$route.params.database_id}/persist`" - color="primary"> - Get Database PID - </v-btn> - <v-btn - v-if="canEditIdentifier" - small - :to="`/database/${$route.params.database_id}/persist`" - color="secondary"> - Edit Database PID - </v-btn> - <v-btn - v-if="canDeleteIdentifier && hasIdentifier" - small - :loading="loadingDelete" - color="error" - @click="deleteDialog = true"> - Delete Database PID - </v-btn> - </v-card-actions> + <Summary v-if="hasIdentifier" :identifier="identifier" /> + <v-card v-if="hasIdentifier" flat tile> + <v-card-text> + <Select :identifiers="identifiers" :identifier="identifier" /> </v-card-text> </v-card> - <v-divider v-if="hasIdentifier || canCreateIdentifier || canDeleteIdentifier" /> + <v-divider v-if="hasIdentifier" /> <v-card flat tile> <v-card-title>Database</v-card-title> <v-card-text> @@ -143,37 +118,29 @@ </v-card> </v-tab-item> </v-tabs-items> - <v-dialog - v-model="deleteDialog" - persistent - max-width="480"> - <DeleteIdentifier :identifier="identifier" @close="closeDeleteDialog" /> - </v-dialog> <v-breadcrumbs :items="items" class="pa-0 mt-2" /> </div> </template> <script> -import DBToolbar from '@/components/DBToolbar.vue' +import DatabaseToolbar from '@/components/DatabaseToolbar' import { formatTimestampUTCLabel } from '@/utils' import DatabaseMapper from '@/api/database.mapper' -import Summary from '@/components/identifier/Summary.vue' -import DeleteIdentifier from '@/components/dialogs/DeleteIdentifier.vue' +import Summary from '@/components/identifier/Summary' +import Select from '@/components/identifier/Select' export default { components: { - DeleteIdentifier, - DBToolbar, - Summary + DatabaseToolbar, + Summary, + Select }, data () { return { loading: false, - loadingDelete: false, loadingStart: false, loadingStop: false, editDialog: false, - deleteDialog: false, items: [ { text: 'Databases', to: '/database', activeClass: '' }, { @@ -200,20 +167,26 @@ export default { } return this.database.identifier.publisher }, - token () { - return this.$store.state.token - }, user () { return this.$store.state.user }, roles () { return this.$store.state.roles }, - identifier () { + identifiers () { if (!this.database) { - return null + return [] } - return this.database.identifier + return this.database.identifiers + }, + identifier () { + if (this.pid) { + const filter = this.identifiers.filter(i => i.id === Number(this.pid)) + if (filter.length > 0) { + return filter[0] + } + } + return this.identifiers[0] }, access () { return this.$store.state.access @@ -222,7 +195,7 @@ export default { return this.$store.state.database }, pid () { - return `${this.baseUrl}/pid/${this.database.identifier.id}` + return this.$route.query.pid }, createdUTC () { return formatTimestampUTCLabel(this.database.created) @@ -242,30 +215,6 @@ export default { image_version () { return this.database.container.image.version }, - showIdentifierCard () { - return this.hasIdentifier - }, - canCreateIdentifier () { - if (!this.roles || this.hasIdentifier) { - return false - } - if (this.roles.includes('create-foreign-identifier')) { - return true - } - return this.roles.includes('create-identifier') && this.isOwner - }, - canEditIdentifier () { - if (!this.roles || !this.hasIdentifier) { - return false - } - return this.roles.includes('modify-identifier-metadata') - }, - canDeleteIdentifier () { - if (!this.user || this.hasDoi) { - return false - } - return this.roles.includes('delete-identifier') - }, contact () { return DatabaseMapper.databaseToContact(this.database) }, @@ -276,16 +225,7 @@ export default { return this.database.creator.email_verified }, hasIdentifier () { - if ('identifier' in this.database && this.database.identifier) { - return 'id' in this.database.identifier - } - return false - }, - hasDoi () { - if (!this.hasIdentifier || !('doi' in this.database.identifier)) { - return false - } - return this.database.identifier.doi !== null + return this.identifiers.length > 0 }, accessDescription () { if (!this.access) { @@ -302,12 +242,6 @@ export default { return { text: null, class: null } } }, - isOwner () { - if (!this.database || !this.user) { - return false - } - return this.database.owner.username === this.user.username - }, jdbcString () { const flags = this.database.container.ui_additional_flags ? this.database.container.ui_additional_flags : '' return `jdbc://${this.database.container.ui_host}:${this.database.container.ui_port}/${this.database.internal_name}${flags} (username=${this.user.username}, password=yourpassword)` @@ -315,14 +249,6 @@ export default { databaseExtraInfo () { return this.$config.databaseExtraInfo } - }, - methods: { - async closeDeleteDialog (event) { - if (event.action === 'deleted') { - await this.$store.dispatch('reloadDatabase') - } - this.deleteDialog = false - } } } </script> @@ -336,10 +262,7 @@ export default { #back-btn::before { opacity: 0; } -.skeleton-small .v-skeleton-loader__text { - width: 100px; -} -.skeleton-large .v-skeleton-loader__text { - width: 400px; +.current-identifier { + background: #1976d2; } </style> diff --git a/dbrepo-ui/pages/database/_database_id/query/_query_id/data.vue b/dbrepo-ui/pages/database/_database_id/query/_query_id/data.vue new file mode 100644 index 0000000000000000000000000000000000000000..0b463191ec0ad304754b340b497b9e655d0d975a --- /dev/null +++ b/dbrepo-ui/pages/database/_database_id/query/_query_id/data.vue @@ -0,0 +1,79 @@ +<template> + <div> + <SubsetToolbar /> + <v-toolbar color="secondary white--text" flat> + <v-toolbar-title> + <strong v-text="executionUTC" /> + </v-toolbar-title> + </v-toolbar> + <v-card tile> + <QueryResults + id="query-results" + ref="queryResults" + v-model="subset.id" + type="query" + class="mt-0 mb-0" /> + </v-card> + <v-breadcrumbs :items="items" class="pa-0 mt-2" /> + </div> +</template> + +<script> +import QueryResults from '@/components/query/Results' +import QueryService from '@/api/query.service' +import { formatTimestampUTCLabel } from '@/utils' + +export default { + components: { + QueryResults + }, + data () { + return { + loadingSubset: false, + items: [ + { text: 'Databases', to: '/database', activeClass: '' }, + { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}`, activeClass: '' }, + { text: 'Subsets', to: `/database/${this.$route.params.database_id}/query`, activeClass: '' }, + { text: `${this.$route.params.query_id}`, to: `/database/${this.$route.params.database_id}/query/${this.$route.params.query_id}`, activeClass: '' }, + { text: 'Data', to: `/database/${this.$route.params.database_id}/query/${this.$route.params.query_id}/data`, activeClass: '' } + ], + subset: { + id: this.$route.params.query_id + } + } + }, + computed: { + database () { + return this.$store.state.database + }, + executionUTC () { + if (!this.subset) { + return null + } + return formatTimestampUTCLabel(this.subset.created) + } + }, + mounted () { + this.loadSubset() + }, + methods: { + loadSubset () { + this.loadingSubset = true + QueryService.findOne(this.$route.params.database_id, this.$route.params.query_id) + .then((subset) => { + this.subset = subset + this.loadResult() + }) + .finally(() => { + this.loadingSubset = false + }) + }, + loadResult () { + this.$refs.queryResults.reExecute(this.subset.id) + this.$refs.queryResults.reExecuteCount(this.subset.id) + } + } +} +</script> +<style> +</style> diff --git a/dbrepo-ui/pages/database/_database_id/query/_query_id/index.vue b/dbrepo-ui/pages/database/_database_id/query/_query_id/index.vue index c54091e5f5ec1d283834f305d260d31b0c63474c..74e2586f19b6318b39f05393ea338dfb9592562a 100644 --- a/dbrepo-ui/pages/database/_database_id/query/_query_id/index.vue +++ b/dbrepo-ui/pages/database/_database_id/query/_query_id/index.vue @@ -1,418 +1,13 @@ <template> - <div> - <v-toolbar flat> - <v-toolbar-title> - <v-btn id="back-btn" class="mr-2" :to="backTo"> - <v-icon left>mdi-arrow-left</v-icon> - </v-btn> - </v-toolbar-title> - <v-toolbar-title v-if="title" v-text="title" /> - <v-spacer /> - <v-toolbar-title> - <v-btn v-if="canPersistQuery" :loading="loadingSave" class="mb-1" @click.stop="save"> - <v-icon left>mdi-content-save-outline</v-icon> Save - </v-btn> - <v-btn v-if="query.is_persisted && !query.identifier && canWrite" class="mb-1 ml-2" color="primary" :disabled="!executionUTC" :to="`/database/${$route.params.database_id}/query/${$route.params.query_id}/persist`"> - <v-icon left>mdi-content-save-outline</v-icon> Get PID - </v-btn> - <v-btn v-if="result_visibility && query.result_number" class="mb-1 ml-2" :loading="downloadLoading" @click.stop="downloadSubset"> - <v-icon left>mdi-download</v-icon> Data .csv - </v-btn> - <DownloadButton v-if="query.identifier" :pid="query.identifier.id" class="mb-1 ml-2"> - <v-icon left>mdi-code-tags</v-icon> Identifier .xml - </DownloadButton> - </v-toolbar-title> - </v-toolbar> - <Summary v-if="showIdentifierCard" :identifier="identifier" /> - <v-divider v-if="query && query.identifier" /> - <v-card flat tile> - <v-card-title> - Subset Information - </v-card-title> - <v-card-text> - <v-alert - v-if="canPersistQuery" - border="left" - color="info"> - Query is not yet saved in the query store, <a @click="save">save</a> it to view it later. - </v-alert> - <v-alert - v-if="isAuthorizationError" - border="left" - color="error"> - You do not have permission to view this subset. - </v-alert> - <v-list dense> - <v-list-item> - <v-list-item-icon> - <v-icon v-if="!database">mdi-database-outline</v-icon> - <v-icon v-if="database" :color="database.is_public ? 'success' : 'error'">mdi-database-outline</v-icon> - </v-list-item-icon> - <v-list-item-content> - <v-list-item-title> - Database Visibility - </v-list-item-title> - <v-list-item-content> - <v-skeleton-loader v-if="!database" type="text" class="skeleton-small" /> - <span v-if="database">{{ database.is_public ? 'Public' : 'Private' }}</span> - </v-list-item-content> - <v-list-item-title class="mt-2"> - Database Name - </v-list-item-title> - <v-list-item-content> - <v-skeleton-loader v-if="!database" type="text" class="skeleton-small" /> - <span v-if="database">{{ database.name }}</span> - </v-list-item-content> - <div v-if="database && database.identifier && database.identifier.license"> - <v-list-item-title class="mt-2"> - Database License - </v-list-item-title> - <v-list-item-content> - <a :href="database.identifier.license.uri">{{ database.identifier.license.identifier }}</a> - </v-list-item-content> - </div> - </v-list-item-content> - </v-list-item> - <v-list-item> - <v-list-item-icon> - <v-icon>mdi-text-short</v-icon> - </v-list-item-icon> - <v-list-item-content> - <v-list-item-title> - Query Statement - </v-list-item-title> - <v-list-item-content> - <v-skeleton-loader v-if="!query" type="text, text" /> - <pre v-if="query">{{ query.query }}</pre> - </v-list-item-content> - <v-list-item-title class="mt-2"> - Subset Hash - </v-list-item-title> - <v-list-item-content> - <v-skeleton-loader v-if="!query" type="text" class="skeleton-large" /> - <pre v-if="query">sha256:{{ query.query_hash }}</pre> - </v-list-item-content> - <v-list-item-title class="mt-2"> - Subset Creation - </v-list-item-title> - <v-list-item-content> - <v-skeleton-loader v-if="!executionUTC" type="text" class="skeleton-small" /> - <span v-if="executionUTC">{{ executionUTC }}</span> - </v-list-item-content> - </v-list-item-content> - </v-list-item> - <v-list-item> - <v-list-item-icon> - <v-icon v-if="!query">mdi-table</v-icon> - <v-icon v-if="database && !query.identifier" :color="database.is_public ? 'success' : 'error'">mdi-table</v-icon> - <v-icon v-if="query && query.identifier" :color="query.identifier.visibility === 'everyone' ? 'success' : 'error'">mdi-table</v-icon> - </v-list-item-icon> - <v-list-item-content> - <v-list-item-title> - Result Visibility - </v-list-item-title> - <v-list-item-content> - <v-skeleton-loader v-if="!query" type="text" class="skeleton-xsmall" /> - <span v-if="database && !query.identifier">{{ database.is_public ? 'Public' : 'Private' }}</span> - <span v-if="query && query.identifier">{{ query.identifier.visibility === 'everyone' ? 'Public' : 'Private' }}</span> - </v-list-item-content> - <v-list-item-title class="mt-2"> - Result Hash - </v-list-item-title> - <v-list-item-content> - <v-skeleton-loader v-if="!query" type="text" class="skeleton-large" /> - <pre v-if="query">{{ result_hash }}</pre> - </v-list-item-content> - <v-list-item-title class="mt-2"> - Result Number - </v-list-item-title> - <v-list-item-content> - <v-skeleton-loader v-if="!query" type="text" class="skeleton-xsmall" /> - <span v-if="query">{{ query.result_number }}</span> - </v-list-item-content> - </v-list-item-content> - </v-list-item> - </v-list> - </v-card-text> - </v-card> - <v-divider /> - <QueryResults - id="query-results" - ref="queryResults" - v-model="query.id" - type="query" - class="mt-0 mb-0" /> - <v-breadcrumbs :items="items" class="pa-0 mt-2" /> - </div> + <div /> </template> -<script> -import Summary from '@/components/identifier/Summary.vue' -import DownloadButton from '@/components/identifier/DownloadButton.vue' -import { formatTimestampUTCLabel, formatDateUTC } from '@/utils' -import QueryService from '@/api/query.service' -import UserUtils from '@/api/user.utils' +<script> export default { - name: 'QueryShow', - components: { - DownloadButton, - Summary - }, - data () { - return { - items: [ - { text: 'Databases', to: '/database', activeClass: '' }, - { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}`, activeClass: '' }, - { text: 'Queries', to: `/database/${this.$route.params.database_id}/query`, activeClass: '' }, - { text: `${this.$route.params.query_id}`, to: `/database/${this.$route.params.database_id}/query/${this.$route.params.query_id}`, activeClass: '' } - ], - query: { - id: parseInt(this.$route.params.query_id), - database_id: null, - query: null, - query_hash: null, - result_hash: null, - result_number: null, - execution: null, - created: null, - is_persisted: null, - identifier: null, - creator: { - username: null, - firstname: null, - lastname: null - } - }, - loadingSave: false, - persistQueryExists: false, - persistQueryDialog: false, - loadingDatabase: false, - loadingIdentifier: false, - loadingQuery: true, - downloadLoading: false, - isAuthorizationError: false, - error: false, - promises: [] - } - }, - computed: { - baseUrl () { - return `${location.protocol}//${location.host}` - }, - showIdentifierCard () { - if (this.hasIdentifier) { - return true - } - if (!this.user) { - return false - } - return this.canCreateIdentifier || this.hasIdentifier - }, - loadingColor () { - return this.error ? 'error' : 'primary' - }, - pid () { - if (this.query.identifier) { - return this.query.identifier.id - } - return 0 - }, - token () { - return this.$store.state.token - }, - database () { - return this.$store.state.database - }, - access () { - return this.$store.state.access - }, - user () { - return this.$store.state.user - }, - identifier () { - if (!this.query) { - return null - } - return this.query.identifier - }, - hasIdentifier () { - return this.query.identifier !== null - }, - title () { - if (!this.hasIdentifier) { - return null - } - const enTitle = this.query.identifier.titles.filter(t => t.language).filter(t => t.language === 'en') - if (enTitle.length !== 1) { - return this.query.identifier.titles[0].title - } - return enTitle[0].title - }, - result_hash () { - if (!this.query.result_hash) { - return '(none)' - } - return this.query.result_hash - }, - canCreateIdentifier () { - if (!this.roles || this.hasIdentifier) { - return false - } - if (this.roles.includes('create-foreign-identifier')) { - return true - } - return this.roles.includes('create-identifier') && this.isOwner - }, - canPersistQuery () { - if (this.loadingQuery || !this.query || this.query.is_persisted) { - return false - } - return UserUtils.hasReadAccess(this.access) - }, - publisher () { - if (this.database.publisher === null) { - return 'NA' - } - return this.database.publisher - }, - isOwner () { - if (!this.query || !this.user) { - return false - } - return this.query.creator.username === this.user.username - }, - backTo () { - return `/database/${this.$route.params.database_id}/query` - }, - result_visibility () { - if (!this.database || this.database.is_public === null) { - return false - } - if (this.database.is_public) { - return true - } - if (this.query.creator.username === this.username) { - return true - } - if (!this.query.identifier) { - return false - } - return this.query.identifier.visibility === 'everyone' - }, - canWrite () { - if (!this.access || !this.access.type) { - return false - } - return this.access.type === 'write_own' || this.access.type === 'write_all' - }, - publication () { - if (this.query.identifier.publication_year && !this.query.identifier.publication_month && !this.query.identifier.publication_day) { - return this.query.identifier.publication_year - } else if (this.query.identifier.publication_year && this.query.identifier.publication_month && this.query.identifier.publication_day) { - return formatDateUTC(this.query.identifier.publication_year + '-' + this.query.identifier.publication_month + '-' + this.query.identifier.publication_day) - } else { - return null - } - }, - executionUTC () { - return formatTimestampUTCLabel(this.query.created) - } - }, mounted () { - this.loadQuery() - .then(() => this.loadResult()) - }, - methods: { - loadResult () { - this.$refs.queryResults.reExecute(this.query.id) - this.$refs.queryResults.reExecuteCount(this.query.id) - }, - downloadSubset () { - this.downloadLoading = true - QueryService.exportSubset(this.$route.params.database_id, this.$route.params.query_id) - .then((data) => { - const url = window.URL.createObjectURL(new Blob([data])) - const link = document.createElement('a') - link.href = url - link.setAttribute('download', 'subset.csv') - document.body.appendChild(link) - link.click() - }) - .finally(() => { - this.downloadLoading = false - }) - }, - loadQuery () { - this.loadingQuery = true - return new Promise((resolve, reject) => { - QueryService.findOne(this.$route.params.database_id, this.$route.params.query_id) - .then((query) => { - this.query = query - resolve(query) - }) - .catch((error) => { - if (error.response.status === 405) { - this.isAuthorizationError = true - } - reject(error) - }) - .finally(() => { - this.loadingQuery = false - }) - }) - }, - save () { - this.loadingSave = true - QueryService.persist(this.$route.params.database_id, this.$route.params.query_id) - .then((query) => { - this.query = query - }) - .finally(() => { - this.loadingSave = false - }) - }, - openDialog () { - this.persistQueryDialog = true - }, - closeDialog (event) { - this.persistQueryDialog = false - if (event.action === 'persisted') { - this.loadQuery() - } - } + this.$router.push(`/database/${this.$route.params.database_id}/query/${this.$route.params.query_id}/info`) } } </script> - <style> -pre { - white-space: break-spaces; -} -.v-card__text { - font-size: initial; -} -.skeleton-large > div { - width: 400px !important; -} -.skeleton-medium > div { - width: 200px !important; -} -.skeleton-small > div { - width: 100px !important; -} -.skeleton-xsmall > div { - width: 50px !important; -} -.v-data-table { - border-radius: 0; -} -#back-btn { - min-width: auto; - padding: 0 0 0 12px; - background: none !important; - box-shadow: none; -} -#back-btn::before { - opacity: 0; -} </style> diff --git a/dbrepo-ui/pages/database/_database_id/query/_query_id/info.vue b/dbrepo-ui/pages/database/_database_id/query/_query_id/info.vue new file mode 100644 index 0000000000000000000000000000000000000000..132373a67ab7231b4889163956b3f9957d323d73 --- /dev/null +++ b/dbrepo-ui/pages/database/_database_id/query/_query_id/info.vue @@ -0,0 +1,230 @@ +<template> + <div> + <SubsetToolbar /> + <v-card flat tile> + <Summary v-if="hasIdentifier" :identifier="identifier" /> + <v-card-text v-if="hasIdentifier"> + <Select :identifiers="identifiers" :identifier="identifier" /> + </v-card-text> + </v-card> + <v-divider v-if="subset && identifier" /> + <v-card flat tile> + <v-card-title>Subset</v-card-title> + <v-card-text> + <v-list dense> + <v-list-item> + <v-list-item-content> + <v-list-item-title> + Subset Query + </v-list-item-title> + <v-list-item-content> + <pre>{{ subset.query }}</pre> + </v-list-item-content> + <v-list-item-title class="mt-2"> + Subset Query Hash + </v-list-item-title> + <v-list-item-content> + <pre>sha256:{{ subset.query_hash }}</pre> + </v-list-item-content> + <v-list-item-title class="mt-2"> + Subset Creation + </v-list-item-title> + <v-list-item-content> + <span v-if="executionUTC">{{ executionUTC }}</span> + </v-list-item-content> + <v-list-item-title> + Subset Visibility + </v-list-item-title> + <v-list-item-content> + {{ database.is_public ? 'Public' : 'Private' }} + </v-list-item-content> + <v-list-item-title class="mt-2"> + Subset Hash + </v-list-item-title> + <v-list-item-content> + <pre v-if="subset">{{ result_hash }}</pre> + </v-list-item-content> + <v-list-item-title class="mt-2"> + Subset Count + </v-list-item-title> + <v-list-item-content> + <span v-if="subset">{{ subset.result_number }}</span> + </v-list-item-content> + </v-list-item-content> + </v-list-item> + </v-list> + </v-card-text> + <v-divider /> + <v-card-title>Database</v-card-title> + <v-card-text> + <v-list dense> + <v-list-item> + <v-list-item-content> + <v-list-item-title> + Database Visibility + </v-list-item-title> + <v-list-item-content> + <v-skeleton-loader v-if="!database" type="text" class="skeleton-small" /> + <span v-if="database">{{ database.is_public ? 'Public' : 'Private' }}</span> + </v-list-item-content> + <v-list-item-title class="mt-2"> + Database Name + </v-list-item-title> + <v-list-item-content> + <v-skeleton-loader v-if="!database" type="text" class="skeleton-small" /> + <span v-if="database">{{ database.name }}</span> + </v-list-item-content> + </v-list-item-content> + </v-list-item> + </v-list> + </v-card-text> + </v-card> + <v-breadcrumbs :items="items" class="pa-0 mt-2" /> + </div> +</template> +<script> +import Summary from '@/components/identifier/Summary' +import SubsetToolbar from '@/components/SubsetToolbar' +import QueryService from '@/api/query.service' +import Select from '@/components/identifier/Select' +import { formatTimestampUTCLabel } from '@/utils' + +export default { + name: 'QueryShow', + components: { + Select, + Summary, + SubsetToolbar + }, + data () { + return { + items: [ + { text: 'Databases', to: '/database', activeClass: '' }, + { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}`, activeClass: '' }, + { text: 'Subsets', to: `/database/${this.$route.params.database_id}/query`, activeClass: '' }, + { text: `${this.$route.params.query_id}`, to: `/database/${this.$route.params.database_id}/query/${this.$route.params.query_id}`, activeClass: '' } + ], + persistQueryExists: false, + persistQueryDialog: false, + loadingDatabase: false, + loadingIdentifier: false, + loadingSubset: true, + downloadLoading: false, + error: false, + promises: [], + subset: { + query: null, + query_hash: null + } + } + }, + computed: { + pid () { + return this.$route.query.pid + }, + database () { + return this.$store.state.database + }, + access () { + return this.$store.state.access + }, + user () { + return this.$store.state.user + }, + identifiers () { + if (!this.database || !this.database.subsets || this.database.subsets.length === 0) { + return [] + } + return this.database.subsets + }, + hasIdentifier () { + return this.identifiers.length > 0 + }, + identifier () { + if (this.pid) { + const filter = this.identifiers.filter(i => i.id === Number(this.pid)) + if (filter.length > 0) { + return filter[0] + } + } + return this.identifiers[0] + }, + title () { + if (!this.hasIdentifier) { + return null + } + const enTitle = this.identifier.titles.filter(t => t.language).filter(t => t.language === 'en') + if (enTitle.length !== 1) { + return this.identifier.titles[0].title + } + return enTitle[0].title + }, + result_hash () { + if (!this.subset.result_hash) { + return '(none)' + } + return `sha256:${this.subset.result_hash}` + }, + publisher () { + if (this.database.publisher === null) { + return 'NA' + } + return this.database.publisher + }, + executionUTC () { + if (!this.subset) { + return null + } + return formatTimestampUTCLabel(this.subset.created) + } + }, + mounted () { + this.loadSubset() + }, + methods: { + loadSubset () { + this.loadingSubset = true + QueryService.findOne(this.$route.params.database_id, this.$route.params.query_id) + .then((subset) => { + this.subset = subset + }) + .finally(() => { + this.loadingSubset = false + }) + } + } +} +</script> + +<style> +pre { + white-space: break-spaces; +} +.v-card__text { + font-size: initial; +} +.skeleton-large > div { + width: 400px !important; +} +.skeleton-medium > div { + width: 200px !important; +} +.skeleton-small > div { + width: 100px !important; +} +.skeleton-xsmall > div { + width: 50px !important; +} +.v-data-table { + border-radius: 0; +} +#back-btn { + min-width: auto; + padding: 0 0 0 12px; + background: none !important; + box-shadow: none; +} +#back-btn::before { + opacity: 0; +} +</style> diff --git a/dbrepo-ui/pages/database/_database_id/query/_query_id/persist.vue b/dbrepo-ui/pages/database/_database_id/query/_query_id/persist.vue index 58679ef9d42b74c2eb5fd120ba2cb422d2bafc33..94cf773aee869811737cb740b30c5cf870fa924f 100644 --- a/dbrepo-ui/pages/database/_database_id/query/_query_id/persist.vue +++ b/dbrepo-ui/pages/database/_database_id/query/_query_id/persist.vue @@ -46,14 +46,8 @@ export default { access () { return this.$store.state.access }, - hasIdentifier () { - if ('identifier' in this.query && this.query.identifier) { - return 'id' in this.query.identifier - } - return false - }, canPersistQuery () { - if (this.loadingQuery || !this.query || this.hasIdentifier) { + if (this.loadingQuery || !this.query) { return false } return UserUtils.hasReadAccess(this.access) diff --git a/dbrepo-ui/pages/database/_database_id/query/index.vue b/dbrepo-ui/pages/database/_database_id/query/index.vue index 8b2f7103ad08fa27fe9ed8b7f4c87c0d78a01310..936eecf58b973c8e5476bc2ce772459cf234614b 100644 --- a/dbrepo-ui/pages/database/_database_id/query/index.vue +++ b/dbrepo-ui/pages/database/_database_id/query/index.vue @@ -1,14 +1,17 @@ <template> <div> - <DBToolbar v-model="db" /> + <DatabaseToolbar v-model="db" /> <QueryList /> <v-breadcrumbs :items="items" class="pa-0 mt-2" /> </div> </template> <script> - +import QueryList from '@/components/QueryList.vue' export default { + components: { + QueryList + }, data () { return { items: [ diff --git a/dbrepo-ui/pages/database/_database_id/settings.vue b/dbrepo-ui/pages/database/_database_id/settings.vue index 2036999ada9cfa3b7b2a4cbcd84e3745872f14b9..fe5eacc7c6bcc8b290fbd662b6a965bd9be9e7e9 100644 --- a/dbrepo-ui/pages/database/_database_id/settings.vue +++ b/dbrepo-ui/pages/database/_database_id/settings.vue @@ -1,6 +1,6 @@ <template> <div v-if="user"> - <DBToolbar ref="toolbar" /> + <DatabaseToolbar ref="toolbar" /> <v-progress-linear v-if="loading" /> <v-tabs-items v-model="tab"> <v-tab-item> @@ -90,27 +90,27 @@ <v-dialog v-model="editAccessDialog" max-width="640"> - <EditAccess :username="username" :access-type="accessType" @close-dialog="closeDialog" /> + <EditAccess :user-id="userId" :access-type="accessType" @close-dialog="closeDialog" /> </v-dialog> </div> </template> <script> -import DBToolbar from '@/components/DBToolbar.vue' +import DatabaseToolbar from '@/components/DatabaseToolbar.vue' import EditAccess from '@/components/dialogs/EditAccess.vue' import DatabaseService from '@/api/database.service' import UserService from '@/api/user.service' export default { components: { - DBToolbar, + DatabaseToolbar, EditAccess }, data () { return { dialogDelete: false, confirm: null, - username: null, + userId: null, accessType: null, users: [], loading: false, @@ -263,12 +263,12 @@ export default { }) }, giveAccess () { - this.username = null + this.userId = null this.accessType = null this.editAccessDialog = true }, modifyAccess (item) { - this.username = item.user.username + this.userId = item.user.id this.accessType = item.type this.editAccessDialog = true }, diff --git a/dbrepo-ui/pages/database/_database_id/table/_table_id/data.vue b/dbrepo-ui/pages/database/_database_id/table/_table_id/data.vue index dde1904cff391ee032c9e67868531cdd74c4627d..7c58f75a0c02080adfadf06fc6047bff89f58a3e 100644 --- a/dbrepo-ui/pages/database/_database_id/table/_table_id/data.vue +++ b/dbrepo-ui/pages/database/_database_id/table/_table_id/data.vue @@ -3,7 +3,7 @@ <TableToolbar :selection="selection" @modified="modified" /> <v-toolbar :color="versionColor" flat> <v-toolbar-title> - <strong>Versioning</strong> + <strong>Current</strong> <span v-if="version !== null">{{ versionFormatted }}</span> </v-toolbar-title> <v-spacer /> @@ -31,6 +31,7 @@ </v-card> <v-data-table v-if="!error" + flat :headers="headers" :items="rows" :options.sync="options" diff --git a/dbrepo-ui/pages/database/_database_id/table/_table_id/info.vue b/dbrepo-ui/pages/database/_database_id/table/_table_id/info.vue index 4f71b2c489e5545f49d03a82ca3c5776cdd27f41..659acbd9cc33485868804c3c86e97ab56f7e8f33 100644 --- a/dbrepo-ui/pages/database/_database_id/table/_table_id/info.vue +++ b/dbrepo-ui/pages/database/_database_id/table/_table_id/info.vue @@ -2,12 +2,17 @@ <div> <TableToolbar :selection="selection" /> <v-card flat tile> + <Summary v-if="hasIdentifier" :identifier="identifier" /> + <v-card-text v-if="hasIdentifier"> + <Select :identifiers="identifiers" :identifier="identifier" /> + </v-card-text> + </v-card> + <v-divider v-if="table && identifier" /> + <v-card flat tile> + <v-card-title>Table</v-card-title> <v-card-text> <v-list dense> <v-list-item> - <v-list-item-icon> - <v-icon>mdi-table</v-icon> - </v-list-item-icon> <v-list-item-content> <v-list-item-title> Table ID @@ -44,10 +49,13 @@ </v-list-item-content> </v-list-item-content> </v-list-item> - <v-list-item v-if="canWrite && canWriteQueues"> - <v-list-item-icon> - <v-icon>mdi-rabbit</v-icon> - </v-list-item-icon> + </v-list> + </v-card-text> + <v-divider v-if="canWrite && canWriteQueues" /> + <v-card-title v-if="canWrite && canWriteQueues">Broker</v-card-title> + <v-card-text v-if="canWrite && canWriteQueues"> + <v-list dense> + <v-list-item> <v-list-item-content> <v-list-item-title> Protocol @@ -97,12 +105,16 @@ </div> </template> <script> -import TableToolbar from '@/components/TableToolbar.vue' -import { formatTimestampUTCLabel } from '@/utils' +import TableToolbar from '@/components/TableToolbar' import UserMapper from '@/api/user.mapper' +import Select from '@/components/identifier/Select' +import Summary from '@/components/identifier/Summary' +import { formatTimestampUTCLabel } from '@/utils' export default { components: { + Summary, + Select, TableToolbar }, data () { @@ -125,6 +137,9 @@ export default { } }, computed: { + pid () { + return this.$route.query.pid + }, user () { return this.$store.state.user }, @@ -170,23 +185,23 @@ export default { } return this.roles.includes('insert-table-data') }, - versionColor () { - if (this.version === null) { - return 'secondary white--text' + identifiers () { + if (!this.table.identifiers || this.table.identifiers.length === 0) { + return [] } - return 'primary white--text' + return this.table.identifiers }, - versionFormatted () { - if (this.version === null) { - return null + identifier () { + if (this.pid) { + const filter = this.identifiers.filter(i => i.id === Number(this.pid)) + if (filter.length > 0) { + return filter[0] + } } - return this.version + ' (UTC)' + return this.identifiers[0] }, - versionISO () { - if (this.version === null) { - return null - } - return this.version.substring(0, 10) + 'T' + this.version.substring(11, 19) + 'Z' + hasIdentifier () { + return this.identifiers.length > 0 }, brokerExtraInfo () { return this.$config.brokerExtraInfo diff --git a/dbrepo-ui/pages/database/_database_id/table/_table_id/persist.vue b/dbrepo-ui/pages/database/_database_id/table/_table_id/persist.vue new file mode 100644 index 0000000000000000000000000000000000000000..643c48b5fbe4e89e6f17340f2cbd7befff4fc500 --- /dev/null +++ b/dbrepo-ui/pages/database/_database_id/table/_table_id/persist.vue @@ -0,0 +1,60 @@ +<template> + <div v-if="canPersistTable"> + <Persist type="table" :database="database" :table="table" /> + <v-breadcrumbs :items="items" class="pa-0 mt-2" /> + </div> +</template> + +<script> +import Persist from '@/components/identifier/Persist' +import UserUtils from '@/api/user.utils' + +export default { + components: { + Persist + }, + data () { + return { + loading: false, + query: null, + isAuthorizationError: false, + items: [ + { text: 'Databases', to: '/database', activeClass: '' }, + { + text: `${this.$route.params.database_id}`, + to: `/database/${this.$route.params.database_id}/info`, + activeClass: '' + }, + { text: 'Tables', to: `/database/${this.$route.params.database_id}/table`, activeClass: '' }, + { + text: `${this.$route.params.table_id}`, + to: `/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}`, + activeClass: '' + } + ] + } + }, + computed: { + roles () { + return this.$store.state.roles + }, + database () { + return this.$store.state.database + }, + access () { + return this.$store.state.access + }, + table () { + return this.$store.state.table + }, + canPersistTable () { + if (!this.table) { + return false + } + return UserUtils.hasReadAccess(this.access) + } + } +} +</script> +<style> +</style> diff --git a/dbrepo-ui/pages/database/_database_id/table/_table_id/schema.vue b/dbrepo-ui/pages/database/_database_id/table/_table_id/schema.vue index b06086e74e066689c9599737ba360308a5d7456a..b43f06dd231cf7abfe4875a6b8c2585d56e7b224 100644 --- a/dbrepo-ui/pages/database/_database_id/table/_table_id/schema.vue +++ b/dbrepo-ui/pages/database/_database_id/table/_table_id/schema.vue @@ -1,62 +1,69 @@ <template> <div> <TableToolbar :selection="selection" /> - <v-data-table - v-if="table" - class="full-width" - disable-sort - hide-default-footer - :items-per-page="-1" - :headers="headers" - :items="table.columns"> - <template v-slot:item.is_null_allowed="{ item }"> - <span v-if="item.is_null_allowed">●</span> {{ item.is_null_allowed }} - </template> - <template v-slot:item.unique="{ item }"> - <span v-if="isUnique(item)">●</span> {{ isUnique(item) }} - </template> - <template v-slot:item.extra="{ item }"> - <pre>{{ extra(item) }}</pre> - </template> - <template v-slot:item.is_primary_key="{ item }"> - <span v-if="item.is_primary_key">●</span> {{ item.is_primary_key }} - </template> - <template v-slot:item.auto_generated="{ item }"> - <span v-if="item.auto_generated">●</span> {{ item.auto_generated }} - </template> - <template v-slot:item.column_concept="{ item }"> - <v-btn v-if="canAssignSemanticInformation && !hasConcept(item)" small @click="pick(item, 'concept')">Assign</v-btn> - <v-btn - v-if="canAssignSemanticInformation && hasConcept(item)" - :title="item.concept.uri" - color="secondary" - small - @click="pick(item, 'concept')"> - <span v-if="item.concept.name" v-text="item.concept.name" /> - <span v-else v-text="item.concept.uri" /> - </v-btn> - <a v-if="!canAssignSemanticInformation && hasConcept(item)" :href="item.concept.uri" target="_blank"> - <span v-if="item.concept.name" v-text="item.concept.name" /> - <span v-else v-text="item.concept.uri" /> - </a> - </template> - <template v-slot:item.column_unit="{ item }"> - <v-btn v-if="canAssignSemanticInformation && !hasUnit(item)" small @click="pick(item, 'unit')">Assign</v-btn> - <v-btn - v-if="canAssignSemanticInformation && hasUnit(item)" - :title="item.unit.uri" - color="secondary" - small - @click="pick(item, 'unit')"> - <span v-if="item.unit.name" v-text="item.unit.name" /> - <span v-else v-text="item.unit.uri" /> - </v-btn> - <a v-if="!canAssignSemanticInformation && hasUnit(item)" :href="item.unit.uri" target="_blank"> - <span v-if="item.unit.name" v-text="item.unit.name" /> - <span v-else v-text="item.unit.uri" /> - </a> - </template> - </v-data-table> + <v-toolbar color="secondary white--text" flat> + <strong> + <v-toolbar-title v-text="title" /> + </strong> + </v-toolbar> + <v-card tile> + <v-data-table + v-if="table" + class="full-width" + disable-sort + hide-default-footer + :items-per-page="-1" + :headers="headers" + :items="table.columns"> + <template v-slot:item.is_null_allowed="{ item }"> + <span v-if="item.is_null_allowed">●</span> {{ item.is_null_allowed }} + </template> + <template v-slot:item.unique="{ item }"> + <span v-if="isUnique(item)">●</span> {{ isUnique(item) }} + </template> + <template v-slot:item.extra="{ item }"> + <pre>{{ extra(item) }}</pre> + </template> + <template v-slot:item.is_primary_key="{ item }"> + <span v-if="item.is_primary_key">●</span> {{ item.is_primary_key }} + </template> + <template v-slot:item.auto_generated="{ item }"> + <span v-if="item.auto_generated">●</span> {{ item.auto_generated }} + </template> + <template v-slot:item.column_concept="{ item }"> + <v-btn v-if="canAssignSemanticInformation && !hasConcept(item)" small @click="pick(item, 'concept')">Assign</v-btn> + <v-btn + v-if="canAssignSemanticInformation && hasConcept(item)" + :title="item.concept.uri" + color="secondary" + small + @click="pick(item, 'concept')"> + <span v-if="item.concept.name" v-text="item.concept.name" /> + <span v-else v-text="item.concept.uri" /> + </v-btn> + <a v-if="!canAssignSemanticInformation && hasConcept(item)" :href="item.concept.uri" target="_blank"> + <span v-if="item.concept.name" v-text="item.concept.name" /> + <span v-else v-text="item.concept.uri" /> + </a> + </template> + <template v-slot:item.column_unit="{ item }"> + <v-btn v-if="canAssignSemanticInformation && !hasUnit(item)" small @click="pick(item, 'unit')">Assign</v-btn> + <v-btn + v-if="canAssignSemanticInformation && hasUnit(item)" + :title="item.unit.uri" + color="secondary" + small + @click="pick(item, 'unit')"> + <span v-if="item.unit.name" v-text="item.unit.name" /> + <span v-else v-text="item.unit.uri" /> + </v-btn> + <a v-if="!canAssignSemanticInformation && hasUnit(item)" :href="item.unit.uri" target="_blank"> + <span v-if="item.unit.name" v-text="item.unit.name" /> + <span v-else v-text="item.unit.uri" /> + </a> + </template> + </v-data-table> + </v-card> <v-dialog v-if="table && database" v-model="dialogSemantic" @@ -122,6 +129,12 @@ export default { roles () { return this.$store.state.roles }, + title () { + if (!this.table) { + return null + } + return this.table.constraints.checks.length > 0 ? `Constraints: ${this.table.constraints.checks}` : 'Schema' + }, canAssignSemanticInformation () { if (!this.user) { return false diff --git a/dbrepo-ui/pages/database/_database_id/table/index.vue b/dbrepo-ui/pages/database/_database_id/table/index.vue index eefef940365e7ab8793d9964716d968de8676633..0aca945e2f8d7047d866a3fae5f6b87d45d80b9d 100644 --- a/dbrepo-ui/pages/database/_database_id/table/index.vue +++ b/dbrepo-ui/pages/database/_database_id/table/index.vue @@ -1,6 +1,6 @@ <template> <div> - <DBToolbar /> + <DatabaseToolbar /> <v-tabs-items v-model="tab"> <TableList /> </v-tabs-items> @@ -9,13 +9,13 @@ </template> <script> import TableList from '@/components/TableList.vue' -import DBToolbar from '@/components/DBToolbar.vue' +import DatabaseToolbar from '@/components/DatabaseToolbar.vue' export default { name: 'Tables', components: { TableList, - DBToolbar + DatabaseToolbar }, data () { return { diff --git a/dbrepo-ui/pages/database/_database_id/view/_view_id/data.vue b/dbrepo-ui/pages/database/_database_id/view/_view_id/data.vue new file mode 100644 index 0000000000000000000000000000000000000000..0995a8c03da60787cf3464e05762d4fabd40b214 --- /dev/null +++ b/dbrepo-ui/pages/database/_database_id/view/_view_id/data.vue @@ -0,0 +1,59 @@ +<template> + <div v-if="view"> + <ViewToolbar /> + <v-toolbar color="secondary white--text" flat> + <v-toolbar-title> + <strong>Current</strong> + </v-toolbar-title> + </v-toolbar> + <v-card tile> + <QueryResults + id="query-results" + ref="queryResults" + type="view" + :view="view" + class="mt-0 mb-0" /> + </v-card> + <v-breadcrumbs :items="items" class="pa-0 mt-2" /> + </div> +</template> + +<script> +import QueryResults from '@/components/query/Results.vue' +export default { + components: { + QueryResults + }, + data () { + return { + items: [ + { text: 'Databases', to: '/database', activeClass: '' }, + { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}`, activeClass: '' }, + { text: 'Views', to: `/database/${this.$route.params.database_id}/view`, activeClass: '' }, + { text: `${this.$route.params.view_id}`, to: `/database/${this.$route.params.database_id}/view/${this.$route.params.view_id}`, activeClass: '' }, + { text: 'Data', to: `/database/${this.$route.params.database_id}/view/${this.$route.params.view_id}/data`, activeClass: '' } + ] + } + }, + computed: { + database () { + return this.$store.state.database + }, + view () { + if (!this.database) { + return null + } + return this.database.views.filter(v => v.id === Number(this.$route.params.view_id))[0] + } + }, + mounted () { + if (!this.view) { + return + } + this.$refs.queryResults.reExecute(this.view.id) + this.$refs.queryResults.reExecuteCount(this.view.id) + } +} +</script> +<style> +</style> diff --git a/dbrepo-ui/pages/database/_database_id/view/_view_id/index.vue b/dbrepo-ui/pages/database/_database_id/view/_view_id/index.vue index 8e2638a0e39395a0542ba3260b7d074af1047c99..bd5cdff80e9f90264779dbf2f76a98e26b023602 100644 --- a/dbrepo-ui/pages/database/_database_id/view/_view_id/index.vue +++ b/dbrepo-ui/pages/database/_database_id/view/_view_id/index.vue @@ -1,296 +1,13 @@ <template> - <div> - <v-toolbar flat> - <v-toolbar-title> - <v-btn id="back-btn" class="mr-2" :to="`/database/${$route.params.database_id}/view`"> - <v-icon left>mdi-arrow-left</v-icon> - </v-btn> - </v-toolbar-title> - <v-toolbar-title> - <span v-if="cachedView.name">{{ cachedView.name }}</span> - </v-toolbar-title> - <v-spacer /> - <v-toolbar-title> - <v-btn v-if="canDeleteView" :loading="loadingDelete" color="error" class="mb-1" @click="deleteView"> - <v-icon left>mdi-delete</v-icon> Delete - </v-btn> - <v-btn v-if="canCreatePid" class="mb-1 ml-2" color="primary" :to="`/database/${$route.params.database_id}/view/${$route.params.view_id}/persist`"> - <v-icon left>mdi-content-save-outline</v-icon> Get PID - </v-btn> - </v-toolbar-title> - </v-toolbar> - <v-card flat tile> - <v-card-title> - View Information - </v-card-title> - <Summary v-if="hasIdentifier" :identifier="view.identifier" /> - <v-card-text> - <v-list dense> - <v-list-item> - <v-list-item-icon> - <v-icon v-if="!database">mdi-database-outline</v-icon> - <v-icon v-if="database" :color="database.is_public ? 'success' : 'error'">mdi-database-outline</v-icon> - </v-list-item-icon> - <v-list-item-content> - <v-list-item-title> - Database Visibility - </v-list-item-title> - <v-list-item-content> - <v-skeleton-loader v-if="!database" type="text" class="skeleton-xsmall" /> - <span v-if="database && database.is_public">Public</span> - <span v-if="database && !database.is_public">Private</span> - </v-list-item-content> - <v-list-item-title class="mt-2"> - Database Name - </v-list-item-title> - <v-list-item-content> - <v-skeleton-loader v-if="!database" type="text" class="skeleton-small" /> - <span v-if="database">{{ database.name }}</span> - </v-list-item-content> - <div v-if="database && database.identifier"> - <v-list-item-title class="mt-2"> - Database License - </v-list-item-title> - <v-list-item-content> - <a :href="database.identifier.licenses[0].uri">{{ database.identifier.licenses[0].identifier }}</a> - </v-list-item-content> - </div> - </v-list-item-content> - </v-list-item> - <v-list-item> - <v-list-item-icon> - <v-icon>mdi-text-short</v-icon> - </v-list-item-icon> - <v-list-item-content> - <v-list-item-title> - Query Statement - </v-list-item-title> - <v-list-item-content> - <v-skeleton-loader v-if="!cachedView.query" type="text" /> - <v-skeleton-loader v-if="!cachedView.query" type="text" class="skeleton-large" /> - <pre v-if="cachedView.query">{{ cachedView.query }}</pre> - </v-list-item-content> - <v-list-item-title v-if="canViewView" class="mt-2"> - View Creator - </v-list-item-title> - <v-list-item-content v-if="canViewView"> - <span v-if="creator">{{ creator }}</span> - </v-list-item-content> - <v-list-item-title class="mt-2"> - View Creation - </v-list-item-title> - <v-list-item-content> - <v-skeleton-loader v-if="!cachedView.created" type="text" class="skeleton-medium" /> - <span v-if="cachedView.created">{{ formatUTC(cachedView.created) }}</span> - </v-list-item-content> - </v-list-item-content> - </v-list-item> - <v-list-item> - <v-list-item-icon> - <v-icon v-if="cachedView.is_public === null">mdi-view-carousel-outline</v-icon> - <v-icon v-if="cachedView.is_public !== null" :color="cachedView.is_public ? 'success' : 'error'">mdi-view-carousel-outline</v-icon> - </v-list-item-icon> - <v-list-item-content> - <v-list-item-title> - View Visibility - </v-list-item-title> - <v-list-item-content> - <v-skeleton-loader v-if="cachedView.is_public === null" type="text" class="skeleton-xsmall" /> - <span v-if="cachedView.is_public !== null">{{ cachedView.is_public ? 'Public' : 'Private' }}</span> - </v-list-item-content> - </v-list-item-content> - </v-list-item> - </v-list> - </v-card-text> - </v-card> - <QueryResults - id="query-results" - ref="queryResults" - type="view" - :view="view" - class="mt-0 mb-0" /> - <v-breadcrumbs :items="items" class="pa-0 mt-2" /> - </div> + <div /> </template> -<script> -import { formatTimestampUTCLabel } from '@/utils' -import DatabaseService from '@/api/database.service' -import UserMapper from '@/api/user.mapper' -import UserUtils from '@/api/user.utils' -import Summary from '@/components/identifier/Summary.vue' +<script> export default { - components: { Summary }, - data () { - return { - items: [ - { text: 'Databases', to: '/database', activeClass: '' }, - { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}`, activeClass: '' }, - { text: 'Views', to: `/database/${this.$route.params.database_id}/view`, activeClass: '' }, - { text: `${this.$route.params.view_id}`, to: `/database/${this.$route.params.database_id}/view/${this.$route.params.view_id}`, activeClass: '' } - ], - view: { - id: null /* only loaded if user has access to view */, - identifier: null - }, - loadingView: true, - loadingDelete: false, - error: false - } - }, - computed: { - token () { - return this.$store.state.token - }, - config () { - if (this.token === null) { - return {} - } - return { - headers: { Authorization: `Bearer ${this.token}` }, - progress: false - } - }, - user () { - return this.$store.state.user - }, - roles () { - return this.$store.state.roles - }, - database () { - return this.$store.state.database - }, - access () { - return this.$store.state.access - }, - views () { - if (!this.database) { - return [] - } - return this.$store.state.database.views - }, - canDeleteView () { - if (!this.roles || !this.user || !this.view || !this.view.creator) { - return false - } - return this.roles.includes('delete-database-view') && this.view.creator.id === this.user.id - }, - canCreatePid () { - if (!this.roles || !this.user || !this.view || this.view.identifier) { - return false - } - return this.roles.includes('create-identifier') && UserUtils.hasReadAccess(this.access) - }, - canViewView () { - if (!this.cachedView) { - return false - } - if (this.cachedView.is_public) { - return true - } - /* is private */ - return UserUtils.hasReadAccess(this.access) - }, - hasIdentifier () { - return this.view && this.view.identifier - }, - cachedView () { - if (!this.database) { - return { - id: null, - name: null, - query: null, - created: null, - is_public: null - } - } - const filter = this.views.filter(v => v.id === Number(this.$route.params.view_id)) - return filter.length === 1 ? filter[0] : null - }, - creator () { - if (!this.view) { - return null - } - return UserMapper.userToFullName(this.view.creator) - } - }, - watch: { - canViewView (val) { - if (val) { - this.loadView() - this.loadResult(this.$route.params.view_id) - } - } - }, mounted () { - if (this.canViewView) { - this.loadView() - this.loadResult(this.$route.params.view_id) - } - }, - methods: { - loadView () { - this.loadingView = true - DatabaseService.findView(this.$route.params.database_id, this.$route.params.view_id) - .then((view) => { - this.view = view - }) - .finally(() => { - this.loadingView = false - }) - }, - deleteView () { - this.loadingDelete = true - DatabaseService.deleteView(this.$route.params.database_id, this.$route.params.view_id) - .then(async () => { - this.$toast.success('Successfully deleted view!') - await this.$store.dispatch('reloadDatabase') - await this.$router.push(`/database/${this.$route.params.database_id}/view`) - }) - .finally(() => { - this.loadingDelete = false - }) - }, - loadResult (viewId) { - if (!viewId) { - return - } - this.$refs.queryResults.reExecute(viewId) - this.$refs.queryResults.reExecuteCount(viewId) - }, - formatUTC (timestamp) { - return formatTimestampUTCLabel(timestamp) - } + this.$router.push(`/database/${this.$route.params.database_id}/view/${this.$route.params.view_id}/info`) } } </script> - <style> -pre { - white-space: break-spaces; -} -.v-card__text { - font-size: initial; -} -.skeleton-large .v-skeleton-loader__text { - width: 400px; -} -.skeleton-medium .v-skeleton-loader__text { - width: 200px; -} -.skeleton-small .v-skeleton-loader__text { - width: 100px; -} -.skeleton-xsmall .v-skeleton-loader__text { - width: 50px; -} -#back-btn { - min-width: auto; - padding: 0 0 0 12px; - background: none !important; - box-shadow: none; -} -#back-btn::before { - opacity: 0; -} </style> diff --git a/dbrepo-ui/pages/database/_database_id/view/_view_id/info.vue b/dbrepo-ui/pages/database/_database_id/view/_view_id/info.vue new file mode 100644 index 0000000000000000000000000000000000000000..48c8b03d861beb9ba54dbc630b2251a896948699 --- /dev/null +++ b/dbrepo-ui/pages/database/_database_id/view/_view_id/info.vue @@ -0,0 +1,192 @@ +<template> + <div v-if="view"> + <ViewToolbar /> + <v-tabs-items v-model="tab"> + <v-tab-item> + <v-card flat tile> + <Summary v-if="hasIdentifier" :identifier="identifier" /> + <v-card-text v-if="hasIdentifier"> + <Select :identifiers="identifiers" :identifier="identifier" /> + </v-card-text> + </v-card> + <v-divider v-if="hasIdentifier" /> + <v-card flat tile> + <v-card-title>View</v-card-title> + <v-card-text> + <v-list dense> + <v-list-item> + <v-list-item-content> + <v-list-item-title> + Query Statement + </v-list-item-title> + <v-list-item-content> + <v-skeleton-loader v-if="!view.query" type="text" /> + <v-skeleton-loader v-if="!view.query" type="text" class="skeleton-large" /> + <pre v-if="view.query">{{ view.query }}</pre> + </v-list-item-content> + <v-list-item-title v-if="canViewView" class="mt-2"> + View Creator + </v-list-item-title> + <v-list-item-content v-if="canViewView"> + <span v-if="creator">{{ creator }}</span> + </v-list-item-content> + <v-list-item-title class="mt-2"> + View Creation + </v-list-item-title> + <v-list-item-content> + <v-skeleton-loader v-if="!view.created" type="text" class="skeleton-medium" /> + <span v-if="view.created">{{ formatUTC(view.created) }}</span> + </v-list-item-content> + <v-list-item-title> + View Visibility + </v-list-item-title> + <v-list-item-content> + <v-skeleton-loader v-if="view.is_public === null" type="text" class="skeleton-xsmall" /> + <span v-if="view.is_public !== null">{{ view.is_public ? 'Public' : 'Private' }}</span> + </v-list-item-content> + </v-list-item-content> + </v-list-item> + </v-list> + </v-card-text> + </v-card> + <v-divider /> + <v-card flat tile> + <v-card-title>Database</v-card-title> + <v-card-text> + <v-list dense> + <v-list-item> + <v-list-item-content> + <v-list-item-title> + Database Visibility + </v-list-item-title> + <v-list-item-content> + <v-skeleton-loader v-if="!database" type="text" class="skeleton-xsmall" /> + <span v-if="database && database.is_public">Public</span> + <span v-if="database && !database.is_public">Private</span> + </v-list-item-content> + <v-list-item-title class="mt-2"> + Database Name + </v-list-item-title> + <v-list-item-content> + <v-skeleton-loader v-if="!database" type="text" class="skeleton-small" /> + <span v-if="database">{{ database.name }}</span> + </v-list-item-content> + </v-list-item-content> + </v-list-item> + </v-list> + </v-card-text> + </v-card> + </v-tab-item> + </v-tabs-items> + <v-breadcrumbs :items="items" class="pa-0 mt-2" /> + </div> +</template> +<script> +import { formatTimestampUTCLabel } from '@/utils' +import ViewToolbar from '@/components/ViewToolbar.vue' +import UserMapper from '@/api/user.mapper' +import UserUtils from '@/api/user.utils' +import Summary from '@/components/identifier/Summary.vue' +import Select from '@/components/identifier/Select.vue' + +export default { + components: { + Select, + Summary, + ViewToolbar + }, + data () { + return { + tab: 0, + items: [ + { text: 'Databases', to: '/database', activeClass: '' }, + { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}`, activeClass: '' }, + { text: 'Views', to: `/database/${this.$route.params.database_id}/view`, activeClass: '' }, + { text: `${this.$route.params.view_id}`, to: `/database/${this.$route.params.database_id}/view/${this.$route.params.view_id}`, activeClass: '' }, + { text: 'Info', to: `/database/${this.$route.params.database_id}/view/${this.$route.params.view_id}/info`, activeClass: '' } + ], + error: false + } + }, + computed: { + user () { + return this.$store.state.user + }, + roles () { + return this.$store.state.roles + }, + database () { + return this.$store.state.database + }, + view () { + if (!this.database) { + return null + } + return this.database.views.filter(v => v.id === Number(this.$route.params.view_id))[0] + }, + access () { + return this.$store.state.access + }, + identifiers () { + if (!this.view) { + return [] + } + return this.view.identifiers + }, + identifier () { + if (this.pid) { + const filter = this.identifiers.filter(i => i.id === Number(this.pid)) + if (filter.length > 0) { + return filter[0] + } + } + return this.identifiers[0] + }, + views () { + if (!this.database) { + return [] + } + return this.database.views + }, + pid () { + return this.$route.query.pid + }, + canViewView () { + /* is private */ + return UserUtils.hasReadAccess(this.access) + }, + hasIdentifier () { + return this.identifiers.length > 0 + }, + creator () { + if (!this.view) { + return null + } + return UserMapper.userToFullName(this.view.creator) + } + }, + methods: { + formatUTC (timestamp) { + return formatTimestampUTCLabel(timestamp) + } + } +} +</script> + +<style> +pre { + white-space: break-spaces; +} +.v-card__text { + font-size: initial; +} +#back-btn { + min-width: auto; + padding: 0 0 0 12px; + background: none !important; + box-shadow: none; +} +#back-btn::before { + opacity: 0; +} +</style> diff --git a/dbrepo-ui/pages/database/_database_id/view/_view_id/persist.vue b/dbrepo-ui/pages/database/_database_id/view/_view_id/persist.vue index ad4f2e3d0a4e0796a0236d61336397882fc4f42d..d8da106bde003e1f36e26240af6d3eeaa0be0b88 100644 --- a/dbrepo-ui/pages/database/_database_id/view/_view_id/persist.vue +++ b/dbrepo-ui/pages/database/_database_id/view/_view_id/persist.vue @@ -6,9 +6,8 @@ </template> <script> -import Persist from '@/components/identifier/Persist.vue' +import Persist from '@/components/identifier/Persist' import UserUtils from '@/api/user.utils' -import QueryService from '@/api/query.service' export default { components: { @@ -17,8 +16,6 @@ export default { data () { return { loading: false, - loadingView: false, - view: null, isAuthorizationError: false, items: [ { text: 'Databases', to: '/database', activeClass: '' }, @@ -43,42 +40,21 @@ export default { database () { return this.$store.state.database }, + view () { + if (!this.database) { + return null + } + return this.database.views.filter(v => v.id === Number(this.$route.params.view_id))[0] + }, access () { return this.$store.state.access }, - hasIdentifier () { - if ('identifier' in this.view && this.view.identifier) { - return 'id' in this.view.identifier - } - return false - }, canPersistView () { - if (this.loadingView || !this.view || this.hasIdentifier) { + if (!this.view) { return false } return UserUtils.hasReadAccess(this.access) } - }, - mounted () { - this.loadView() - }, - methods: { - loadView () { - this.loadingView = true - return new Promise((resolve, reject) => { - QueryService.findView(this.$route.params.database_id, this.$route.params.view_id) - .then((view) => { - this.view = view - resolve(view) - }) - .catch((error) => { - reject(error) - }) - .finally(() => { - this.loadingView = false - }) - }) - } } } </script> diff --git a/dbrepo-ui/pages/database/_database_id/view/index.vue b/dbrepo-ui/pages/database/_database_id/view/index.vue index 9c53dd3fe2c6b91f981ed209e67f0a76feb2f847..86e2e37566d79503e2b62b69822d0674584b800e 100644 --- a/dbrepo-ui/pages/database/_database_id/view/index.vue +++ b/dbrepo-ui/pages/database/_database_id/view/index.vue @@ -1,6 +1,6 @@ <template> <div> - <DBToolbar /> + <DatabaseToolbar /> <v-tabs-items v-model="tab"> <ViewList /> </v-tabs-items> @@ -8,14 +8,14 @@ </div> </template> <script> -import DBToolbar from '@/components/DBToolbar.vue' +import DatabaseToolbar from '@/components/DatabaseToolbar.vue' import ViewList from '@/components/ViewList.vue' export default { name: 'Views', components: { ViewList, - DBToolbar + DatabaseToolbar }, data () { return { diff --git a/dbrepo-ui/pages/database/index.vue b/dbrepo-ui/pages/database/index.vue index 8c24a660e988eb7c203db8a310d583a3a2402111..1c07f23ed1b6469483621d9b76157f9ddcab873b 100644 --- a/dbrepo-ui/pages/database/index.vue +++ b/dbrepo-ui/pages/database/index.vue @@ -1,78 +1,10 @@ <template> - <div> - <v-toolbar flat> - <v-toolbar-title v-if="!isFiltered" v-text="$t('databases.recent', { name: 'vue-i18n' })" /> - <v-toolbar-title v-else v-text="$t('databases.my', { name: 'vue-i18n' })" /> - <v-spacer /> - <v-toolbar-title> - <v-btn v-if="canCreateDatabase" color="primary" name="create-database" @click.stop="createDbDialog = true"> - <v-icon left>mdi-plus</v-icon> Database - </v-btn> - </v-toolbar-title> - </v-toolbar> - <DatabaseList ref="databases" /> - <v-dialog - v-model="createDbDialog" - persistent - max-width="640"> - <CreateDB @close="closed" /> - </v-dialog> - <v-breadcrumbs :items="items" class="pa-0 mt-2" /> - </div> + <div /> </template> <script> -import { mdiDatabaseArrowRightOutline } from '@mdi/js' -import CreateDB from '@/components/dialogs/CreateDB.vue' -import DatabaseList from '@/components/DatabaseList.vue' - export default { - components: { - CreateDB, - DatabaseList - }, - data () { - return { - loadingCreate: false, - createDbDialog: false, - createDatabaseDto: { - name: null, - is_public: true - }, - items: [ - { text: 'Databases', to: '/database', activeClass: '' } - ], - loadingDatabases: false, - error: false, - iconSelect: mdiDatabaseArrowRightOutline - } - }, - computed: { - token () { - return this.$store.state.token - }, - user () { - return this.$store.state.user - }, - roles () { - return this.$store.state.roles - }, - isFiltered () { - return this.$route.query.f === 'my' - }, - canCreateDatabase () { - if (!this.roles) { - return false - } - return this.roles.includes('create-database') - } - }, - methods: { - closed (event) { - this.createDbDialog = false - if (event.success) { - this.$refs.databases.loadDatabases() - } - } + mounted () { + this.$router.push('/') } } </script> diff --git a/dbrepo-ui/pages/index.vue b/dbrepo-ui/pages/index.vue index 91424a243ed4ffc849655f6123a01669b56f1967..3ad7873d66e1ee0e7fe1b2de7b5d453c45f3dae1 100644 --- a/dbrepo-ui/pages/index.vue +++ b/dbrepo-ui/pages/index.vue @@ -2,6 +2,12 @@ <div> <v-toolbar flat> <v-toolbar-title v-text="$t('databases.recent', { name: 'vue-i18n' })" /> + <v-spacer /> + <v-toolbar-title> + <v-btn v-if="canCreateDatabase" color="primary" name="create-database" @click.stop="createDbDialog = true"> + <v-icon left>mdi-plus</v-icon> Database + </v-btn> + </v-toolbar-title> </v-toolbar> <v-card flat tile> <v-divider class="mx-4" /> @@ -18,22 +24,83 @@ </div> </v-card-text> </v-card> - <DatabaseList ref="databases" /> + <DatabaseList ref="databases" :databases="databases" /> + <v-dialog + v-model="createDbDialog" + persistent + max-width="640"> + <CreateDB @close="closed" /> + </v-dialog> </div> </template> <script> import DatabaseList from '@/components/DatabaseList' +import CreateDB from '@/components/dialogs/CreateDB' +import DatabaseService from '@/api/database.service' export default { components: { + CreateDB, DatabaseList }, + data () { + return { + loading: false, + createDbDialog: null, + databases: [] + } + }, computed: { + roles () { + return this.$store.state.roles + }, + canCreateDatabase () { + if (!this.roles) { + return false + } + return this.roles.includes('create-database') + }, infoLinks () { const infoLinks = this.$config.infoLinks console.debug('info links', infoLinks) return infoLinks + }, + isFiltered () { + return this.$route.query.f === 'my' + } + }, + mounted () { + this.loadDatabases() + }, + methods: { + closed (event) { + this.createDbDialog = false + if (event.success) { + this.$router.push('/database?f=my') + } + }, + loadDatabases () { + this.loadingDatabases = true + if (this.isFiltered) { + DatabaseService.findAllOnlyAccess() + .then((databases) => { + this.databases = databases + console.info('Found', this.databases.length, 'database(s) with access') + }) + .finally(() => { + this.loadingDatabases = false + }) + } else { + DatabaseService.findAll() + .then((databases) => { + this.databases = databases + console.info('Found', this.databases.length, 'database(s)') + }) + .finally(() => { + this.loadingDatabases = false + }) + } } } } diff --git a/dbrepo-ui/pages/login.vue b/dbrepo-ui/pages/login.vue index fad6973e5b069ef86ceb0c90be85625dc3236440..85e3dce7568284534ba058bb437509db148dd167 100644 --- a/dbrepo-ui/pages/login.vue +++ b/dbrepo-ui/pages/login.vue @@ -109,13 +109,15 @@ export default { .then(async (user) => { this.$store.commit('SET_USER', user) this.$vuetify.theme.dark = user.attributes.theme_dark - await this.$store.dispatch('reloadDatabaseCount') await this.$router.push('/database') }) }) .catch(() => { this.loading = false }) + .finally(() => { + this.loading = false + }) }, signup () { this.$router.push('/signup') diff --git a/dbrepo-ui/pages/search/index.vue b/dbrepo-ui/pages/search/index.vue index 4f97484d1491271fbdbf119aec8de2617c684ee6..52a9ac24d12f4136e354635b45ba4595f93cd768 100644 --- a/dbrepo-ui/pages/search/index.vue +++ b/dbrepo-ui/pages/search/index.vue @@ -12,31 +12,34 @@ <v-card flat tile> <AdvancedSearch ref="adv" @search-result="onSearchResult" /> </v-card> - <v-card - v-for="(result, idx) in results" - :key="idx" - :to="link(result) && link(result).startsWith('http') ? null : link(result)" - :href="link(result) && link(result).startsWith('http') ? link(result): null" - flat - tile> - <v-divider class="mx-4" /> - <v-card-title> - <a v-if="link(result)" :href="link(result)">{{ title(result) }}</a> - <span v-else>{{ title(result) }}</span> - </v-card-title> - <v-card-subtitle class="search-subtitle" v-text="description(result)" /> - <v-card-text v-if="tags(result).length > 0" class="search-description"> - <div class="search-tags"> - <v-chip - v-for="(tag, i) in tags(result)" - :key="i" - small - :color="tag.color" - outlined - v-text="tag.text" /> - </div> - </v-card-text> - </v-card> + <DatabaseList v-if="isDatabaseSearch" :databases="results.results" /> + <div v-else> + <v-card + v-for="(result, idx) in results.results" + :key="idx" + :to="link(result) && link(result).startsWith('http') ? null : link(result)" + :href="link(result) && link(result).startsWith('http') ? link(result): null" + flat + tile> + <v-divider class="mx-4" /> + <v-card-title> + <a v-if="link(result)" :href="link(result)">{{ title(result) }}</a> + <span v-else>{{ title(result) }}</span> + </v-card-title> + <v-card-subtitle class="db-subtitle" v-text="description(result)" /> + <v-card-text class="db-description"> + <div v-if="tags(result).length > 0" class="db-tags"> + <v-chip + v-for="(tag, i) in tags(result)" + :key="i" + small + :color="tag.color" + outlined + v-text="tag.text" /> + </div> + </v-card-text> + </v-card> + </div> <v-dialog v-model="createDbDialog" persistent @@ -47,8 +50,8 @@ </template> <script> -import SearchService from '@/api/search.service' import CreateDB from '@/components/dialogs/CreateDB' +import SearchService from '@/api/search.service' import AdvancedSearch from '@/components/search/AdvancedSearch' import IdentifierMapper from '@/api/identifier.mapper' @@ -59,7 +62,10 @@ export default { }, data () { return { - results: [], + results: { + results: [], + type: null + }, loading: false, createDbDialog: null } @@ -74,27 +80,27 @@ export default { } return this.$route.query.q }, - type () { - if (!this.$route.query || !this.$route.query.t) { - return null - } - return this.$route.query.t - }, header () { - if (this.results.length !== 1) { - return `${this.results.length} results` + if (!this.results || !this.results.results) { + return '0 results' } - return `${this.results.length} result` + if (this.results.results.length !== 1) { + return `${this.results.results.length} results` + } + return `${this.results.results.length} result` }, canCreateDatabase () { if (!this.roles) { return false } return this.roles.includes('create-database') + }, + isDatabaseSearch () { + return this.results.type === 'database' } }, watch: { - '$route.query.q': { + $route: { handler () { this.generalSearch() } @@ -112,8 +118,8 @@ export default { } this.loading = true SearchService.search(null, { search_term: this.query }) - .then((hits) => { - this.results = hits.map(h => h._source) + .then((response) => { + this.results = response }) .finally(() => { this.loading = false @@ -123,89 +129,65 @@ export default { if (!item) { return false } - if ('_class' in item) { - return /at.tuwien.api.database.DatabaseDto/.test(item._class) - } - return item.exchangeName !== undefined + return this.results.type === 'database' }, isConcept (item) { if (!item) { return false } - if ('_class' in item) { - return /at.tuwien.api.database.table.columns.concepts.ConceptDto/.test(item._class) - } - return false + return this.results.type === 'concept' }, isUnit (item) { if (!item) { return false } - if ('_class' in item) { - return /at.tuwien.api.database.table.columns.concepts.UnitDto/.test(item._class) - } - return false + return this.results.type === 'unit' }, isTable (item) { if (!item) { return false } - if ('_class' in item) { - return /at.tuwien.api.database.table.TableDto/.test(item._class) - } - return false + return this.results.type === 'table' }, isColumn (item) { if (!item) { return false } - if ('_class' in item) { - return /at.tuwien.api.database.table.columns.ColumnDto/.test(item._class) - } - return false + return this.results.type === 'column' }, isUser (item) { if (!item) { return false } - if ('_class' in item) { - return /at.tuwien.api.user.UserDto/.test(item._class) - } - return false + return this.results.type === 'user' }, isView (item) { if (!item) { return false } - if ('_class' in item) { - return /at.tuwien.api.database.ViewDto/.test(item._class) - } - return false + return this.results.type === 'view' }, isIdentifier (item) { if (!item) { return false } - if ('_class' in item) { - return /at.tuwien.api.identifier.IdentifierDto/.test(item._class) - } - return false + return this.results.type === 'identifier' }, isPublic (item) { - if (this.isDatabase(item) || this.isTable(item) || this.isColumn(item) || this.isView(item)) { + if (this.isDatabase(item) || this.isTable(item) || this.isColumn(item) || this.isView(item) || this.isIdentifier(item)) { return item.is_public - } else if (this.isIdentifier(item)) { - return item.visibility === 'EVERYONE' } return null }, title (item) { - if (this.isDatabase(item) || this.isTable(item) || this.isColumn(item) || this.isView(item) || this.isConcept(item) || this.isUnit(item)) { + if (this.isDatabase(item) || this.isTable(item) || this.isColumn(item) || this.isView(item)) { return item.name - } else if (this.isIdentifier(item)) { + } else if (this.isConcept(item) || this.isUnit(item)) { + return item.uri + } if (this.isIdentifier(item)) { return IdentifierMapper.identifierPreferEnglishTitle(item) } else if (this.isUser(item)) { - return item.username + return item.creator.qualified_name } return null }, @@ -215,7 +197,11 @@ export default { } else if (this.isIdentifier(item)) { return IdentifierMapper.identifierPreferEnglishDescription(item) } else if (this.isColumn(item)) { - return null + let text = item.column_type + if (item.size) { + text += `(${item.size}${item.d ? ',' + item.d : ''})` + } + return text } else if (this.isView(item)) { return item.query } else if (this.isUser(item)) { @@ -231,7 +217,7 @@ export default { } else if (this.isView(item)) { return `/database/${item.database_id}/view/${item.id}` } else if (this.isColumn(item)) { - return `/database/${item.database_id}/table/${item.table_id}` + return `/database/${item.database_id}/table/${item.table_id}/schema` } else if (this.isIdentifier(item)) { return `/pid/${item.id}` } else if (this.isConcept(item) || this.isUnit(item)) { @@ -242,14 +228,11 @@ export default { tags (item) { const tags = [] if (this.isPublic(item) === true || this.isPublic(item) === false) { - tags.push({ color: this.isPublic(item) ? 'green' : 'red', text: this.isPublic(item) ? 'Public' : 'Private' }) + tags.push({ color: this.isPublic(item) ? 'green' : null, text: this.isPublic(item) ? 'Public' : 'Private' }) } if (this.isDatabase(item)) { - tags.push({ text: 'Database' }) } else if (this.isTable(item)) { - tags.push({ text: 'Table' }) } else if (this.isColumn(item)) { - tags.push({ text: 'Column' }) if ('concept' in item) { const conceptName = ('name' in item.concept) ? item.concept.name : 'Concept' tags.push({ color: 'green', text: conceptName }) @@ -259,16 +242,11 @@ export default { tags.push({ color: 'green', text: unitName }) } } else if (this.isView(item)) { - tags.push({ text: 'View' }) } else if (this.isIdentifier(item)) { - tags.push({ text: 'Identifier' }) } else if (this.isUnit(item)) { - tags.push({ text: 'Unit' }) } else if (this.isConcept(item)) { - tags.push({ text: 'Concept' }) } else if (this.isUser(item)) { - tags.push({ text: 'User' }) - if ('orcid' in item.attributes && item.attributes.orcid) { + if (item.creator.attributes.orcid) { tags.push({ text: 'ORCID', color: 'green' }) } } @@ -281,6 +259,7 @@ export default { } }, onSearchResult (results) { + console.debug('found search results', results) this.results = results } } diff --git a/dbrepo-ui/plugins/axios.js b/dbrepo-ui/plugins/axios.js index 7d475a29340f3737417862b244f956b338743e6f..aca6db132348c8d56175ac9dab9623ec4c8186fa 100644 --- a/dbrepo-ui/plugins/axios.js +++ b/dbrepo-ui/plugins/axios.js @@ -1,8 +1,6 @@ import Vue from 'vue' import store from '@/store' import api from '@/api' -import AuthenticationService from '@/api/authentication.service' -import jwtDecode from 'jwt-decode' import VueAxios from 'vue-axios' api.interceptors.request.use((config) => { @@ -10,35 +8,8 @@ api.interceptors.request.use((config) => { if (!token) { return config } - const { exp } = jwtDecode(token) - let accessTokenExpiryDate = new Date(exp * 1000) - if (accessTokenExpiryDate <= Date.now()) { - /* token expired */ - console.warn('access token has expired:', accessTokenExpiryDate) - const refreshToken = store().state.refreshToken - const refreshTokenExpiryDate = new Date(jwtDecode(refreshToken).exp * 1000) - if (refreshTokenExpiryDate <= Date.now()) { - /* refresh token expired */ - console.error('Refresh token expired') - store().commit('SET_TOKEN', null) - store().commit('SET_REFRESH_TOKEN', null) - return config - } - AuthenticationService.authenticateToken(refreshToken) - .then((response) => { - accessTokenExpiryDate = new Date(jwtDecode(response.access_token).exp * 1000) - console.info('Successfully requested a new access token') - console.debug('new access token expires:', accessTokenExpiryDate) - console.debug('attach access token to intercepted request:', config.url) - config.headers.Authorization = `Bearer ${response.access_token}` - return config - }) - .finally(() => { - return config - }) - } - // console.debug('interceptor inject authorization header for url', config.url) - config.headers.Authorization = `Bearer ${token}` + console.debug('interceptor inject authorization header for url', config.url) + config.headers.Authorization = `Bearer ${store().state.token}` return config }) diff --git a/dbrepo-ui/plugins/vuex-persist.js b/dbrepo-ui/plugins/vuex-persist.js index d9f892c78c1b55ceafe1705ab2c280c6f34d49f6..a6258f864109fe399e8c4d1444baab3d557e6a48 100644 --- a/dbrepo-ui/plugins/vuex-persist.js +++ b/dbrepo-ui/plugins/vuex-persist.js @@ -20,8 +20,8 @@ export default ({ store }) => { clientSecret: state.clientSecret, searchUsername: state.searchUsername, searchPassword: state.searchPassword, - databaseCount: state.databaseCount, - doiUrl: state.doiUrl + doiUrl: state.doiUrl, + subset: state.subset }) }).plugin(store) } diff --git a/dbrepo-ui/static/favicon.ico b/dbrepo-ui/static/favicon.ico index 6ace63385e87933d192eb4cb33051236b69bed26..91a4096eb12a4dbccecea9bc257c04d4c8add724 100644 Binary files a/dbrepo-ui/static/favicon.ico and b/dbrepo-ui/static/favicon.ico differ diff --git a/dbrepo-ui/static/favicon.png b/dbrepo-ui/static/favicon.png index b24de7f0525b3d186e1d36f8b8939fb111ea92bc..bed1750f083bbed26a53ba91de19174447ae392b 100644 Binary files a/dbrepo-ui/static/favicon.png and b/dbrepo-ui/static/favicon.png differ diff --git a/dbrepo-ui/static/favicon.psd b/dbrepo-ui/static/favicon.psd new file mode 100644 index 0000000000000000000000000000000000000000..38f27bae62ca0276685223d79bc0a2263d740c18 Binary files /dev/null and b/dbrepo-ui/static/favicon.psd differ diff --git a/dbrepo-ui/static/favicon.svg b/dbrepo-ui/static/favicon.svg new file mode 100644 index 0000000000000000000000000000000000000000..9872a4a1b90a971e002bf9e543070ab62b6962ba --- /dev/null +++ b/dbrepo-ui/static/favicon.svg @@ -0,0 +1,9 @@ +<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 265 265" width="265" height="265"> + <title>favicon</title> + <defs> + <image width="265" height="265" id="img1" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQkAAAEJCAYAAACHaNJkAAAAAXNSR0IArs4c6QAAIABJREFUeF7tnQl0XMWZ7//39t7a9807BhtjtYFgDMaHAEkgwSYEMnjeJGTIe1leMslLXhbbySzH8GYmB4vJy0wWmMAMZIFkQsgMJEAWSCBhMWA2ywYb40Xe1JK1S70v9773VauNbMtWd6tbUuv+6xz5yq176976V9Wvv/q+ulUaCpk2m3pt+K0Suy3kdiThMGDTC3k75k0FrKCAFjfNqN2e9NiM6KH+WAB3XxQvZLm1fGde/7X2RfakucrU9eWaaS42YbZA06pgwg3Ame/7MT8qYD0FzCSgxwBzyDQ1v67hsAns0DS0dw5Et+UbGpOHxE0P2hrOWvJu3cD1gHYDgLnWqzSWmArMEAU0DJuG9kdoxi+iWvzhgS0XDU32yXKGxLLNO52DYeNaE9pXAHPNZB+E11MBKpB3BQLQsNmh4b5Dt/sGcs09e0hsfsreHK690oSxGdBWA8g+j1yfltdRASqQiwIdMM17Inr8e7lYFll18AWbD7ijoZF/hoZPALDn8rS8hgpQgelRwAS22jT9s0e3LN+ezRNkDInGja9frGn6fTCxLJsb8FwqQAVmlAIRaPiCf4vvnkyfKgNImFrzxp3vNWH+ElARCiYqQAWKXAFNww+8Ic9n9n7n7OhERZkAEqbWtGHHp6BhC4DKiTLj36kAFSgaBQxAu9cWH/nCkW+tDp/pqc8IiaYN2z8MTbufFkTRVDwflApko4AJ4BF/W+uNgCa/j5tOC4mWjdvfY0B7AEBDNnfluVSAChSXAia0W7vaWm/LChItG7fPMaC/Bpi1xVVcPi0VoAI5KGCaMNd3ta14aLxrx7EkxFG54z4TuCWHm/ESKkAFilEBDUdtmn7FkduX7z358U+BRNOG9k9Dw10A+DJWMVY2n5kK5KqAhv/yu/vW47YrE2OzOAES877WXhU38AqAhbneh9dRASpQtApEDJhXdreteOG0kGje2L7JBG4v2iLywakAFZisAi/7B2Orx75JetySqN24u8yB2OsAFk32LryeClCB4lXAhHnTWCfmcUg0btj+l5qm3UdfRPFWLp+cCuRDAQ14rLPNty6d13FING1sFytiRT5uwjyoABUoXgU0II5krLnzmxf1SikUJJo27ZwH0+jga9/FW7F8ciqQZwVu9rf5ZDLlKCRSYc/v5/kmzI4KUIFiVcDE/f6O3R/Hz9cnU5bExva7AXyqWMvD56YCVCDPCpjYnXRoVxz7Rmt3GhKv/v8XPS7I822YHRWgAsWrgGHAvEzmTIz6JNqHYKK8eMvDJ6cCVCDfCmgaPtq5xfcTreXru2qMZFx5MZmoABWgAscVMM2/8d+x4htay9dfP8dI6m9RGipABajACQpo+JZ/i+/LWtOG7RdC0+R9DSYqQAWowFgF7vG3+T6tNXx1+ypd1054oYM6UQEqQAVkHczOLb7/TkiwLVABKjCuAhrww84238cJCTYQKkAFCAm2ASpABbJXgJZE9prxCipgKQUICUtVNwtLBbJXgJDIXjNeQQUspQAhYanqZmGpQPYKEBLZa8YrqIClFCAkLFXdLCwVyEEBTfuRf0vrLZwnkYN2vIQKWEIBQsIS1cxCUoHcFSAkcteOV1IBSyhASFiimllIKpC7AoRE7trxSipgCQUICUtUMwtJBXJXgJDIXTteSQWsoYD5Y3/bir9kCNQatc1SUoEcFCAkchCNl1ABKylASFiptllWKpCDAoREDqLxEipgJQUICSvVNstKBXJQgJDIQTReQgWspAAhYaXaZlmpQA4KEBI5iDZ9l9h0wOPQ1U+JS0eZ2wavU0elxwaPU1e/exwaKr12VHttKPfYUF9qh9uhw+3Q1NFl1+By6HDaNDhsGnQN6sema9DkKP8ASJomDAMwTBNJE+r3pGEikjAQTZiIxk3EkgZCMQPhmImBUAJ9wST6gwkMR5KIxE0Eokn190DUwGAo9XtQnW8gHDdgmNOnJe+coQIm7vff4fsY50lkqNdUnSadV35KXQIDG0qcOurL7KrT15XaUV1iU/9vrnCirsyuflw2DU67/Oiq009nEpgkDCASTwFFwNHRF0NfMIFjIwn1/56RFFRGIkkMhAQqKeDI+QnSYzqr78R7H4fExu2X6NC2zpwns9aTCBCaKxxYVOfCsiY3FtU6UelJwSANitpSu7IUphsA+aoZAclwxFBWx0AwqSwL+V3gsa8nije7Ijg6EMeh/hihkS/Rc8mHkMhFtclfU+Gx4aw6F86ud+GjF1fj3Ca3shaYTlVgKJzE9iNh/OaNYWw7GMTBvpgaspgcqkxNcyEkCqezDO1ddh1lLh0Lap2YU+lUVsLSRrcCREulQw0pmDJXQKyPA70x7O2JKgvj5YMhdA7FcXQghv5QEnFxnjDlVwFCIr96Sm4yHJhX7cQli0pw8YISzK1yKCjUlNgJhTzLLf6L3kACRwZSwHjTH8FLHUEcHYzn+U4Wzo6QyF/li89A4LBqYQlWLfCqoURDuUNFFGaLHyF/auU3Jxl6pKMru7sieLEjiG0dIew9FlXRGA5NJqE3ITEJ8QDMqXLgovklWDnfi7WtFSryMBpBnFzGvHrSCkiE5O1jUWw/HMbPXx1Qw5TukTiBkb2yD/jbfDdrDYxuZCydQKDaa8d5zW5cs6wcVy8rV+FI+hcylnBKTxQ/RvvRMLbuD+Kpt0bw2uGwCrUyZawAIZGxVICyEtZfWIW1vgpcPN+r5i0wFYcCMvVC5mm8sD+IX7UP4cndI2puBtOEChASE0o06oxcuaAEW25owTkNrkwu4TkzWAGxLp7ZG8C9z/UpWDCdUQFC4kzyiMNR4HD1sjJ8ZGU1ZH4D0+xRQKIj3/7DMfx+9wh2dUUYQh2/agmJ0zX5crcN7z+vHF9+bz3mVDkZoZg9bDihJDK3QuZc3Pt8H+57vm+WlnJSxSIkxpNPfA2b1zaqiIXAgskaCrT9rhvfe7qHFsWJ1U1InNz8JVJx23XNuHZ5OSMW1mDD8VLKfIqfbuvHHb/rxrFAguHSlDKExNh+IBOivvGhZqxdXsH5DhYDRLq44qf40Qt9+Pfn+tQwxPLJxE/8d/g+ynkSkPUUgFsurcFfv79RvW3JZF0FukcSuPuZXtz1xx7ripAuOSGRUsKua1i10It/WT8XzZUONgwqgJGIgQ9/fz92doatrQYhkap/efnq5lXV+Mr76hUwmKiAKPAPj3fhX//UY+0VtAiJVGeQtzX/4fomLG/2sHdQgeMK/OntAP72kU71arplEyGRqvqPrarGlhtbLNsOWPDxFRDHpYREf/xiv3UlIiRSdb/h6gZ86T311m0ILPm4CshanD98IRUStWwiJFJVv/HqBnzxqnqGPS3bE8YvOCGhdPmpv833EcuHQC+a78Un19Ri7fJytbQ8ExWQiVU/e2UA9zzTq97rsHAiJNKVX+bW8ak1tWquhCwew2RNBeSV8sMDMTy+cwi3/6abU7RpSZzYEeSdjU9eVqPe+GyqcHD4YUFOHOiN4p5n+xQkZI8QJg43TmkDMtpYs7gUn7m8FhfO8/IFL4v0kljCxBO7hnHXn3qx42iYFsQ79c7hxun6gOyD8Z5zy9B2YwtBMctBIRbDPz3RjfutHOo8fR0TEhO1f1n1+trlFWptCdk3g2tZTqRYcfxdNviRHcJ+sLVPrX15kC9zna7iCIlMmrSAYX61E1csKcW61gq0tnjUpr1MxaeAbCcoy+3LOpeyM9ib/rC1p11PXIWExMQapc6QRXDLXDYsaXThynPKFCwW13O9y0z1m+7zZAUq2ZPj4e1DeH5fAPt7owhGubP5RPViQvuPrrbWv7D8PAlfi0fNj5B4eKYrKMumO+fP8ajFaZY0uHF2gwtVXjtcds6zmKjhTcXfpR5lC0DxN8g+oi8dCGJ3dzTj+hXr0TfHA8MAXjscmopHnpH3ICRGq+Vr1zSoBW/vebYXf9wTUDtcZ5qkMcnOXWtby3Fuo0etpr2o1kVYZCpgns+TV7w7+qJ4qzuKZ/cGVKQi28lQspu7vOz3V++uU1sH/v3jfsuuUkVIjDbQ/3NdEz5xWa3al+G5fQF856keZZrKxJpMk7xi7nFqaCx3KEhI+HT1ohLMr3FCVrxiKowCUkfD4aTafEfWfpAf2blLLAiBfTZb/MmQUurtsxL+nutFicuGn73cj82PEhKWH24IJGRadjoNhpL4ybZ+/HTbAPZN4jXhtB9Dpn1L45OhiewqzjQ5BWTfDHlD84GXBtTuXGItDIWTk8pU1ja9dV2T2pEtvTKZWCWEBH0SqmGdDIl0a5NGcv9LfXh2b1CNSwUek0kCjdoSO5Y0unHhPA+aK5yYV+1ApceOujI7Kr02uO2a5d8fEQiEYiYC0aTyKwyEkjg2HMeBvpiKTOw5FsFIJIlk5qPCU6pN6qLUpePyxWW4bHEJPrSiUuk/NhESAIcbY4YbYy2JsQ1FGuxgOKm+rR7ZPoSn9wTQG4hPqoGm85chSolLV5O1FCQ8Nsg7JLLPhwxbFtY61XsksilQCiA6nLPEMSoLzgajSQWDruEUCI4MxJSFIGCQDjoSTcI/GFfHSNzMyyxImVE7t8qpLAZZsnDNWaUoc9vGnYJPSBASx1lwOktiLCxk7Htw1CEm41+Z2390MD4Zw2Lca2VB3lKXTX3LSbRETF/xdcgmxfJZQ7lDOUprSmwKHvJ3Ocq8DQHOTJnsJSFH+bYPx1MWgQwHpNP1jCRwaCCmjvJZIGpgOCIQMNTfU58ls/IHZVIJoqv4ij64olJFpWTYN9FGz4QEIZEVJMZriO1HwvjdrmHs7Izgjc7UuFhm8mXjLMukgWdzjkBDvPMyhCl366gpTe14LlaLdJTU8dTf5Rxdk/NSd5MAj1hRhinf4IBhmEgYprKg5Cg/pgHEkqlveLEEBkKJ0WMS0cT06iDWWUO5XVkNMltW/ELnNLiz2omNkBBImD/ralvx3+i4PMlxmU2nlI40HDEgbw/2h1LDkhcPBFUIri+QUJ2JqfAKyLwVsa7ObXTjssWlWNrgVpCQyFKu0SVCgpCYtCVxctMXC0K+TY8MxNHRH8Orh0IKHi8fDCm/xnRaGIXvplN/B7GMZEh2XrMbqxeVQt6zmVslwzGX8u1MNhEShETeIXG6RinzL3oDCRzqjytoyJj8YF8M/cEkegJxNS4PRAxaHScJKE5GcdiKj0acuo0VDiyskYhQyrErE9dkOwRZB6QQC4oREmMg0fLV9ksNHc9PlrzFen0mjst8lk08++LJl52idvkj6ByMqWXbxdqQ9wkUNKJJFXK1ymhFrAKJMggMBAriWxFrQIYPEu1ZMAqHlkrHlDlnCQlCYsosiTMBRoYg4reQ2YGhWOpHGqdAQqyP3kBSwcM/FMdgKPV/iRoISIKxJMKx1LUzNcl8BKdNOx6B8bp0VIyGfMVXUOW1qVXAxNEoVkMqDGyDR6I6dg1y/nRtmERIEBIzAhLZdm6BikQOZN6AwEGsEpmWPBxNYiCYAoo4THsCCXXsGk4gljBUKFKuk6NcJysxZROBkM7usutwOzR19Dg01fll6rLM3RCnoWyRWFfqUNEVsQYkxCjWgCzg43WlJopJqLZY5noQEoREUUIiW6hMZMUkzXfCmsmkieRoMGZsuFTColZcRZyQICQsD4l8Amc25kVIABrwYGeb7881Oi5PfMFrNjZ4lil7BQgJQoKWRPb9xlJXEBKEBCFhqS6ffWEJCUKCkMi+31jqCkKCkCAkLNXlsy8sIUFIEBLZ9xtLXUFIEBKEhKW6fPaFJSTUVhI/79ziW88Q6CReFc++6fGKYlGAkCAkaEkUS2+dpuckJAgJQmKaOl+x3JaQICQIiWLprdP0nIQEIUFITFPnK5bbEhKEBCFRLL11mp6TkCAkCIlp6nzFcltCgpA43lY/d0Ud/vd76tXiKExUIK1A52BcbSL9/Wd6LSsK50mMVr0sxy67Of3dtU1qTUVZhYnJugqk9xr98kNH8VJH0NKrnBMSY/qBrMS0Yo4XX7yqDu9dWk5QWJQRspPYL9uH8PNXBvDcvqBFVTih2A/523w3WX7GZVoSWXBVlmn//BV1atcnsTCYrKOA7ET24CsDuPuZXrUnqawfygRCYrxGIAu1vvvsUqxrrcA6X4VavJVp9iogK48/uzeA7z7dg9cPhyyzjUGGNUpInE4oGX7MqXRiw9UN8LV4ML/GOWX7PWRYeTxtkgqI70G2Y5Sd1v79uT681R2ZZI6z8nJCYqJqlZ28F9S4cM155fj4pdVqxyim4lZAtiV4+1gUT+8Zwf0v9uPIYFztas40rgKERDYNQ4YhX7yqHrdcUo1qwiIb6WbMubLl4vee7sEDL/WrTZCYJlSAkBCJZH5ELGlCHFcTJQmP1pc58N6lZcq5uaTBjboyO1x2xk0n0m46/i51KlbDvp4ofvvmMJ7cNYLhSDKjR5E6ddg0tVuahRMhIZV/86pqtQHtD7b2qa31Mk2yO9XZ9W4srnPhpndVqjkWsss151lkqmDhzjs2ksAf3hrBa4dCKpTZNRxXWyhmmmTbwf95ea1qD/c935fpZbPvPE37hX9L659ZPgR667om3HBBJf64J6DCXzs7wxlXdnr7uyUNLgUa3xwP3rOkDGc3uBgVyVjFyZ8oGysLBHYcDeOpt0awqyuC/b0xHBuOI5gFHCQMfulZJVi7vAJXnFOqrI9bH/Vbd0IVIZFqnGN3FRfz9BevDqp4uZiovcFETg2krtSO8+d61HBk5YISNJbbIZ9VeG1qL02do5OcyCARiUjCVEMA2Y29ayiBN/wChgD290bVZsrZ7sQudVHusaG1xYOPrKxWw0gZavDdDcjLG7QkToaE/F8a4muHw/jT2wE8tmMIHX2xSe3cLRvnLm1047wmNxbVudQu2i2VDrXTtkRLZNzLNL4CEokQcA9FUrusHxmI48hATA0ftnWEsOdYBP3BzHwM491BhowLa1y4bHEpbr64CgtrXcdPIyQIieONYawlMbYhCSzEZBUT9qFXB7F1f2DSs/DEnC1x6WgoS1kVDWUONJTbcV6zB4tqnagVa8NjU7M9vQ7dMv4N+faXMKQMGQZDSRwLJOAfiuOVgyEFBPlMINE9kvItJDN3L4xLH7EcZIj4V++uwzn1LsytdkLqZmwiJAiJCSExtsFIIxZIyKQbsTCycYJlYyVIOxXroqHcgaWNLsyvEV+HXQ1bxOfRWGE/pTFnk/9MOFfge3ggjoN9MfiH49jTHUHXcAIdvVEc7I9hMJzMaYiXSdlk9uy61nLccmkNljW5zzj1npAgJLKCxNgGKN9wv3tzGFv3B7GzM4KeQHzKYu4yVm6pTFkclV6bCt+K5eFxiIViU1ZKmUtXR+kQZW6bGs4IfHRt9Kir/RSgpf8/5nM5R5JhmjAMOY7+bgKmfKb+n/pMhgLyjR43TASjBoLRpPIVyI9YBRJqDMdS/+8LJjESTaJnJIGjg7FJWwKZAEGKIhqIpbC43oU1i1NT7b0ZLglASBASOUMifaF0Avk2FAeneNQP9MWU82wgVLhvwok6h3QMgYLTpsFu0+ASQOgnQkLOeQcQ78BDPh8LCYHAWEjI7++A4h1IyGcyzySWSB0TRupv05FkOr2EoQUMEmkSC2zVwhIFVZk9m00iJAiJSUNCMpDOEE0Y6ByKYyCYxNs9URWbFwtjd1dkUg7PbBq01c+VyJE4HZe3uLFyfgnmVzuVr0esrEwth5M1JCRUC/9Pf9uKD1t+nsTpHJeT6XjikZcJPWJa/373iIqQ9AUSarw9FE4qR1wkMXkH3GSesZiuleGSDKEqPamOL1aBRIkW1jpxyaISLG/yoNSt59VfQ0gQEnmxJDLpaGJtCBAkfNfRF1XAkKnCXUNx5bgbDhs4NhKfdOQkk2cppnPkXZmmcoeawyDO3AU1TrXeR8pKcKiZrnJOoRIhMQYSzZt2rDZN87lCiT3T8y2EJXGmMgs0ZOwejYtDL4GhUUiI5dETSCh4yO8CkoFQQsGjUNGU6awbsQ5kYlm5O+VgFQhIKFLCw+JDEN+CzCcRSFSODhvE3zJV094JCUJiyiyJXDtieqpxIJrE4f64coru6Awri0TgIT4QmWHYH0pm9HJars+R63XSmWXugXRweQlOQFDltWFetRMrRp2K8n95o1YcrVPV+TMtDyFBSMx4SGTamAUm4gMRmEgoMhWGFIAYyv8hf0v/pN92TYglMxqNkHkLEpFIhTzN4+FRiRTY9NSbkOkf6czp31X0ZPRNyVJXCgDiNxB/gYQe5SWpqfzmz1SvTM8jJAiJWQOJTBv9REMgiVpKOFOShEhTcynykXtx5kFIEBKERHH23Sl7akKCkCAkpqy7FeeNCAkxJfFf/i2+GzVGN5rwyTW1xdmS+dQFU4CQICRoSRSse82OjAkJQoKQmB19uWClICQICUKiYN1rdmRMSBAShMTs6MsFKwUhQUgQEgXrXrMjY0KCkCAkZkdfLlgpCAkl7cP+Nt8NDIFexxBowXpaEWdMSBAStCSKuANPxaMTEoQEITEVPa2I70FIEBKERBF34Kl4dEKCkCAkpqKnFfE9CAlC4njzve26JnyK724UcXcuzKMLJH66rV/tBWrhxOiGVP7FC0rwyTU1eN+5qT0gmaiALNLz0KsDuPf5PrzRGbGyIISE1L6swCTb7X3uijp87JLqvK64bOXWVaxlHw4n8es3hvGNX3epNUctnUw84r/D9yHLz5OQRiArMMnGsf9jdQ1uubRaLdvGZD0FZMOlH27txyPbB/Gm39IWRKryCYnxO4Hs+PSZy2tx0XyvWsqdafYrIHB4ek8Adz7doxYbnq4dyGac0oTE+FUiw49lTR5c56vAX6ysQrXXbum1Hmdcw83jA8kiwL3BJH6zcwjffqpH7WTONEYBQuLMzUFWer7inFJcfnYZbji/Qi39zjR7FAjGDNzzTC+2Hgji5Y4Qt2Qcr2oJicwb/JwqBzavbcLVy8rVMvFMxauAwOE/tg3ggZf61X6tTGdQgJDIrnmIc/OCuV7ccH6l8lfIdvZeh86hSHYyTvnZMqSQ/UhkR7QXDwTxn68PYk93VO01wjSBAoRESqCz6lxqQ5vu4czGo+KzaKl04vw5Hly1tEzNs5At6phmlgLCANky8Sfb+tUu7zuOhrPyOciGxLL72C4LWxsm8MuuNt/1lg+BSiTjnAY3/u3Z3qzCXjLsmFvlREuVA9e1VmB5s0dZF7KDFdP0KSCRire6onhy9zB2+SN4/UhY7eKeqeUgXwLzq134/BV12NsTxV1/6rFstIOQGG3H6Q2DZRLNYzuH8MBLA6pxyU7g2YTCpHEJNC6c51XDEtkBu77MjuYKJ9yO1PZ4TPlTQGZFhmOGmvD0VndE7da+/UgY2zpC6MrQKhz7NF6nrurt5lVVWLO4FE6bjp+93I/Nj/qzagf5K+H050RInASJdJVs3R/Ej15ITceVTXpzGbrKXKyFtS6c2+jGpYtK1Ca5zZUONe9CTFgnp3/n1ANk/9KBYALDEQMH+qI42BdD+9Ewnt4zgv5gMqc8ZVNjGVqsPqsEN6+qxoVzvcrPxBe8ZC4VhxuqUaUtiXQLE+tBNto91B/DQ68N4IX9IfVNJd9cuSSxIMrcuppv0VDuwFl1Tiyuc6nfz653oarEjiqC4xRpRe++QAJ9wQQO9cdxsD+Gt49FcKA3hoFQUlkLoZiRc72I5SeWg0D8vUvL0drihtvxzlCRkCAkjjfKkyFxcmuNxA1lwopX/LVDIXT0xxBL5AaMk/OWbyzZgXtOpQNzq52oK7Or90hqS+2YX+NEuVuH266jwmtTvo70Tt25wGqmXCOdfzCcxFAoqeYmiA9Bog+dQ3F0DsZxbCSB7pHUUYAg+ucriQV3Tr0blyzy4tKFpXjfsrLTvqtDSBASGUMifaJ8ez2zN4Andw3jre4oDg/EIH6MXIYjZ2r0YnnI26gChJpSOyo8NhU9EctjfrVT/V/+Luc55ceuwT56jfrMrqvPxYyW83Qd0DUN+XwdRawtwaRhmjAMIJY0EUsY6igQSCRNRBKpowBV/DtJA4gmDDUsEKtALDWxEgQM0iGDsaSyDOS8fCbRRDQTf9GSRhc+cF4FVs73otxjO6MmhAQhkTUk0hdIo5dvPZmII9AQK2NnZzif7fq0eYnl4RII2FOASANFgJD+zOPUUeLUIccytw1iQdtGoSEvrtlHoSHXqt/VZ5p6G1aOAoCkaapogABAOr2MtGS+gXR6+V2OAggFgaQJmaAk1oD8yDd/3DARjafyED+CwCEhkIgb6v9TkaQsi2qd+LN3VSnf0JIGt/ILZQpLQoKQyBkSJzdw6VQvHAgqYDzaPqQcavn+NpyKTjUb7iGgFGvrpndV4YO+CgUFgUUuiZAATFP7VdcdrR+0/DyJiXwS2TQw+ZaUSVkSint+XwBHBuPY3xtDfzAxKSdbNs8w288Va0o6ftoZLPNUVs4vUY7HpY1uFanIFQxjtSMkCIm8WRKn65Tiq5Ax9sG+qIrldw8nlJWx82hETRGWz/LplJvNcBALobnCoYYMy1s8aCq3K0evOHhbKh3Kf5PvREgQEgWHxNhGK0MSGbtLaLVnJI6+YBIjkaSa0Xd0MK6mDIsDT6AiHv98O0Pz3YEKlZ/4RWRSk9dpQ12pXb0jI5Gflionqktsap6JTFArcaWiPmJVFCoREoTElEIik4acnkEoE4XE6y+OUVnfQMAiR3m/REKHAhIZ1sSTMkcgFTEQp6L4QY4fTXPKZwnK0F8co3KUaIo4RqXTi4PV5dBT0RaHpiAg80KqvDYV2pX3YAQIEvJtqXDA6xJIpM6fzkRIjIXEhp2XmZrx7HRWyHTeO58+iUKVQwDSH0ricH8MPSMJjERTcwtkWvJwNIlIPDVFWYYv4bipjlEJQ45aJUkVjUhFLQQmhkBlNGKhPpdIhikhzVQJUh3+ndCpdH6ZVa4gINGS0ZCqRE3lngopAAAK60lEQVTkXJnC7HVqajKSzPuQ4YFEWOT/an6Hxwa3hHU9KQtBgFDltWccaSiUrmfKl5AgJGacJTGZjpAOW0rIMg2C1FyF1PsnKpwpEJAwpkBiFBZpOMhRzhsLifT8ijQs5ChwUP8ftRjk2z4dlk1bDunPptsSmIyeci0hQUjMKkhMtkPw+lMVICQADeajnW0rrtOaOdzAJ7k5DzlxkgKEBCFBS4JYOKMChAQhQUgQEoTEBG2Aw41RgYohusH+PPUK0JKgJUFLYur7XVHdkZAgJAiJouqyU/+whAQhQUhMfb8rqjsSEoQEIVFUXXbqH5aQEEjgsc423zrOk7iuifMkpr4Pzvg7EhKEBC2JGd9Np/cBCQlCgpCY3j444+9OSBAShMSM76bT+4CEBCFBSExvH5zxdyckCAlCYsZ30+l9QEKCkDjeAv9ubSM+e3nd9LZI3n3GKSB7qjywrR9//1jXjHu2qXoghkBHlf7CVXX42jWNU6U771MkCsgOYvc+34tv/6GnSJ64II/5uL/Nt9by8ySuX1GBb//5XO76XZA2VryZ7umO4ptPduNX7UPFW4jJPzkhIRrKXg0b3teADywvn7ykzGHWKPDw64P4+sOdaiFiCydCQipfFm69dnk5br+xRS3eykQFZM3PzzxwGI/ttLQVIQ2BkBAVZCHXBTUu/OtH5qK1xcMeQgXQ0RfDB+/ch95AwupqEBJjW8DKBV78y/q5agdvJmsqIKuFv3IwhDue6MazewPWFOHEUhMSY/WQJeA/dkk1Nl7doLaqZ7KeAl1Dcdz6qB+/3z2idkpn4nDjlDYgoLjl0mp8/sp61JfaC7qNHBvgzFJANnXe/Cs/Hts5zD1a36maX/vbfNdaPgQ6XlO9Zlk5vnhVPc6fSx/FzOrKhXka2Y913Xf3onvE8j6IkwUmJE7X5GTruoW1LvzNBxpx4Tyv2pqukJvTFqbpM9eJFDgyEMdLHUHc+ccevOmPTHS6Ff9OSExU6wKHC+Z58YnLarDmrFKCYiLBiuTvsuHym/4w/vHxLuzqiqiNmGWbQ6ZTFCAkMmkUsulta4sb61or8JGLqzmXIhPRZvA5PYEEHnx5AM/sDeD5fUG1TyrTaRUgJLJtHPVldly/olIBY0mDS+2SzTSzFRAGyKzJnZ1h/OLVQTyxaxgDIUvPosymwgiJbNRKn+u0azivyYMPnV+B1YtKMKfKyZBpLkIW+BqBQyhm4NVDIWw/ElbvYLzhD3NYkZ3uhER2ep14toRL51Y7sbjOiRsvqMKF8zxoqXRCnJ5M06vAvp4ofvvGMLYfDeO5fQEMhpLgqCKnOiEkcpLtNBfZdMDX4sWn1tTgqiVlHIrkU9wJ8pJ3LcT5KNbC3c/0qmnVTHlR4Df+Nt8HOE8iL1qemIn4LlbOL8HSJjdWzveiodyOhjIHSt06xAJhyl2BeNJEOGbgyGAc/qG4ik6In+HtY1Hle2CUIndtx7mSkMirnKfJTKZ4N5TZ0VjhwNwqJ85tdKu5F3OrHagpsU/FIxT9PaTzyxDixY4g9nRFIREKsRbkBazhCJ2QBaxgQqKA4p6StUzGctt11JTa0FThQIXbhnfN96o3UBfWONFU6UC52waX3dqWRiRuqKFDXyCB3d1RBYfdXREFhqMDcfW3WMKgj2FqGi8hMTU6Z3YXr1NXlsa8agdqS+0KHjJsqfTa1IzPUpcNpS4dHqcOibA4dA3iB7HN8OGL+AtkiJAwoDp3OG5iJJJUnV2OMiVaQpLycpUMIQ72xdA5FEc0YXDokFnTKeRZhEQh1c1H3mJ9lLlsavWsRvFrlDtQXWJDdYkdVV6bsjwqPTYFDbFAnPYUQJw2DXZb6jObphVspqiM/5OmiVhi9CeZOsoEpXDcQFSAEE2iZyQ1LOgPJjEQSqBrKIEDfVEFCIuv/JSPZlLIPFKQaNr0+hqY+jOFvBPzzq8CDpsGt0MgoKsZoAoMChS6WmmrzJ06ij9EzhVYuBw6PKNH+cxhA3RNUyFbsUbkqI9aJYZhImkC6aNppiyBqHT8hIlIQqwDQ81DiCdMBKIGRqIGgtEkQrGU5SDDhtiok1Feu07DI79KMLcCK0BIFFhgZk8Fil0BQqLYa5DPTwUKq4D2W39b6/s53CisysydChSxAoREEVceH50KTIUChMRUqMx7UIEiVoCQKOLK46NTgalQgJCYCpV5DypQxAoQEkVceXx0KjAVChASU6Ey70EFilcBDb/zb/FdwxBo8VYhn5wKFFYBQqKw+jJ3KlD0ChASRV+FLAAVKKwChERh9WXuVKDoFSAkir4KWQAqUFgFCInC6svcqUDRK0BIFH0VsgBUoLAKEBKF1Ze5U4FZoMAT/jbf1ZwnMQtqkkWgAgVSgJAokLDMlgrMFgUIidlSkywHFSiQAoREgYRltlRgtihASMyWmmQ5qECBFCAkCiQss6UCs0UBQmK21CTLQQUKooCGJ/1bfO9jCLQg6jJTKjALFCAkZkElsghUoLAKpIYbDV/dvkrXtRcKey/mTgWoQBEq8Li/zbdWILFc17UdRVgAPjIVoAIFVEDT8PPOLb71Wv1f72iwJcyuAt6LWVMBKlCECmjQ7uxsa/2cBpha08YdIQDuIiwHH5kKUIECKaBp2NS5xdemSf6NG9u3a4CvQPditlSAChShAhpwQ2eb72EFieaN7T8wgVuKsBx8ZCpABQqjwJDNTK48cscFbytING3c8RnAvKsw92KuVIAKFKECT9jigeuPfGt1OAWJTTvnwTQ6AKj/M1EBKmB1Bcwv+dtW/LOoMAoF5byUMOh5VpeG5acCVACmmdSXd31z+ZtjICHWxI6bYZo/BKBTJCpABayrgAls7WrzrU4rcHx4UbXp5Qq36XwdwALrysOSUwEqYGr4fNcW3/dOgYR80Lhpx1c107yDMlEBKmBVBbS3NW/0/M5bL5K5Uyqd4Kic97X2qrgBsSbmWVUilpsKWFiBJDRjrX/L+b8dq8Ep0YzGDe0f1zT8GwCbhcVi0amAFRX4TZVHv/7N25bHzggJ+WPThvYfQ8PNVlSJZaYCFlVgxNBwWfcW3ykve447L6Juw85Gu2a8KrywqGAsNhWwkgImoN3ib2v98XiFPu3kqeZNO1abMB+EiRYrqcWyUgHrKaD9o7+t9W9PV+4zzrBs3LRjvWaa9wHwWk84lpgKzHoFTAC/Ngxzffc/rQjmBAl5jbxxQ/vHNE37vwBqZr1kLCAVsI4ChqnhB7on9r/GhjuzGm68c7KpNW9qX2ea2k8BlFhHQ5aUCsxeBUyYP4uFvZ/u/87ZwxOVMuMXuuZ8dYcvqauhx4UTZcq/UwEqMGMVCMM0v+C/Y4VMc8goZQwJyW3Ol573GM7SO2HioybgyOgOPIkKUIGZosCrpq59pev21qezeaCsIKEyvulBW9OCJas1aLeaGt7NSVfZyM1zqcC0KLBfA+6OhD13ZTK8OPkJs4dEOofNT9mbIzXrTRMbAayYlqLzplSACpxJgZBp4rtRPfaNgS0XDeUqVe6QOA4LU2+KbF8NU/sQoN0IYGGuD8PrqAAVmLQCgwCehqb9Im46HultWzoy2RwnD4mTnkBWudJgrDENXA4NKwHUjq7E7YDG90EmW2G8ngrAhAEgaQJRzcSwppl7TRNPGiZe6C7pfwW3XZnIp0p5h8SJD2dqdZvfKLHFYp6E5ra7EnG+NJbP2mNellRAi5tmzGNLeEOJaEfFYCDfUDhZ1P8HKIHQY+a5v8IAAAAASUVORK5CYII="/> + </defs> + <style> + </style> + <use id="Layer 1" href="#img1" transform="matrix(1,0,0,1,.5,0)"/> +</svg> \ No newline at end of file diff --git a/dbrepo-ui/static/favicon_alt.ico b/dbrepo-ui/static/favicon_alt.ico deleted file mode 100644 index f8f591a5acbf4973a3626032997b322386ed2217..0000000000000000000000000000000000000000 Binary files a/dbrepo-ui/static/favicon_alt.ico and /dev/null differ diff --git a/dbrepo-ui/static/favicon_alt.png b/dbrepo-ui/static/favicon_alt.png deleted file mode 100644 index 32cfe969126f93df5632cbfb72a14845b840a3c7..0000000000000000000000000000000000000000 Binary files a/dbrepo-ui/static/favicon_alt.png and /dev/null differ diff --git a/dbrepo-ui/static/logo.png b/dbrepo-ui/static/logo.png index 3ba7132e7a579c28039e16acc3dce2c95f7504eb..568433e3de128371c7595bf8b330bac4831b58c4 100644 Binary files a/dbrepo-ui/static/logo.png and b/dbrepo-ui/static/logo.png differ diff --git a/dbrepo-ui/static/logo.psd b/dbrepo-ui/static/logo.psd new file mode 100644 index 0000000000000000000000000000000000000000..84defabf368b6978ee3dea9150057e75d9e0fab0 Binary files /dev/null and b/dbrepo-ui/static/logo.psd differ diff --git a/dbrepo-ui/static/logo.svg b/dbrepo-ui/static/logo.svg new file mode 100644 index 0000000000000000000000000000000000000000..f45c858124cd0d532f12c3d96e8fd65dc939ad60 --- /dev/null +++ b/dbrepo-ui/static/logo.svg @@ -0,0 +1,17 @@ +<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 265" width="1024" height="265"> + <title>logo</title> + <defs> + <image width="265" height="265" id="img1" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQkAAAEJCAYAAACHaNJkAAAAAXNSR0IArs4c6QAAIABJREFUeF7tnQl0XMWZ7//39t7a9807BhtjtYFgDMaHAEkgwSYEMnjeJGTIe1leMslLXhbbySzH8GYmB4vJy0wWmMAMZIFkQsgMJEAWSCBhMWA2ywYb40Xe1JK1S70v9773VauNbMtWd6tbUuv+6xz5yq176976V9Wvv/q+ulUaCpk2m3pt+K0Suy3kdiThMGDTC3k75k0FrKCAFjfNqN2e9NiM6KH+WAB3XxQvZLm1fGde/7X2RfakucrU9eWaaS42YbZA06pgwg3Ame/7MT8qYD0FzCSgxwBzyDQ1v67hsAns0DS0dw5Et+UbGpOHxE0P2hrOWvJu3cD1gHYDgLnWqzSWmArMEAU0DJuG9kdoxi+iWvzhgS0XDU32yXKGxLLNO52DYeNaE9pXAHPNZB+E11MBKpB3BQLQsNmh4b5Dt/sGcs09e0hsfsreHK690oSxGdBWA8g+j1yfltdRASqQiwIdMM17Inr8e7lYFll18AWbD7ijoZF/hoZPALDn8rS8hgpQgelRwAS22jT9s0e3LN+ezRNkDInGja9frGn6fTCxLJsb8FwqQAVmlAIRaPiCf4vvnkyfKgNImFrzxp3vNWH+ElARCiYqQAWKXAFNww+8Ic9n9n7n7OhERZkAEqbWtGHHp6BhC4DKiTLj36kAFSgaBQxAu9cWH/nCkW+tDp/pqc8IiaYN2z8MTbufFkTRVDwflApko4AJ4BF/W+uNgCa/j5tOC4mWjdvfY0B7AEBDNnfluVSAChSXAia0W7vaWm/LChItG7fPMaC/Bpi1xVVcPi0VoAI5KGCaMNd3ta14aLxrx7EkxFG54z4TuCWHm/ESKkAFilEBDUdtmn7FkduX7z358U+BRNOG9k9Dw10A+DJWMVY2n5kK5KqAhv/yu/vW47YrE2OzOAES877WXhU38AqAhbneh9dRASpQtApEDJhXdreteOG0kGje2L7JBG4v2iLywakAFZisAi/7B2Orx75JetySqN24u8yB2OsAFk32LryeClCB4lXAhHnTWCfmcUg0btj+l5qm3UdfRPFWLp+cCuRDAQ14rLPNty6d13FING1sFytiRT5uwjyoABUoXgU0II5krLnzmxf1SikUJJo27ZwH0+jga9/FW7F8ciqQZwVu9rf5ZDLlKCRSYc/v5/kmzI4KUIFiVcDE/f6O3R/Hz9cnU5bExva7AXyqWMvD56YCVCDPCpjYnXRoVxz7Rmt3GhKv/v8XPS7I822YHRWgAsWrgGHAvEzmTIz6JNqHYKK8eMvDJ6cCVCDfCmgaPtq5xfcTreXru2qMZFx5MZmoABWgAscVMM2/8d+x4htay9dfP8dI6m9RGipABajACQpo+JZ/i+/LWtOG7RdC0+R9DSYqQAWowFgF7vG3+T6tNXx1+ypd1054oYM6UQEqQAVkHczOLb7/TkiwLVABKjCuAhrww84238cJCTYQKkAFCAm2ASpABbJXgJZE9prxCipgKQUICUtVNwtLBbJXgJDIXjNeQQUspQAhYanqZmGpQPYKEBLZa8YrqIClFCAkLFXdLCwVyEEBTfuRf0vrLZwnkYN2vIQKWEIBQsIS1cxCUoHcFSAkcteOV1IBSyhASFiimllIKpC7AoRE7trxSipgCQUICUtUMwtJBXJXgJDIXTteSQWsoYD5Y3/bir9kCNQatc1SUoEcFCAkchCNl1ABKylASFiptllWKpCDAoREDqLxEipgJQUICSvVNstKBXJQgJDIQTReQgWspAAhYaXaZlmpQA4KEBI5iDZ9l9h0wOPQ1U+JS0eZ2wavU0elxwaPU1e/exwaKr12VHttKPfYUF9qh9uhw+3Q1NFl1+By6HDaNDhsGnQN6sema9DkKP8ASJomDAMwTBNJE+r3pGEikjAQTZiIxk3EkgZCMQPhmImBUAJ9wST6gwkMR5KIxE0Eokn190DUwGAo9XtQnW8gHDdgmNOnJe+coQIm7vff4fsY50lkqNdUnSadV35KXQIDG0qcOurL7KrT15XaUV1iU/9vrnCirsyuflw2DU67/Oiq009nEpgkDCASTwFFwNHRF0NfMIFjIwn1/56RFFRGIkkMhAQqKeDI+QnSYzqr78R7H4fExu2X6NC2zpwns9aTCBCaKxxYVOfCsiY3FtU6UelJwSANitpSu7IUphsA+aoZAclwxFBWx0AwqSwL+V3gsa8nije7Ijg6EMeh/hihkS/Rc8mHkMhFtclfU+Gx4aw6F86ud+GjF1fj3Ca3shaYTlVgKJzE9iNh/OaNYWw7GMTBvpgaspgcqkxNcyEkCqezDO1ddh1lLh0Lap2YU+lUVsLSRrcCREulQw0pmDJXQKyPA70x7O2JKgvj5YMhdA7FcXQghv5QEnFxnjDlVwFCIr96Sm4yHJhX7cQli0pw8YISzK1yKCjUlNgJhTzLLf6L3kACRwZSwHjTH8FLHUEcHYzn+U4Wzo6QyF/li89A4LBqYQlWLfCqoURDuUNFFGaLHyF/auU3Jxl6pKMru7sieLEjiG0dIew9FlXRGA5NJqE3ITEJ8QDMqXLgovklWDnfi7WtFSryMBpBnFzGvHrSCkiE5O1jUWw/HMbPXx1Qw5TukTiBkb2yD/jbfDdrDYxuZCydQKDaa8d5zW5cs6wcVy8rV+FI+hcylnBKTxQ/RvvRMLbuD+Kpt0bw2uGwCrUyZawAIZGxVICyEtZfWIW1vgpcPN+r5i0wFYcCMvVC5mm8sD+IX7UP4cndI2puBtOEChASE0o06oxcuaAEW25owTkNrkwu4TkzWAGxLp7ZG8C9z/UpWDCdUQFC4kzyiMNR4HD1sjJ8ZGU1ZH4D0+xRQKIj3/7DMfx+9wh2dUUYQh2/agmJ0zX5crcN7z+vHF9+bz3mVDkZoZg9bDihJDK3QuZc3Pt8H+57vm+WlnJSxSIkxpNPfA2b1zaqiIXAgskaCrT9rhvfe7qHFsWJ1U1InNz8JVJx23XNuHZ5OSMW1mDD8VLKfIqfbuvHHb/rxrFAguHSlDKExNh+IBOivvGhZqxdXsH5DhYDRLq44qf40Qt9+Pfn+tQwxPLJxE/8d/g+ynkSkPUUgFsurcFfv79RvW3JZF0FukcSuPuZXtz1xx7ripAuOSGRUsKua1i10It/WT8XzZUONgwqgJGIgQ9/fz92doatrQYhkap/efnq5lXV+Mr76hUwmKiAKPAPj3fhX//UY+0VtAiJVGeQtzX/4fomLG/2sHdQgeMK/OntAP72kU71arplEyGRqvqPrarGlhtbLNsOWPDxFRDHpYREf/xiv3UlIiRSdb/h6gZ86T311m0ILPm4CshanD98IRUStWwiJFJVv/HqBnzxqnqGPS3bE8YvOCGhdPmpv833EcuHQC+a78Un19Ri7fJytbQ8ExWQiVU/e2UA9zzTq97rsHAiJNKVX+bW8ak1tWquhCwew2RNBeSV8sMDMTy+cwi3/6abU7RpSZzYEeSdjU9eVqPe+GyqcHD4YUFOHOiN4p5n+xQkZI8QJg43TmkDMtpYs7gUn7m8FhfO8/IFL4v0kljCxBO7hnHXn3qx42iYFsQ79c7hxun6gOyD8Z5zy9B2YwtBMctBIRbDPz3RjfutHOo8fR0TEhO1f1n1+trlFWptCdk3g2tZTqRYcfxdNviRHcJ+sLVPrX15kC9zna7iCIlMmrSAYX61E1csKcW61gq0tnjUpr1MxaeAbCcoy+3LOpeyM9ib/rC1p11PXIWExMQapc6QRXDLXDYsaXThynPKFCwW13O9y0z1m+7zZAUq2ZPj4e1DeH5fAPt7owhGubP5RPViQvuPrrbWv7D8PAlfi0fNj5B4eKYrKMumO+fP8ajFaZY0uHF2gwtVXjtcds6zmKjhTcXfpR5lC0DxN8g+oi8dCGJ3dzTj+hXr0TfHA8MAXjscmopHnpH3ICRGq+Vr1zSoBW/vebYXf9wTUDtcZ5qkMcnOXWtby3Fuo0etpr2o1kVYZCpgns+TV7w7+qJ4qzuKZ/cGVKQi28lQspu7vOz3V++uU1sH/v3jfsuuUkVIjDbQ/3NdEz5xWa3al+G5fQF856keZZrKxJpMk7xi7nFqaCx3KEhI+HT1ohLMr3FCVrxiKowCUkfD4aTafEfWfpAf2blLLAiBfTZb/MmQUurtsxL+nutFicuGn73cj82PEhKWH24IJGRadjoNhpL4ybZ+/HTbAPZN4jXhtB9Dpn1L45OhiewqzjQ5BWTfDHlD84GXBtTuXGItDIWTk8pU1ja9dV2T2pEtvTKZWCWEBH0SqmGdDIl0a5NGcv9LfXh2b1CNSwUek0kCjdoSO5Y0unHhPA+aK5yYV+1ApceOujI7Kr02uO2a5d8fEQiEYiYC0aTyKwyEkjg2HMeBvpiKTOw5FsFIJIlk5qPCU6pN6qLUpePyxWW4bHEJPrSiUuk/NhESAIcbY4YbYy2JsQ1FGuxgOKm+rR7ZPoSn9wTQG4hPqoGm85chSolLV5O1FCQ8Nsg7JLLPhwxbFtY61XsksilQCiA6nLPEMSoLzgajSQWDruEUCI4MxJSFIGCQDjoSTcI/GFfHSNzMyyxImVE7t8qpLAZZsnDNWaUoc9vGnYJPSBASx1lwOktiLCxk7Htw1CEm41+Z2390MD4Zw2Lca2VB3lKXTX3LSbRETF/xdcgmxfJZQ7lDOUprSmwKHvJ3Ocq8DQHOTJnsJSFH+bYPx1MWgQwHpNP1jCRwaCCmjvJZIGpgOCIQMNTfU58ls/IHZVIJoqv4ij64olJFpWTYN9FGz4QEIZEVJMZriO1HwvjdrmHs7Izgjc7UuFhm8mXjLMukgWdzjkBDvPMyhCl366gpTe14LlaLdJTU8dTf5Rxdk/NSd5MAj1hRhinf4IBhmEgYprKg5Cg/pgHEkqlveLEEBkKJ0WMS0cT06iDWWUO5XVkNMltW/ELnNLiz2omNkBBImD/ralvx3+i4PMlxmU2nlI40HDEgbw/2h1LDkhcPBFUIri+QUJ2JqfAKyLwVsa7ObXTjssWlWNrgVpCQyFKu0SVCgpCYtCVxctMXC0K+TY8MxNHRH8Orh0IKHi8fDCm/xnRaGIXvplN/B7GMZEh2XrMbqxeVQt6zmVslwzGX8u1MNhEShETeIXG6RinzL3oDCRzqjytoyJj8YF8M/cEkegJxNS4PRAxaHScJKE5GcdiKj0acuo0VDiyskYhQyrErE9dkOwRZB6QQC4oREmMg0fLV9ksNHc9PlrzFen0mjst8lk08++LJl52idvkj6ByMqWXbxdqQ9wkUNKJJFXK1ymhFrAKJMggMBAriWxFrQIYPEu1ZMAqHlkrHlDlnCQlCYsosiTMBRoYg4reQ2YGhWOpHGqdAQqyP3kBSwcM/FMdgKPV/iRoISIKxJMKx1LUzNcl8BKdNOx6B8bp0VIyGfMVXUOW1qVXAxNEoVkMqDGyDR6I6dg1y/nRtmERIEBIzAhLZdm6BikQOZN6AwEGsEpmWPBxNYiCYAoo4THsCCXXsGk4gljBUKFKuk6NcJysxZROBkM7usutwOzR19Dg01fll6rLM3RCnoWyRWFfqUNEVsQYkxCjWgCzg43WlJopJqLZY5noQEoREUUIiW6hMZMUkzXfCmsmkieRoMGZsuFTColZcRZyQICQsD4l8Amc25kVIABrwYGeb7881Oi5PfMFrNjZ4lil7BQgJQoKWRPb9xlJXEBKEBCFhqS6ffWEJCUKCkMi+31jqCkKCkCAkLNXlsy8sIUFIEBLZ9xtLXUFIEBKEhKW6fPaFJSTUVhI/79ziW88Q6CReFc++6fGKYlGAkCAkaEkUS2+dpuckJAgJQmKaOl+x3JaQICQIiWLprdP0nIQEIUFITFPnK5bbEhKEBCFRLL11mp6TkCAkCIlp6nzFcltCgpA43lY/d0Ud/vd76tXiKExUIK1A52BcbSL9/Wd6LSsK50mMVr0sxy67Of3dtU1qTUVZhYnJugqk9xr98kNH8VJH0NKrnBMSY/qBrMS0Yo4XX7yqDu9dWk5QWJQRspPYL9uH8PNXBvDcvqBFVTih2A/523w3WX7GZVoSWXBVlmn//BV1atcnsTCYrKOA7ET24CsDuPuZXrUnqawfygRCYrxGIAu1vvvsUqxrrcA6X4VavJVp9iogK48/uzeA7z7dg9cPhyyzjUGGNUpInE4oGX7MqXRiw9UN8LV4ML/GOWX7PWRYeTxtkgqI70G2Y5Sd1v79uT681R2ZZI6z8nJCYqJqlZ28F9S4cM155fj4pdVqxyim4lZAtiV4+1gUT+8Zwf0v9uPIYFztas40rgKERDYNQ4YhX7yqHrdcUo1qwiIb6WbMubLl4vee7sEDL/WrTZCYJlSAkBCJZH5ELGlCHFcTJQmP1pc58N6lZcq5uaTBjboyO1x2xk0n0m46/i51KlbDvp4ofvvmMJ7cNYLhSDKjR5E6ddg0tVuahRMhIZV/86pqtQHtD7b2qa31Mk2yO9XZ9W4srnPhpndVqjkWsss151lkqmDhzjs2ksAf3hrBa4dCKpTZNRxXWyhmmmTbwf95ea1qD/c935fpZbPvPE37hX9L659ZPgR667om3HBBJf64J6DCXzs7wxlXdnr7uyUNLgUa3xwP3rOkDGc3uBgVyVjFyZ8oGysLBHYcDeOpt0awqyuC/b0xHBuOI5gFHCQMfulZJVi7vAJXnFOqrI9bH/Vbd0IVIZFqnGN3FRfz9BevDqp4uZiovcFETg2krtSO8+d61HBk5YISNJbbIZ9VeG1qL02do5OcyCARiUjCVEMA2Y29ayiBN/wChgD290bVZsrZ7sQudVHusaG1xYOPrKxWw0gZavDdDcjLG7QkToaE/F8a4muHw/jT2wE8tmMIHX2xSe3cLRvnLm1047wmNxbVudQu2i2VDrXTtkRLZNzLNL4CEokQcA9FUrusHxmI48hATA0ftnWEsOdYBP3BzHwM491BhowLa1y4bHEpbr64CgtrXcdPIyQIieONYawlMbYhCSzEZBUT9qFXB7F1f2DSs/DEnC1x6WgoS1kVDWUONJTbcV6zB4tqnagVa8NjU7M9vQ7dMv4N+faXMKQMGQZDSRwLJOAfiuOVgyEFBPlMINE9kvItJDN3L4xLH7EcZIj4V++uwzn1LsytdkLqZmwiJAiJCSExtsFIIxZIyKQbsTCycYJlYyVIOxXroqHcgaWNLsyvEV+HXQ1bxOfRWGE/pTFnk/9MOFfge3ggjoN9MfiH49jTHUHXcAIdvVEc7I9hMJzMaYiXSdlk9uy61nLccmkNljW5zzj1npAgJLKCxNgGKN9wv3tzGFv3B7GzM4KeQHzKYu4yVm6pTFkclV6bCt+K5eFxiIViU1ZKmUtXR+kQZW6bGs4IfHRt9Kir/RSgpf8/5nM5R5JhmjAMOY7+bgKmfKb+n/pMhgLyjR43TASjBoLRpPIVyI9YBRJqDMdS/+8LJjESTaJnJIGjg7FJWwKZAEGKIhqIpbC43oU1i1NT7b0ZLglASBASOUMifaF0Avk2FAeneNQP9MWU82wgVLhvwok6h3QMgYLTpsFu0+ASQOgnQkLOeQcQ78BDPh8LCYHAWEjI7++A4h1IyGcyzySWSB0TRupv05FkOr2EoQUMEmkSC2zVwhIFVZk9m00iJAiJSUNCMpDOEE0Y6ByKYyCYxNs9URWbFwtjd1dkUg7PbBq01c+VyJE4HZe3uLFyfgnmVzuVr0esrEwth5M1JCRUC/9Pf9uKD1t+nsTpHJeT6XjikZcJPWJa/373iIqQ9AUSarw9FE4qR1wkMXkH3GSesZiuleGSDKEqPamOL1aBRIkW1jpxyaISLG/yoNSt59VfQ0gQEnmxJDLpaGJtCBAkfNfRF1XAkKnCXUNx5bgbDhs4NhKfdOQkk2cppnPkXZmmcoeawyDO3AU1TrXeR8pKcKiZrnJOoRIhMQYSzZt2rDZN87lCiT3T8y2EJXGmMgs0ZOwejYtDL4GhUUiI5dETSCh4yO8CkoFQQsGjUNGU6awbsQ5kYlm5O+VgFQhIKFLCw+JDEN+CzCcRSFSODhvE3zJV094JCUJiyiyJXDtieqpxIJrE4f64coru6Awri0TgIT4QmWHYH0pm9HJars+R63XSmWXugXRweQlOQFDltWFetRMrRp2K8n95o1YcrVPV+TMtDyFBSMx4SGTamAUm4gMRmEgoMhWGFIAYyv8hf0v/pN92TYglMxqNkHkLEpFIhTzN4+FRiRTY9NSbkOkf6czp31X0ZPRNyVJXCgDiNxB/gYQe5SWpqfzmz1SvTM8jJAiJWQOJTBv9REMgiVpKOFOShEhTcynykXtx5kFIEBKERHH23Sl7akKCkCAkpqy7FeeNCAkxJfFf/i2+GzVGN5rwyTW1xdmS+dQFU4CQICRoSRSse82OjAkJQoKQmB19uWClICQICUKiYN1rdmRMSBAShMTs6MsFKwUhQUgQEgXrXrMjY0KCkCAkZkdfLlgpCAkl7cP+Nt8NDIFexxBowXpaEWdMSBAStCSKuANPxaMTEoQEITEVPa2I70FIEBKERBF34Kl4dEKCkCAkpqKnFfE9CAlC4njzve26JnyK724UcXcuzKMLJH66rV/tBWrhxOiGVP7FC0rwyTU1eN+5qT0gmaiALNLz0KsDuPf5PrzRGbGyIISE1L6swCTb7X3uijp87JLqvK64bOXWVaxlHw4n8es3hvGNX3epNUctnUw84r/D9yHLz5OQRiArMMnGsf9jdQ1uubRaLdvGZD0FZMOlH27txyPbB/Gm39IWRKryCYnxO4Hs+PSZy2tx0XyvWsqdafYrIHB4ek8Adz7doxYbnq4dyGac0oTE+FUiw49lTR5c56vAX6ysQrXXbum1Hmdcw83jA8kiwL3BJH6zcwjffqpH7WTONEYBQuLMzUFWer7inFJcfnYZbji/Qi39zjR7FAjGDNzzTC+2Hgji5Y4Qt2Qcr2oJicwb/JwqBzavbcLVy8rVMvFMxauAwOE/tg3ggZf61X6tTGdQgJDIrnmIc/OCuV7ccH6l8lfIdvZeh86hSHYyTvnZMqSQ/UhkR7QXDwTxn68PYk93VO01wjSBAoRESqCz6lxqQ5vu4czGo+KzaKl04vw5Hly1tEzNs5At6phmlgLCANky8Sfb+tUu7zuOhrPyOciGxLL72C4LWxsm8MuuNt/1lg+BSiTjnAY3/u3Z3qzCXjLsmFvlREuVA9e1VmB5s0dZF7KDFdP0KSCRire6onhy9zB2+SN4/UhY7eKeqeUgXwLzq134/BV12NsTxV1/6rFstIOQGG3H6Q2DZRLNYzuH8MBLA6pxyU7g2YTCpHEJNC6c51XDEtkBu77MjuYKJ9yO1PZ4TPlTQGZFhmOGmvD0VndE7da+/UgY2zpC6MrQKhz7NF6nrurt5lVVWLO4FE6bjp+93I/Nj/qzagf5K+H050RInASJdJVs3R/Ej15ITceVTXpzGbrKXKyFtS6c2+jGpYtK1Ca5zZUONe9CTFgnp3/n1ANk/9KBYALDEQMH+qI42BdD+9Ewnt4zgv5gMqc8ZVNjGVqsPqsEN6+qxoVzvcrPxBe8ZC4VhxuqUaUtiXQLE+tBNto91B/DQ68N4IX9IfVNJd9cuSSxIMrcuppv0VDuwFl1Tiyuc6nfz653oarEjiqC4xRpRe++QAJ9wQQO9cdxsD+Gt49FcKA3hoFQUlkLoZiRc72I5SeWg0D8vUvL0drihtvxzlCRkCAkjjfKkyFxcmuNxA1lwopX/LVDIXT0xxBL5AaMk/OWbyzZgXtOpQNzq52oK7Or90hqS+2YX+NEuVuH266jwmtTvo70Tt25wGqmXCOdfzCcxFAoqeYmiA9Bog+dQ3F0DsZxbCSB7pHUUYAg+ucriQV3Tr0blyzy4tKFpXjfsrLTvqtDSBASGUMifaJ8ez2zN4Andw3jre4oDg/EIH6MXIYjZ2r0YnnI26gChJpSOyo8NhU9EctjfrVT/V/+Luc55ceuwT56jfrMrqvPxYyW83Qd0DUN+XwdRawtwaRhmjAMIJY0EUsY6igQSCRNRBKpowBV/DtJA4gmDDUsEKtALDWxEgQM0iGDsaSyDOS8fCbRRDQTf9GSRhc+cF4FVs73otxjO6MmhAQhkTUk0hdIo5dvPZmII9AQK2NnZzif7fq0eYnl4RII2FOASANFgJD+zOPUUeLUIccytw1iQdtGoSEvrtlHoSHXqt/VZ5p6G1aOAoCkaapogABAOr2MtGS+gXR6+V2OAggFgaQJmaAk1oD8yDd/3DARjafyED+CwCEhkIgb6v9TkaQsi2qd+LN3VSnf0JIGt/ILZQpLQoKQyBkSJzdw6VQvHAgqYDzaPqQcavn+NpyKTjUb7iGgFGvrpndV4YO+CgUFgUUuiZAATFP7VdcdrR+0/DyJiXwS2TQw+ZaUSVkSint+XwBHBuPY3xtDfzAxKSdbNs8w288Va0o6ftoZLPNUVs4vUY7HpY1uFanIFQxjtSMkCIm8WRKn65Tiq5Ax9sG+qIrldw8nlJWx82hETRGWz/LplJvNcBALobnCoYYMy1s8aCq3K0evOHhbKh3Kf5PvREgQEgWHxNhGK0MSGbtLaLVnJI6+YBIjkaSa0Xd0MK6mDIsDT6AiHv98O0Pz3YEKlZ/4RWRSk9dpQ12pXb0jI5Gflionqktsap6JTFArcaWiPmJVFCoREoTElEIik4acnkEoE4XE6y+OUVnfQMAiR3m/REKHAhIZ1sSTMkcgFTEQp6L4QY4fTXPKZwnK0F8co3KUaIo4RqXTi4PV5dBT0RaHpiAg80KqvDYV2pX3YAQIEvJtqXDA6xJIpM6fzkRIjIXEhp2XmZrx7HRWyHTeO58+iUKVQwDSH0ricH8MPSMJjERTcwtkWvJwNIlIPDVFWYYv4bipjlEJQ45aJUkVjUhFLQQmhkBlNGKhPpdIhikhzVQJUh3+ndCpdH6ZVa4gINGS0ZCqRE3lngopAAAK60lEQVTkXJnC7HVqajKSzPuQ4YFEWOT/an6Hxwa3hHU9KQtBgFDltWccaSiUrmfKl5AgJGacJTGZjpAOW0rIMg2C1FyF1PsnKpwpEJAwpkBiFBZpOMhRzhsLifT8ijQs5ChwUP8ftRjk2z4dlk1bDunPptsSmIyeci0hQUjMKkhMtkPw+lMVICQADeajnW0rrtOaOdzAJ7k5DzlxkgKEBCFBS4JYOKMChAQhQUgQEoTEBG2Aw41RgYohusH+PPUK0JKgJUFLYur7XVHdkZAgJAiJouqyU/+whAQhQUhMfb8rqjsSEoQEIVFUXXbqH5aQEEjgsc423zrOk7iuifMkpr4Pzvg7EhKEBC2JGd9Np/cBCQlCgpCY3j444+9OSBAShMSM76bT+4CEBCFBSExvH5zxdyckCAlCYsZ30+l9QEKCkDjeAv9ubSM+e3nd9LZI3n3GKSB7qjywrR9//1jXjHu2qXoghkBHlf7CVXX42jWNU6U771MkCsgOYvc+34tv/6GnSJ64II/5uL/Nt9by8ySuX1GBb//5XO76XZA2VryZ7umO4ptPduNX7UPFW4jJPzkhIRrKXg0b3teADywvn7ykzGHWKPDw64P4+sOdaiFiCydCQipfFm69dnk5br+xRS3eykQFZM3PzzxwGI/ttLQVIQ2BkBAVZCHXBTUu/OtH5qK1xcMeQgXQ0RfDB+/ch95AwupqEBJjW8DKBV78y/q5agdvJmsqIKuFv3IwhDue6MazewPWFOHEUhMSY/WQJeA/dkk1Nl7doLaqZ7KeAl1Dcdz6qB+/3z2idkpn4nDjlDYgoLjl0mp8/sp61JfaC7qNHBvgzFJANnXe/Cs/Hts5zD1a36maX/vbfNdaPgQ6XlO9Zlk5vnhVPc6fSx/FzOrKhXka2Y913Xf3onvE8j6IkwUmJE7X5GTruoW1LvzNBxpx4Tyv2pqukJvTFqbpM9eJFDgyEMdLHUHc+ccevOmPTHS6Ff9OSExU6wKHC+Z58YnLarDmrFKCYiLBiuTvsuHym/4w/vHxLuzqiqiNmGWbQ6ZTFCAkMmkUsulta4sb61or8JGLqzmXIhPRZvA5PYEEHnx5AM/sDeD5fUG1TyrTaRUgJLJtHPVldly/olIBY0mDS+2SzTSzFRAGyKzJnZ1h/OLVQTyxaxgDIUvPosymwgiJbNRKn+u0azivyYMPnV+B1YtKMKfKyZBpLkIW+BqBQyhm4NVDIWw/ElbvYLzhD3NYkZ3uhER2ep14toRL51Y7sbjOiRsvqMKF8zxoqXRCnJ5M06vAvp4ofvvGMLYfDeO5fQEMhpLgqCKnOiEkcpLtNBfZdMDX4sWn1tTgqiVlHIrkU9wJ8pJ3LcT5KNbC3c/0qmnVTHlR4Df+Nt8HOE8iL1qemIn4LlbOL8HSJjdWzveiodyOhjIHSt06xAJhyl2BeNJEOGbgyGAc/qG4ik6In+HtY1Hle2CUIndtx7mSkMirnKfJTKZ4N5TZ0VjhwNwqJ85tdKu5F3OrHagpsU/FIxT9PaTzyxDixY4g9nRFIREKsRbkBazhCJ2QBaxgQqKA4p6StUzGctt11JTa0FThQIXbhnfN96o3UBfWONFU6UC52waX3dqWRiRuqKFDXyCB3d1RBYfdXREFhqMDcfW3WMKgj2FqGi8hMTU6Z3YXr1NXlsa8agdqS+0KHjJsqfTa1IzPUpcNpS4dHqcOibA4dA3iB7HN8OGL+AtkiJAwoDp3OG5iJJJUnV2OMiVaQpLycpUMIQ72xdA5FEc0YXDokFnTKeRZhEQh1c1H3mJ9lLlsavWsRvFrlDtQXWJDdYkdVV6bsjwqPTYFDbFAnPYUQJw2DXZb6jObphVspqiM/5OmiVhi9CeZOsoEpXDcQFSAEE2iZyQ1LOgPJjEQSqBrKIEDfVEFCIuv/JSPZlLIPFKQaNr0+hqY+jOFvBPzzq8CDpsGt0MgoKsZoAoMChS6WmmrzJ06ij9EzhVYuBw6PKNH+cxhA3RNUyFbsUbkqI9aJYZhImkC6aNppiyBqHT8hIlIQqwDQ81DiCdMBKIGRqIGgtEkQrGU5SDDhtiok1Feu07DI79KMLcCK0BIFFhgZk8Fil0BQqLYa5DPTwUKq4D2W39b6/s53CisysydChSxAoREEVceH50KTIUChMRUqMx7UIEiVoCQKOLK46NTgalQgJCYCpV5DypQxAoQEkVceXx0KjAVChASU6Ey70EFilcBDb/zb/FdwxBo8VYhn5wKFFYBQqKw+jJ3KlD0ChASRV+FLAAVKKwChERh9WXuVKDoFSAkir4KWQAqUFgFCInC6svcqUDRK0BIFH0VsgBUoLAKEBKF1Ze5U4FZoMAT/jbf1ZwnMQtqkkWgAgVSgJAokLDMlgrMFgUIidlSkywHFSiQAoREgYRltlRgtihASMyWmmQ5qECBFCAkCiQss6UCs0UBQmK21CTLQQUKooCGJ/1bfO9jCLQg6jJTKjALFCAkZkElsghUoLAKpIYbDV/dvkrXtRcKey/mTgWoQBEq8Li/zbdWILFc17UdRVgAPjIVoAIFVEDT8PPOLb71Wv1f72iwJcyuAt6LWVMBKlCECmjQ7uxsa/2cBpha08YdIQDuIiwHH5kKUIECKaBp2NS5xdemSf6NG9u3a4CvQPditlSAChShAhpwQ2eb72EFieaN7T8wgVuKsBx8ZCpABQqjwJDNTK48cscFbytING3c8RnAvKsw92KuVIAKFKECT9jigeuPfGt1OAWJTTvnwTQ6AKj/M1EBKmB1Bcwv+dtW/LOoMAoF5byUMOh5VpeG5acCVACmmdSXd31z+ZtjICHWxI6bYZo/BKBTJCpABayrgAls7WrzrU4rcHx4UbXp5Qq36XwdwALrysOSUwEqYGr4fNcW3/dOgYR80Lhpx1c107yDMlEBKmBVBbS3NW/0/M5bL5K5Uyqd4Kic97X2qrgBsSbmWVUilpsKWFiBJDRjrX/L+b8dq8Ep0YzGDe0f1zT8GwCbhcVi0amAFRX4TZVHv/7N25bHzggJ+WPThvYfQ8PNVlSJZaYCFlVgxNBwWfcW3ykve447L6Juw85Gu2a8KrywqGAsNhWwkgImoN3ib2v98XiFPu3kqeZNO1abMB+EiRYrqcWyUgHrKaD9o7+t9W9PV+4zzrBs3LRjvWaa9wHwWk84lpgKzHoFTAC/Ngxzffc/rQjmBAl5jbxxQ/vHNE37vwBqZr1kLCAVsI4ChqnhB7on9r/GhjuzGm68c7KpNW9qX2ea2k8BlFhHQ5aUCsxeBUyYP4uFvZ/u/87ZwxOVMuMXuuZ8dYcvqauhx4UTZcq/UwEqMGMVCMM0v+C/Y4VMc8goZQwJyW3Ol573GM7SO2HioybgyOgOPIkKUIGZosCrpq59pev21qezeaCsIKEyvulBW9OCJas1aLeaGt7NSVfZyM1zqcC0KLBfA+6OhD13ZTK8OPkJs4dEOofNT9mbIzXrTRMbAayYlqLzplSACpxJgZBp4rtRPfaNgS0XDeUqVe6QOA4LU2+KbF8NU/sQoN0IYGGuD8PrqAAVmLQCgwCehqb9Im46HultWzoy2RwnD4mTnkBWudJgrDENXA4NKwHUjq7E7YDG90EmW2G8ngrAhAEgaQJRzcSwppl7TRNPGiZe6C7pfwW3XZnIp0p5h8SJD2dqdZvfKLHFYp6E5ra7EnG+NJbP2mNellRAi5tmzGNLeEOJaEfFYCDfUDhZ1P8HKIHQY+a5v8IAAAAASUVORK5CYII="/> + </defs> + <style> + .s0 { fill: #000000 } + .s1 { fill: #5e5e5e } + </style> + <use id="Layer 1" href="#img1" transform="matrix(1,0,0,1,1.5,0)"/> + <path id="DBREPO Repository for Data in Da" class="s0" aria-label="DBREPO +Repository for Data in +Databases" d="m330 74h-15.4v-49.8h15.3q6.5 0 11.7 3 5.2 2.9 8.1 8.4 2.9 5.5 2.9 12.4v2.3q0 6.9-2.9 12.3-2.8 5.4-8 8.4-5.2 3-11.7 3zm-0.1-41.5h-5.1v33.3h5q6 0 9.2-4 3.1-3.9 3.2-11.2v-2.6q0-7.6-3.1-11.5-3.2-4-9.2-4zm49.5 41.5h-19.3v-49.8h17.4q9 0 13.7 3.5 4.7 3.5 4.7 10.2 0 3.6-1.9 6.4-1.8 2.8-5.2 4.1 3.8 1 6 3.9 2.2 2.9 2.2 7.1 0 7.1-4.5 10.8-4.6 3.7-13.1 3.8zm0.3-21.7h-9.4v13.5h8.8q3.6 0 5.6-1.7 2.1-1.8 2.1-4.8 0-6.9-7.1-7zm-9.4-19.8v12.6h7.6q7.8-0.2 7.8-6.2 0-3.4-2-4.9-2-1.5-6.2-1.5zm62.2 41.5l-9.4-18.2h-8.1v18.2h-10.3v-49.8h18.5q8.8 0 13.6 4 4.8 3.9 4.8 11.1 0 5.1-2.2 8.5-2.2 3.4-6.7 5.4l10.8 20.3v0.5zm-17.5-41.5v15h8.2q3.9 0 6-2 2.1-2 2.1-5.4 0-3.5-2-5.5-2-2.1-6.1-2.1zm64.4 11.9v8h-19.7v13.4h23.1v8.2h-33.4v-49.8h33.3v8.3h-23v11.9zm28.7 12.1h-9v17.5h-10.3v-49.8h19.4q5.6 0 9.9 2.1 4.2 2 6.5 5.8 2.3 3.8 2.3 8.6 0 7.3-5 11.6-5 4.2-13.8 4.2zm-9-24v15.7h9.1q4.1 0 6.2-2 2.2-1.9 2.2-5.4 0-3.7-2.2-5.9-2.1-2.3-5.9-2.4zm75.7 15.5v2.2q0 7.4-2.6 12.9-2.6 5.6-7.4 8.6-4.8 3-11.1 3-6.2 0-11-3-4.9-3-7.5-8.5-2.7-5.5-2.7-12.7v-2.4q0-7.4 2.6-13 2.7-5.6 7.5-8.5 4.8-3 11.1-3 6.2 0 11 3 4.8 2.9 7.5 8.5 2.6 5.6 2.6 12.9zm-10.3 2.4v-2.4q0-7.8-2.9-11.9-2.8-4.1-7.9-4.1-5.2 0-8 4.1-2.8 4-2.8 11.7v2.4q0 7.7 2.8 11.9 2.8 4.2 8 4.2 5.2 0 7.9-4.1 2.8-4 2.9-11.8z"/> + <path id="DBREPO Repository for Data in Da" class="s1" aria-label="DBREPO +Repository for Data in +Databases" d="m345 158l-10.8-20.1h-11.7v20.1h-6.6v-49.8h16.4q8.4 0 13 3.9 4.5 3.8 4.5 11.1 0 4.7-2.5 8.1-2.5 3.5-7 5.2l11.7 21.1v0.4zm-22.5-44.4v18.9h10.1q4.9 0 7.7-2.5 2.9-2.6 2.9-6.8 0-4.6-2.7-7.1-2.8-2.4-7.9-2.5zm50.8 45.1q-7.5 0-12.2-4.9-4.7-5-4.7-13.3v-1.1q0-5.5 2.1-9.8 2.1-4.4 5.9-6.8 3.7-2.5 8.2-2.5 7.2 0 11.2 4.8 4 4.7 4 13.6v2.6h-25.1q0.2 5.5 3.2 8.9 3.1 3.3 7.8 3.3 3.3 0 5.7-1.3 2.3-1.4 4-3.7l3.9 3q-4.7 7.2-14 7.2zm-0.7-33.2q-3.9 0-6.5 2.8-2.6 2.8-3.2 7.8h18.5v-0.5q-0.2-4.8-2.6-7.4-2.3-2.7-6.2-2.7zm53.7 13.8v0.6q0 8.5-3.8 13.6-3.9 5.2-10.5 5.2-6.7 0-10.6-4.3v17.8h-6.3v-51.2h5.8l0.3 4.1q3.8-4.8 10.7-4.8 6.7 0 10.5 5.1 3.9 5 3.9 13.9zm-6.3-0.1q0-6.3-2.7-9.9-2.6-3.6-7.3-3.6-5.7 0-8.6 5.1v17.7q2.8 5 8.7 5 4.5 0 7.2-3.6 2.7-3.6 2.7-10.7zm12.7 0.4v-0.4q0-5.5 2.1-9.8 2.2-4.3 5.9-6.7 3.9-2.4 8.8-2.4 7.5 0 12.2 5.3 4.6 5.2 4.6 13.9v0.4q0 5.4-2 9.7-2.1 4.3-6 6.7-3.8 2.4-8.8 2.4-7.5 0-12.2-5.2-4.6-5.3-4.6-13.9zm6.3 0.3q0 6.2 2.9 9.9 2.8 3.7 7.6 3.7 4.9 0 7.7-3.7 2.8-3.8 2.8-10.6 0-6.1-2.9-9.9-2.9-3.8-7.6-3.8-4.7 0-7.6 3.8-2.9 3.7-2.9 10.6zm56.8 8.3q0-2.6-1.9-4-2-1.4-6.8-2.4-4.8-1.1-7.6-2.5-2.8-1.4-4.2-3.4-1.3-2-1.3-4.7 0-4.6 3.8-7.7 3.9-3.2 9.9-3.2 6.3 0 10.2 3.3 3.9 3.2 3.9 8.3h-6.4q0-2.6-2.2-4.5-2.2-1.9-5.5-1.9-3.5 0-5.4 1.5-2 1.5-2 4 0 2.3 1.8 3.4 1.8 1.2 6.6 2.2 4.7 1.1 7.7 2.6 2.9 1.4 4.3 3.5 1.4 2.1 1.4 5 0 5-3.9 8-4 3-10.3 3-4.5 0-7.9-1.6-3.4-1.6-5.3-4.4-2-2.8-2-6.1h6.4q0.1 3.2 2.5 5.1 2.4 1.8 6.3 1.8 3.6 0 5.7-1.4 2.2-1.5 2.2-3.9zm21.4-27.2v37h-6.3v-37zm-6.8-9.8q0-1.5 0.9-2.6 1-1 2.8-1 1.9 0 2.8 1 1 1.1 1 2.6 0 1.5-1 2.6-0.9 1-2.8 1-1.8 0-2.8-1-0.9-1.1-0.9-2.6zm19.2 0.9h6.3v8.9h6.9v4.9h-6.9v22.9q0 2.3 0.9 3.4 1 1.1 3.2 1.1 1.1 0 3-0.4v5.1q-2.5 0.7-4.9 0.7-4.2 0-6.4-2.6-2.1-2.5-2.1-7.3v-22.9h-6.7v-4.9h6.7zm18.2 27.6v-0.5q0-5.4 2.2-9.8 2.1-4.3 5.9-6.7 3.8-2.3 8.7-2.3 7.6 0 12.2 5.2 4.7 5.2 4.7 13.9v0.5q0 5.4-2.1 9.7-2 4.3-5.9 6.6-3.8 2.4-8.8 2.4-7.5 0-12.2-5.2-4.7-5.2-4.7-13.8zm6.4 0.3q0 6.1 2.8 9.9 2.9 3.7 7.7 3.7 4.8 0 7.6-3.8 2.9-3.8 2.9-10.6 0-6.1-2.9-9.8-2.9-3.8-7.7-3.8-4.7 0-7.5 3.7-2.9 3.7-2.9 10.7zm53.1-19.1v5.8q-1.4-0.2-3.1-0.2-6.2 0-8.4 5.3v26.3h-6.4v-37h6.2l0.1 4.2q3.1-4.9 8.8-4.9 1.9 0 2.8 0.5zm9.3 0.2l9.2 27.7 8.7-27.7h6.7l-14.8 42.7q-3.5 9.2-11 9.2l-1.2-0.1-2.4-0.5v-5.1l1.7 0.2q3.2 0 5-1.3 1.8-1.3 3-4.8l1.4-3.8-13.2-36.5zm57 37h-6.3v-32.1h-5.8v-4.9h5.8v-3.8q0-6 3.2-9.2 3.2-3.3 9-3.3 2.2 0 4.3 0.6l-0.3 5.1q-1.6-0.3-3.5-0.3-3 0-4.7 1.8-1.7 1.8-1.7 5.2v3.9h7.9v4.9h-7.9zm13.2-18.4v-0.5q0-5.4 2.1-9.7 2.2-4.4 6-6.7 3.8-2.4 8.7-2.4 7.5 0 12.2 5.2 4.7 5.3 4.7 13.9v0.5q0 5.4-2.1 9.7-2.1 4.3-5.9 6.7-3.8 2.3-8.8 2.3-7.6 0-12.2-5.2-4.7-5.2-4.7-13.8zm6.4 0.3q0 6.1 2.8 9.9 2.9 3.7 7.7 3.7 4.8 0 7.6-3.8 2.9-3.8 2.9-10.6 0-6.1-2.9-9.8-2.9-3.8-7.7-3.8-4.7 0-7.6 3.7-2.8 3.7-2.8 10.7zm53.1-19.1v5.9q-1.5-0.3-3.1-0.3-6.2 0-8.5 5.3v26.3h-6.3v-37h6.2l0.1 4.3q3.1-5 8.8-5 1.8 0 2.8 0.5zm37.9 37.2h-13.8v-49.8h14.1q6.5 0 11.4 2.9 5 2.8 7.7 8.1 2.8 5.3 2.8 12.2v3.2q0 7-2.7 12.3-2.7 5.3-7.8 8.2-5 2.8-11.7 2.9zm0.4-44.4h-7.6v39h6.9q7.6 0 11.8-4.7 4.2-4.7 4.2-13.5v-2.9q0-8.4-4-13.1-4-4.7-11.3-4.8zm60.2 44.4h-6.6q-0.6-1.1-0.9-3.9-4.4 4.5-10.6 4.5-5.4 0-8.9-3-3.5-3.1-3.5-7.9 0-5.8 4.3-8.9 4.5-3.3 12.4-3.3h6.2v-2.9q0-3.3-2-5.2-2-2-5.9-2-3.3 0-5.6 1.7-2.3 1.7-2.3 4.1h-6.4q0-2.7 2-5.3 2-2.6 5.3-4.1 3.4-1.5 7.4-1.5 6.4 0 10 3.2 3.7 3.2 3.8 8.8v17q0 5.1 1.3 8.1zm-17.1-4.8q2.9 0 5.6-1.5 2.7-1.6 3.9-4v-7.6h-5q-11.6 0-11.6 6.8 0 2.9 2 4.6 2 1.7 5.1 1.7zm28-41.1h6.3v8.9h6.9v4.9h-6.9v23q0 2.2 0.9 3.3 0.9 1.1 3.2 1.1 1 0 3-0.4v5.1q-2.5 0.7-4.9 0.7-4.2 0-6.4-2.6-2.1-2.5-2.1-7.2v-23h-6.8v-4.9h6.8zm50 46h-6.6q-0.5-1.1-0.9-3.9-4.4 4.6-10.5 4.6-5.5 0-9-3.1-3.5-3.1-3.5-7.9 0-5.8 4.4-8.9 4.4-3.3 12.4-3.3h6.1v-2.9q0-3.3-2-5.2-2-2-5.8-2-3.4 0-5.7 1.7-2.3 1.7-2.3 4.1h-6.3q0-2.7 1.9-5.3 2-2.6 5.3-4.1 3.4-1.5 7.5-1.5 6.4 0 10 3.2 3.6 3.2 3.7 8.8v17q0 5.1 1.3 8.1zm-17.1-4.8q3 0 5.6-1.5 2.7-1.6 3.9-4v-7.6h-4.9q-11.7 0-11.7 6.8 0 3 2 4.6 2 1.7 5.1 1.7zm49.9-32.2v37h-6.3v-37zm-6.8-9.8q0-1.5 0.9-2.6 1-1 2.8-1 1.9 0 2.8 1 1 1.1 1 2.6 0 1.6-1 2.6-0.9 1-2.8 1-1.8 0-2.8-1-0.9-1-0.9-2.6zm16.9 9.8h6l0.2 4.7q4.3-5.3 11.1-5.3 11.7 0 11.8 13.2v24.4h-6.3v-24.5q0-3.9-1.8-5.9-1.8-1.9-5.6-1.9-3.1 0-5.4 1.7-2.3 1.6-3.6 4.3v26.3h-6.4zm-619 121h-13.8v-49.8h14.1q6.5 0 11.5 2.9 5 2.9 7.7 8.2 2.7 5.3 2.7 12.1v3.2q0 7.1-2.7 12.4-2.7 5.3-7.8 8.1-5 2.8-11.7 2.9zm0.5-44.4h-7.7v39h6.9q7.6 0 11.8-4.7 4.2-4.7 4.2-13.4v-2.9q0-8.5-4-13.2-3.9-4.7-11.2-4.8zm60.1 44.4h-6.6q-0.6-1.1-0.9-3.9-4.4 4.6-10.5 4.6-5.5 0-9-3.1-3.5-3.1-3.5-7.8 0-5.8 4.4-9 4.4-3.2 12.3-3.2h6.2v-2.9q0-3.3-2-5.3-2-2-5.8-2-3.4 0-5.7 1.7-2.3 1.7-2.3 4.2h-6.4q0-2.8 2-5.4 2-2.6 5.3-4.1 3.4-1.5 7.4-1.5 6.4 0 10.1 3.3 3.6 3.1 3.7 8.7v17.1q0 5 1.3 8.1zm-17.1-4.9q3 0 5.6-1.5 2.7-1.5 3.9-4v-7.6h-5q-11.6 0-11.6 6.8 0 3 2 4.7 2 1.6 5.1 1.6zm28-41.1h6.3v9h6.9v4.9h-6.9v22.9q0 2.2 0.9 3.3 1 1.1 3.2 1.1 1.1 0 3-0.4v5.2q-2.5 0.6-4.9 0.6-4.2 0-6.4-2.5-2.1-2.6-2.1-7.3v-22.9h-6.8v-4.9h6.8zm50.1 45.9h-6.7q-0.5-1.1-0.9-3.9-4.4 4.6-10.5 4.6-5.5 0-9-3.1-3.5-3.1-3.5-7.8 0-5.8 4.4-9 4.4-3.2 12.4-3.2h6.1v-2.9q0-3.3-1.9-5.3-2-2-5.9-2-3.4 0-5.7 1.7-2.3 1.8-2.3 4.2h-6.3q0-2.8 1.9-5.3 2-2.6 5.4-4.1 3.3-1.6 7.4-1.6 6.4 0 10 3.3 3.6 3.1 3.8 8.7v17.1q0 5.1 1.3 8.1zm-17.2-4.9q3 0 5.7-1.5 2.6-1.5 3.8-4v-7.6h-4.9q-11.6 0-11.6 6.8 0 3 1.9 4.7 2 1.6 5.1 1.6zm57.1-13.8v0.6q0 8.5-3.9 13.6-3.9 5.1-10.5 5.1-7 0-10.8-4.9l-0.3 4.3h-5.8v-52.5h6.3v19.6q3.8-4.8 10.6-4.8 6.7 0 10.5 5.1 3.9 5.1 3.9 13.9zm-6.3-0.1q0-6.5-2.5-10-2.5-3.5-7.2-3.5-6.3 0-9 5.8v16q2.9 5.8 9 5.8 4.6 0 7.1-3.5 2.6-3.6 2.6-10.6zm43.7 18.8h-6.6q-0.6-1.1-0.9-3.9-4.4 4.5-10.5 4.5-5.5 0-9-3-3.5-3.1-3.5-7.9 0-5.8 4.4-8.9 4.4-3.3 12.3-3.3h6.2v-2.9q0-3.3-2-5.2-2-2-5.8-2-3.4 0-5.7 1.7-2.3 1.7-2.3 4.1h-6.4q0-2.7 2-5.3 2-2.6 5.3-4.1 3.4-1.5 7.4-1.5 6.4 0 10 3.2 3.7 3.2 3.8 8.8v17q0 5.1 1.3 8.1zm-17.1-4.8q3 0 5.6-1.5 2.7-1.6 3.9-4v-7.6h-5q-11.6 0-11.6 6.8 0 2.9 2 4.6 2 1.7 5.1 1.7zm47.2-5q0-2.6-1.9-4-1.9-1.4-6.7-2.4-4.8-1-7.7-2.5-2.8-1.4-4.1-3.4-1.4-2-1.4-4.7 0-4.6 3.9-7.7 3.8-3.1 9.8-3.1 6.3 0 10.2 3.2 3.9 3.2 3.9 8.3h-6.3q0-2.6-2.2-4.5-2.2-1.9-5.6-1.9-3.4 0-5.4 1.6-1.9 1.5-1.9 3.9 0 2.3 1.8 3.4 1.8 1.2 6.5 2.3 4.8 1 7.7 2.5 2.9 1.5 4.3 3.5 1.5 2.1 1.5 5.1 0 4.9-4 7.9-4 3-10.3 3-4.4 0-7.8-1.6-3.5-1.5-5.4-4.3-1.9-2.9-1.9-6.2h6.3q0.2 3.2 2.5 5.1 2.4 1.8 6.3 1.8 3.6 0 5.8-1.4 2.1-1.5 2.1-3.9zm30 10.5q-7.6 0-12.3-4.9-4.7-5-4.7-13.2v-1.2q0-5.5 2.1-9.8 2.1-4.4 5.9-6.8 3.8-2.4 8.2-2.4 7.2 0 11.2 4.7 4 4.8 4 13.6v2.6h-25.1q0.2 5.5 3.2 8.9 3.1 3.3 7.8 3.3 3.3 0 5.7-1.3 2.3-1.4 4-3.6l3.9 3q-4.6 7.1-13.9 7.1zm-0.8-33.2q-3.9 0-6.5 2.9-2.6 2.7-3.2 7.7h18.6v-0.4q-0.3-4.9-2.6-7.5-2.4-2.7-6.3-2.7zm44 22.7q0-2.6-1.9-4-1.9-1.4-6.8-2.4-4.7-1-7.6-2.5-2.8-1.4-4.1-3.4-1.4-2-1.4-4.7 0-4.6 3.9-7.7 3.8-3.1 9.8-3.1 6.3 0 10.2 3.2 3.9 3.2 3.9 8.3h-6.3q0-2.6-2.3-4.5-2.2-1.9-5.5-1.9-3.5 0-5.4 1.6-2 1.5-2 3.9 0 2.3 1.9 3.4 1.8 1.2 6.5 2.3 4.7 1 7.7 2.5 2.9 1.5 4.3 3.5 1.5 2.1 1.5 5.1 0 4.9-4 7.9-4 3-10.3 3-4.4 0-7.9-1.6-3.4-1.5-5.3-4.3-1.9-2.9-1.9-6.2h6.3q0.2 3.2 2.5 5.1 2.4 1.8 6.3 1.8 3.6 0 5.7-1.4 2.2-1.5 2.2-3.9z"/> +</svg> \ No newline at end of file diff --git a/dbrepo-ui/static/logo_tu_wien.png b/dbrepo-ui/static/logo_tu_wien.png deleted file mode 100644 index d084db95ddb000f717b6760bc4ec9960fbaf0ef4..0000000000000000000000000000000000000000 Binary files a/dbrepo-ui/static/logo_tu_wien.png and /dev/null differ diff --git a/dbrepo-ui/static/teaser.mp4 b/dbrepo-ui/static/teaser.mp4 deleted file mode 100644 index 7b559f06f1b608c4eaca2a7cb065fc332ea8045f..0000000000000000000000000000000000000000 Binary files a/dbrepo-ui/static/teaser.mp4 and /dev/null differ diff --git a/dbrepo-ui/static/teaser_image.png b/dbrepo-ui/static/teaser_image.png deleted file mode 100644 index 36e760237c25e0ca14749db9a20e11508eb9f085..0000000000000000000000000000000000000000 Binary files a/dbrepo-ui/static/teaser_image.png and /dev/null differ diff --git a/dbrepo-ui/store/index.js b/dbrepo-ui/store/index.js index db1da92da93e468f597404e5a2195993d3b1792e..2161291864f8e31233edd9937b3f489e52c105b8 100644 --- a/dbrepo-ui/store/index.js +++ b/dbrepo-ui/store/index.js @@ -28,8 +28,8 @@ const store = new Store({ clientSecret: null, searchUsername: null, searchPassword: null, - databaseCount: null, - doiUrl: null + doiUrl: null, + subset: null }, getters: { getTitle: state => state.title, @@ -48,7 +48,7 @@ const store = new Store({ getClientSecret: state => state.clientSecret, getSearchUsername: state => state.searchUsername, getSearchPassword: state => state.searchPassword, - getDatabaseCount: state => state.databaseCount + getSubset: state => state.subset }, mutations: { SET_TITLE (state, title) { @@ -99,11 +99,11 @@ const store = new Store({ SET_SEARCH_PASSWORD (state, searchPassword) { state.searchPassword = searchPassword }, - SET_DATABASE_COUNT (state, databaseCount) { - state.databaseCount = databaseCount - }, SET_DOI_URL (state, doiUrl) { state.doiUrl = doiUrl + }, + SET_SUBSET (state, subset) { + state.subset = subset } }, actions: { @@ -143,20 +143,8 @@ const store = new Store({ commit('SET_ONTOLOGIES', ontologies) }) }, - reloadDatabaseCount ({ state, commit }) { - DatabaseService.countAll(null) - .then((all) => { - if (!state.user) { - commit('SET_DATABASE_COUNT', { all, my: null }) - } else { - DatabaseService.countAll(true) - .then((my) => { - commit('SET_DATABASE_COUNT', { all, my }) - }) - } - }) - }, logout ({ state, commit }) { + console.debug('triggered logout') commit('SET_TOKEN', null) commit('SET_REFRESH_TOKEN', null) commit('SET_ROLES', []) diff --git a/dbrepo-ui/utils/index.js b/dbrepo-ui/utils/index.js index 0d8ff103ffd7c222088c86b3c932eb257ee8c1d4..fbfb4a19c534c45976dae3e22a4ed65acd118e94 100644 --- a/dbrepo-ui/utils/index.js +++ b/dbrepo-ui/utils/index.js @@ -29,7 +29,7 @@ function isNonNegativeInteger (str) { } function formatDateUTC (str) { - if (str === null) { + if (!str) { return null } const date = new Date(str).toISOString().slice(0, -1) @@ -37,7 +37,7 @@ function formatDateUTC (str) { } function formatYearUTC (str) { - if (str === null) { + if (!str) { return null } const date = new Date(str).toISOString().slice(0, -1) @@ -45,7 +45,7 @@ function formatYearUTC (str) { } function formatMonthUTC (str) { - if (str === null) { + if (!str) { return null } const date = new Date(str).toISOString().slice(0, -1) @@ -53,7 +53,7 @@ function formatMonthUTC (str) { } function formatDayUTC (str) { - if (str === null) { + if (!str) { return null } const date = new Date(str).toISOString().slice(0, -1) @@ -61,14 +61,14 @@ function formatDayUTC (str) { } function formatTimestamp (str) { - if (str === null) { + if (!str) { return null } return format(new Date(str), 'yyyy-MM-dd HH:mm:ss') } function formatTimestampUTCLabel (str) { - if (str === null) { + if (!str) { return null } const date = new Date(str).toISOString().slice(0, -1) @@ -76,7 +76,7 @@ function formatTimestampUTCLabel (str) { } function formatTimestampUTC (str) { - if (str === null) { + if (!str) { return null } const date = new Date(str).toISOString().slice(0, -1) diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 7d41db977e0b3e381cc0fb70002bdd416f923371..a5abf74c9ca49944434997fed8a690ca182cc89b 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -114,8 +114,6 @@ services: ADMIN_MAIL: "${ADMIN_MAIL:-noreply@localhost}" BASE_URL: "${BASE_URL:-http://localhost}" GRANT_PRIVILEGES: "${GRANT_PRIVILEGES:-SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE}" - MIN_CONCURRENT_CONSUMERS: ${MIN_CONCURRENT_CONSUMERS:-1} - MAX_CONCURRENT_CONSUMERS: ${MAX_CONCURRENT_CONSUMERS:-5} BROKER_USERNAME: ${BROKER_USERNAME:-fda} BROKER_PASSWORD: ${BROKER_PASSWORD:-fda} BROKER_ENDPOINT: "${BROKER_ENDPOINT:-http://broker-service:15672/admin/broker}" @@ -142,9 +140,7 @@ services: REPOSITORY_NAME: "${REPOSITORY_NAME:-Example Repository}" SEARCH_USERNAME: "${SEARCH_USERNAME:-admin}" SEARCH_PASSWORD: "${SEARCH_PASSWORD:-admin}" - SHARED_FILESYSTEM: "${SHARED_FILESYSTEM:-/tmp}" DELETE_AFTER_IMPORT: "${DELETE_AFTER_IMPORT:-true}" - USER_NETWORK: "${USER_NETWORK:-userdb}" WEBSITE: "${WEBSITE:-http://localhost}" KEYCLOAK_HOST: "${KEYCLOAK_HOST:-http://authentication-service:8080}" KEYCLOAK_ADMIN: "${KEYCLOAK_ADMIN:-fda}" @@ -153,6 +149,11 @@ services: DATACITE_PREFIX: "${DATACITE_PREFIX:-}" DATACITE_USERNAME: "${DATACITE_USERNAME:-}" DATACITE_PASSWORD: "${DATACITE_PASSWORD:-}" + S3_STORAGE_ENDPOINT: "${STORAGE_ENDPOINT:-http://storage-service:9000}" + S3_ACCESS_KEY_ID: "${STORAGE_USERNAME:-seaweedfsadmin}" + S3_SECRET_ACCESS_KEY: "${STORAGE_PASSWORD:-seaweedfsadmin}" + S3_IMPORT_BUCKET: "${STORAGE_IMPORT_BUCKET:-dbrepo-upload}" + S3_EXPORT_BUCKET: "${STORAGE_EXPORT_BUCKET:-dbrepo-download}" healthcheck: test: wget -qO- localhost:9099/actuator/health/readiness | grep -q "UP" || exit 1 interval: 10s diff --git a/docker-compose.yml b/docker-compose.yml index a2ad475e50a60c5654713b0f7b966998bedc335f..131123f8ad395963142dfdcf97b9583b693bf904 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -117,8 +117,6 @@ services: ADMIN_MAIL: "${ADMIN_MAIL:-noreply@localhost}" BASE_URL: "${BASE_URL:-http://localhost}" GRANT_PRIVILEGES: "${GRANT_PRIVILEGES:-SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE}" - MIN_CONCURRENT_CONSUMERS: ${MIN_CONCURRENT_CONSUMERS:-1} - MAX_CONCURRENT_CONSUMERS: ${MAX_CONCURRENT_CONSUMERS:-5} BROKER_USERNAME: ${BROKER_USERNAME:-fda} BROKER_PASSWORD: ${BROKER_PASSWORD:-fda} BROKER_ENDPOINT: "${BROKER_ENDPOINT:-http://broker-service:15672/admin/broker}" @@ -145,9 +143,7 @@ services: REPOSITORY_NAME: "${REPOSITORY_NAME:-Example Repository}" SEARCH_USERNAME: "${SEARCH_USERNAME:-admin}" SEARCH_PASSWORD: "${SEARCH_PASSWORD:-admin}" - SHARED_FILESYSTEM: "${SHARED_FILESYSTEM:-/tmp}" DELETE_AFTER_IMPORT: "${DELETE_AFTER_IMPORT:-true}" - USER_NETWORK: "${USER_NETWORK:-userdb}" WEBSITE: "${WEBSITE:-http://localhost}" KEYCLOAK_HOST: "${KEYCLOAK_HOST:-http://authentication-service:8080}" KEYCLOAK_ADMIN: "${KEYCLOAK_ADMIN:-fda}" @@ -156,6 +152,14 @@ services: DATACITE_PREFIX: "${DATACITE_PREFIX:-}" DATACITE_USERNAME: "${DATACITE_USERNAME:-}" DATACITE_PASSWORD: "${DATACITE_PASSWORD:-}" + S3_STORAGE_ENDPOINT: "${STORAGE_ENDPOINT:-http://storage-service:9000}" + S3_ACCESS_KEY_ID: "${STORAGE_USERNAME:-seaweedfsadmin}" + S3_SECRET_ACCESS_KEY: "${STORAGE_PASSWORD:-seaweedfsadmin}" + S3_IMPORT_BUCKET: "${STORAGE_IMPORT_BUCKET:-dbrepo-upload}" + S3_EXPORT_BUCKET: "${STORAGE_EXPORT_BUCKET:-dbrepo-download}" + MIRROR_RATE: ${METADATA_SERVICE_MIRROR_RATE:-60} + OBTAIN_METADATA_RATE: ${METADATA_SERVICE_OBTAIN_METADATA_RATE:-60} + DELETE_STALE_QUERIES_RATE: ${METADATA_SERVICE_DELETE_STALE_QUERIES_RATE:-60} healthcheck: test: wget -qO- localhost:9099/actuator/health/readiness | grep -q "UP" || exit 1 interval: 10s @@ -252,6 +256,7 @@ services: ports: - "4000:4000" environment: + LOG_LEVEL: ${LOG_LEVEL:-debug} FLASK_DEBUG: ${SEARCH_DEBUG_MODE:-true} OPENSEARCH_HOST: ${OPENSEARCH_HOST:-dbrepo-search-db} @@ -333,20 +338,20 @@ services: logging: driver: json-file - dbrepo-search-db-init: - restart: "no" - container_name: dbrepo-search-db-init - hostname: search-db-init - image: dbrepo-search-db-init:latest - build: ./dbrepo-search-db/init - environment: - OPENSEARCH_HOST: ${SEARCH_DB_HOST:-http://search-db:9200} - CURL_EXTRA_ARGS: ${SEARCH_DB_EXTRA_ARGS:-} - depends_on: - dbrepo-search-db: - condition: service_healthy - logging: - driver: json-file +# dbrepo-search-db-init: +# restart: "no" +# container_name: dbrepo-search-db-init +# hostname: search-db-init +# image: dbrepo-search-db-init:latest +# build: ./dbrepo-search-db/init +# environment: +# OPENSEARCH_HOST: ${SEARCH_DB_HOST:-http://search-db:9200} +# CURL_EXTRA_ARGS: ${SEARCH_DB_EXTRA_ARGS:-} +# depends_on: +# dbrepo-search-db: +# condition: service_healthy +# logging: +# driver: json-file dbrepo-storage-service: restart: "no" @@ -407,37 +412,6 @@ services: logging: driver: json-file - dbrepo-mirror-service: - restart: "no" - container_name: dbrepo-mirror-service - hostname: mirror-service - image: dbrepo-mirror-service:latest - build: ./dbrepo-mirror-service - ports: - - "9050:9050" - environment: - METADATA_DB: ${METADATA_DB:-fda} - METADATA_HOST: ${METADATA_HOST:-metadata-db} - METADATA_JDBC_EXTRA_ARGS: ${METADATA_JDBC_EXTRA_ARGS:-} - METADATA_PASSWORD: ${METADATA_PASSWORD:-dbrepo} - METADATA_USERNAME: ${METADATA_USERNAME:-root} - SEARCH_USERNAME: ${SEARCH_USERNAME:-admin} - SEARCH_PASSWORD: ${SEARCH_PASSWORD:-admin} - LOG_LEVEL: ${LOG_LEVEL:-debug} - SYNC_RATE: ${SYNC_RATE:-60} - healthcheck: - test: wget -qO- localhost:9050/actuator/health/readiness | grep -q "UP" || exit 1 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-metadata-db: - condition: service_healthy - dbrepo-search-db: - condition: service_started - logging: - driver: json-file - dbrepo-data-service: restart: "no" container_name: dbrepo-data-service