/*******************************************************************************
* Copyright 2012 UPM - Universidad Politécnica de Madrid
*
* 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
*
* http://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.
******************************************************************************/
package org.universAAL.ontology.unit;
import org.universAAL.middleware.owl.DataRepOntology;
import org.universAAL.middleware.owl.ManagedIndividual;
import org.universAAL.middleware.owl.MergedRestriction;
import org.universAAL.middleware.owl.OntClassInfoSetup;
import org.universAAL.middleware.owl.Ontology;
import org.universAAL.middleware.rdf.Resource;
import org.universAAL.middleware.rdf.TypeMapper;
import org.universAAL.middleware.service.owl.Service;
import org.universAAL.middleware.service.owl.ServiceBusOntology;
import org.universAAL.ontology.UnitFactory;
import org.universAAL.ontology.unit.services.UnitConversionService;
import org.universAAL.ontology.unit.services.UnitService;
import org.universAAL.ontology.unit.system.BinarySystem;
import org.universAAL.ontology.unit.system.InternationalSystem;
import org.universAAL.ontology.unit.system.TimeSystem;
import org.universAAL.ontology.unit.system.Util;
/**
* @author AAL Studio
*/
public final class UnitOntology extends Ontology {
private static UnitFactory factory = new UnitFactory();
public static final String NAMESPACE = "http://ontology.universaal.org/Unit.owl#";
public UnitOntology() {
super(NAMESPACE);
}
public void create() {
Resource r = getInfo();
r.setResourceComment("The Unit Ontology");
r.setResourceLabel("Unit");
addImport(DataRepOntology.NAMESPACE);
addImport(ServiceBusOntology.NAMESPACE);
// ******* Declaration of enumeration classes of the ontology ******* //
OntClassInfoSetup oci_measurableDimension = createNewAbstractOntClassInfo(MeasurableDimension.MY_URI);
// ******* Declaration of regular classes of the ontology ******* //
OntClassInfoSetup oci_Unit = createNewOntClassInfo(Unit.MY_URI,
factory, 1);
OntClassInfoSetup oci_UnitSystem = createNewOntClassInfo(
UnitSystem.MY_URI, factory, 2);
OntClassInfoSetup oci_Prefix = createNewOntClassInfo(Prefix.MY_URI,
factory, 3);
OntClassInfoSetup oci_MultipliedUnit = createNewOntClassInfo(
MultipliedUnit.MY_URI, factory, 4);
OntClassInfoSetup oci_DividedUnit = createNewOntClassInfo(
DividedUnit.MY_URI, factory, 5);
OntClassInfoSetup oci_DerivedUnit = createNewAbstractOntClassInfo(DerivedUnit.MY_URI);
OntClassInfoSetup oci_UnitService = createNewOntClassInfo(
UnitService.MY_URI, factory, 6);
OntClassInfoSetup oci_UnitConversionService =
createNewOntClassInfo(UnitConversionService.MY_URI, factory,7);
// ******* Add content to enumeration classes of the ontology ******* //
oci_measurableDimension
.setResourceComment("List of all measurable dimensions");
oci_measurableDimension.setResourceLabel("MeasurableDimension");
oci_measurableDimension.toEnumeration(new ManagedIndividual[] {
MeasurableDimension.Length, MeasurableDimension.Mass,
MeasurableDimension.Time, MeasurableDimension.Current,
MeasurableDimension.Temperature, MeasurableDimension.Luminance,
MeasurableDimension.SubstanceAmmount,
MeasurableDimension.Adiemnsional,
MeasurableDimension.ComputerStorage,
MeasurableDimension.Derived, MeasurableDimension.Currency });
// ******* Add content to regular classes of the ontology ******* //
oci_DividedUnit
.setResourceComment("Any Unit that is derived by dividing one unit by another");
oci_DividedUnit.setResourceLabel("DividedUnit");
oci_DividedUnit.addSuperClass(DerivedUnit.MY_URI);
oci_DividedUnit.addObjectProperty(DividedUnit.PROP_DIVIDED_BY)
.setFunctional();
oci_DividedUnit.addRestriction(MergedRestriction
.getAllValuesRestrictionWithCardinality(
DividedUnit.PROP_DIVIDED_BY, Unit.MY_URI, 1, 1));
oci_DividedUnit.addObjectProperty(DividedUnit.PROP_DIVIDED_BY_PREFIX)
.setFunctional();
oci_DividedUnit
.addRestriction(MergedRestriction
.getAllValuesRestrictionWithCardinality(
DividedUnit.PROP_DIVIDED_BY_PREFIX,
Prefix.MY_URI, 0, 1));
oci_UnitSystem
.setResourceComment("A unit System is a collection of units and prefixes");
oci_UnitSystem.setResourceLabel("UnitSystem");
oci_UnitSystem.addSuperClass(ManagedIndividual.MY_URI);
oci_UnitSystem.addObjectProperty(UnitSystem.PROP_UNITS).setFunctional();
oci_UnitSystem.addRestriction(MergedRestriction
.getAllValuesRestriction(UnitSystem.PROP_UNITS, Unit.MY_URI));
oci_UnitSystem.addDatatypeProperty(UnitSystem.PROP_NAME);
oci_UnitSystem.addRestriction(MergedRestriction
.getAllValuesRestrictionWithCardinality(UnitSystem.PROP_NAME,
TypeMapper.getDatatypeURI(String.class), 1, 1));
oci_UnitSystem.addObjectProperty(UnitSystem.PROP_PREFIXES)
.setFunctional();
oci_UnitSystem.addRestriction(MergedRestriction
.getAllValuesRestrictionWithCardinality(
UnitSystem.PROP_PREFIXES, Prefix.MY_URI, 1, 1));
oci_Unit
.setResourceComment("A unit of measurement is a definite magnitude of a physical quantity");
oci_Unit.setResourceLabel("Unit");
oci_Unit.addSuperClass(ManagedIndividual.MY_URI);
oci_Unit.addObjectProperty(Unit.PROP_UNIT_SYSTEM).setFunctional();
oci_Unit.addRestriction(MergedRestriction.getAllValuesRestriction(
Unit.PROP_UNIT_SYSTEM, UnitSystem.MY_URI));
oci_Unit.addDatatypeProperty(Unit.PROP_NAME);
oci_Unit.addRestriction(MergedRestriction
.getAllValuesRestrictionWithCardinality(Unit.PROP_NAME,
TypeMapper.getDatatypeURI(String.class), 1, 1));
oci_Unit.addDatatypeProperty(Unit.PROP_SYMBOL);
oci_Unit.addRestriction(MergedRestriction
.getAllValuesRestrictionWithCardinality(Unit.PROP_SYMBOL,
TypeMapper.getDatatypeURI(String.class), 1, 1));
oci_Unit.addObjectProperty(Unit.PROP_DIMENSION).setFunctional();
oci_Unit.addRestriction(MergedRestriction
.getAllValuesRestrictionWithCardinality(Unit.PROP_DIMENSION,
MeasurableDimension.MY_URI, 1, 1));
oci_DerivedUnit.setResourceComment("Any unit based upon other units");
oci_DerivedUnit.setResourceLabel("DerivedUnit");
oci_DerivedUnit.addSuperClass(Unit.MY_URI);
oci_DerivedUnit.addObjectProperty(DerivedUnit.PROP_BASE_UNIT)
.setFunctional();
oci_DerivedUnit.addRestriction(MergedRestriction
.getAllValuesRestrictionWithCardinality(
DerivedUnit.PROP_BASE_UNIT, Unit.MY_URI, 1, 1));
oci_DerivedUnit.addRestriction(MergedRestriction
.getFixedValueRestriction(DerivedUnit.PROP_DIMENSION,
MeasurableDimension.Derived));
oci_DerivedUnit.addObjectProperty(DerivedUnit.PROP_BASE_PREFIX)
.setFunctional();
oci_DerivedUnit.addRestriction(MergedRestriction
.getAllValuesRestrictionWithCardinality(
DerivedUnit.PROP_BASE_PREFIX, Prefix.MY_URI, 0, 1));
oci_Prefix
.setResourceComment("A symbol that placed in front of the unit modifies by a sacalar factor the value of the unit");
oci_Prefix.setResourceLabel("Prefix");
oci_Prefix.addSuperClass(ManagedIndividual.MY_URI);
oci_Prefix.addDatatypeProperty(Prefix.PROP_NAME);
oci_Prefix.addRestriction(MergedRestriction
.getAllValuesRestrictionWithCardinality(Prefix.PROP_NAME,
TypeMapper.getDatatypeURI(String.class), 1, 1));
oci_Prefix.addDatatypeProperty(Prefix.PROP_POWER);
oci_Prefix.addRestriction(MergedRestriction.getCardinalityRestriction(
Prefix.PROP_POWER, 1, 1));
oci_Prefix.addDatatypeProperty(Prefix.PROP_BASE);
oci_Prefix.addRestriction(MergedRestriction.getCardinalityRestriction(
Prefix.PROP_BASE, 1, 1));
oci_Prefix.addDatatypeProperty(Prefix.PROP_SYMBOL);
oci_Prefix.addRestriction(MergedRestriction
.getAllValuesRestrictionWithCardinality(Prefix.PROP_SYMBOL,
TypeMapper.getDatatypeURI(String.class), 1, 1));
oci_MultipliedUnit
.setResourceComment("Any Unit that is derived by multiplying one unit by another");
oci_MultipliedUnit.setResourceLabel("MultipliedUnit");
oci_MultipliedUnit.addSuperClass(DerivedUnit.MY_URI);
oci_MultipliedUnit.addObjectProperty(MultipliedUnit.PROP_MULTIPLIED_BY)
.setFunctional();
oci_MultipliedUnit.addRestriction(MergedRestriction
.getAllValuesRestrictionWithCardinality(
MultipliedUnit.PROP_MULTIPLIED_BY, Unit.MY_URI, 1, 1));
oci_MultipliedUnit.addObjectProperty(
MultipliedUnit.PROP_MULTIPLIED_BY_PREFIX).setFunctional();
oci_MultipliedUnit.addRestriction(MergedRestriction
.getAllValuesRestrictionWithCardinality(
MultipliedUnit.PROP_MULTIPLIED_BY_PREFIX,
Prefix.MY_URI, 0, 1));
oci_UnitService
.setResourceComment("Root service concept that allows providing services that handle Unit operations");
oci_UnitService.setResourceLabel("UnitService");
oci_UnitService.addSuperClass(Service.MY_URI);
oci_UnitService.addObjectProperty(UnitService.PROP_CONTROLS);
oci_UnitService
.addRestriction(MergedRestriction.getAllValuesRestriction(
UnitService.PROP_CONTROLS, Unit.MY_URI));
oci_UnitConversionService.setResourceComment("Service for Unit conversion operations");
oci_UnitConversionService.setResourceLabel("UnitConversionService");
oci_UnitConversionService.addSuperClass(Service.MY_URI);
oci_UnitConversionService.addObjectProperty(UnitConversionService.PROP_FROM_UNIT);
oci_UnitConversionService
.addRestriction(MergedRestriction.getAllValuesRestriction(
UnitConversionService.PROP_FROM_UNIT, Unit.MY_URI));
oci_UnitConversionService.addObjectProperty(UnitConversionService.PROP_TO_UNIT);
oci_UnitConversionService
.addRestriction(MergedRestriction.getAllValuesRestriction(
UnitConversionService.PROP_TO_UNIT, Unit.MY_URI));
oci_UnitConversionService.addObjectProperty(UnitConversionService.PROP_FROM_PREFIX);
oci_UnitConversionService
.addRestriction(MergedRestriction.getAllValuesRestriction(
UnitConversionService.PROP_FROM_PREFIX, Prefix.MY_URI));
oci_UnitConversionService.addObjectProperty(UnitConversionService.PROP_TO_PREFIX);
oci_UnitConversionService
.addRestriction(MergedRestriction.getAllValuesRestriction(
UnitConversionService.PROP_TO_PREFIX, Prefix.MY_URI));
oci_UnitConversionService.addDatatypeProperty(UnitConversionService.PROP_FROM_VALUE).setFunctional();
// oci_UnitConversionService
// .addRestriction(MergedRestriction.getAllValuesRestriction(
// UnitConversionService.PROP_FROM_VALUE, TypeMapper.getDatatypeURI(Double.class)));
oci_UnitConversionService.addDatatypeProperty(UnitConversionService.PROP_TO_VALUE).setFunctional();
// oci_UnitConversionService
// .addRestriction(MergedRestriction.getAllValuesRestriction(
// UnitConversionService.PROP_TO_VALUE, TypeMapper.getDatatypeURI(Double.class)));
/*
* INDIVIDUAL CONCEPTS
*/
oci_UnitSystem.addInstance(InternationalSystem.IND_SI);
oci_Unit.addInstance(InternationalSystem.IND_UNIT_SI_METER);
oci_Unit.addInstance(InternationalSystem.IND_UNIT_SI_GRAM);
oci_Unit.addInstance(InternationalSystem.IND_UNIT_SI_SECOND);
oci_Unit.addInstance(InternationalSystem.IND_UNIT_SI_AMPERE);
oci_Unit.addInstance(InternationalSystem.IND_UNIT_SI_KELVIN);
oci_Unit.addInstance(InternationalSystem.IND_UNIT_SI_CANDELA);
oci_Unit.addInstance(InternationalSystem.IND_UNIT_SI_MOLE);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_YOTTA);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_ZETTA);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_EXA);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_PETA);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_TERA);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_GIGA);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_MEGA);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_KILO);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_HECTO);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_DECA);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_DECI);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_CENTI);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_MILI);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_MICRO);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_NANO);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_PICO);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_FEMTO);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_ATTO);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_ZEPTO);
oci_Prefix.addInstance(InternationalSystem.IND_PREFIX_SI_YOCTO);
oci_UnitSystem.addInstance(TimeSystem.IND_TS);
oci_Unit.addInstance(TimeSystem.IND_UNIT_TS_SECOND);
oci_Unit.addInstance(TimeSystem.IND_UNIT_TS_MINUTE);
oci_Unit.addInstance(TimeSystem.IND_UNIT_TS_HOUR);
oci_Unit.addInstance(TimeSystem.IND_UNIT_TS_DAY);
oci_Unit.addInstance(TimeSystem.IND_UNIT_TS_WEEK);
oci_Unit.addInstance(TimeSystem.IND_UNIT_TS_MONTH);
oci_Unit.addInstance(TimeSystem.IND_UNIT_TS_YEAR);
oci_Unit.addInstance(TimeSystem.IND_UNIT_TS_LUSTRUM);
oci_Unit.addInstance(TimeSystem.IND_UNIT_TS_DECADE);
oci_Unit.addInstance(TimeSystem.IND_UNIT_TS_CENTURY);
oci_Unit.addInstance(TimeSystem.IND_UNIT_TS_MILENIUM);
oci_UnitSystem.addInstance(BinarySystem.IND_BS);
oci_Unit.addInstance(BinarySystem.IND_UNIT_BS_BIT);
oci_Unit.addInstance(BinarySystem.IND_UNIT_BS_BYTE);
oci_Prefix.addInstance(BinarySystem.IND_PREFIX_BS_KIBI);
oci_Prefix.addInstance(BinarySystem.IND_PREFIX_BS_MEBI);
oci_Prefix.addInstance(BinarySystem.IND_PREFIX_BS_GIBI);
oci_Prefix.addInstance(BinarySystem.IND_PREFIX_BS_TEBI);
oci_Prefix.addInstance(BinarySystem.IND_PREFIX_BS_PEBI);
oci_Prefix.addInstance(BinarySystem.IND_PREFIX_BS_EXBI);
oci_Prefix.addInstance(BinarySystem.IND_PREFIX_BS_ZEBI);
oci_Prefix.addInstance(BinarySystem.IND_PREFIX_BS_YOBI);
oci_Unit.addInstance(Util.IND_UNIT_UNITY);
oci_Unit.addInstance(Util.IND_UNIT_PERCENT);
oci_DividedUnit.addInstance(Util.IND_UNIT_HERTZ);
oci_DividedUnit.addInstance(Util.IND_UNIT_VOLT);
}
}