/*******************************************************************************
* Copyright 2012 UPM, http://www.upm.es
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.healthmeasurement.owl;
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.ServiceBusOntology;
import org.universAAL.ontology.healthmeasurement.HealthMeasurementFactory;
import org.universAAL.ontology.location.LocationOntology;
import org.universAAL.ontology.measurement.Measurement;
import org.universAAL.ontology.measurement.Signal;
import org.universAAL.ontology.phThing.Device;
import org.universAAL.ontology.phThing.PhThingOntology;
import org.universAAL.ontology.profile.ProfileOntology;
import org.universAAL.ontology.profile.User;
import org.universAAL.ontology.unit.DividedUnit;
import org.universAAL.ontology.unit.MeasurableDimension;
import org.universAAL.ontology.unit.Unit;
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 HealthMeasurementOntology extends Ontology {
private static HealthMeasurementFactory factory = new HealthMeasurementFactory();
public static final String NAMESPACE = "http://ontology.universaal.org/HealthMeasurement.owl#";
public HealthMeasurementOntology() {
super(NAMESPACE);
}
public void create() {
Resource r = getInfo();
r.setResourceComment("");
r.setResourceLabel("HealthMeasurement");
addImport(DataRepOntology.NAMESPACE);
addImport(ServiceBusOntology.NAMESPACE);
addImport(LocationOntology.NAMESPACE);
addImport(PhThingOntology.NAMESPACE);
addImport(ProfileOntology.NAMESPACE);
// ******* Declaration of regular classes of the ontology ******* //
OntClassInfoSetup oci_HealthMeasurement = createNewOntClassInfo(
HealthMeasurement.MY_URI, factory, 0);
OntClassInfoSetup oci_PersonWeight = createNewOntClassInfo(
PersonWeight.MY_URI, factory, 3);
OntClassInfoSetup oci_BloodPressure = createNewOntClassInfo(
BloodPressure.MY_URI, factory, 6);
OntClassInfoSetup oci_HeartRate = createNewOntClassInfo(
HeartRate.MY_URI, factory, 7);
OntClassInfoSetup oci_HeartRateSignal = createNewOntClassInfo(
HeartRateSignal.MY_URI, factory, 8);
OntClassInfoSetup oci_BloodOxygenSat = createNewOntClassInfo(
BloodOxygenSaturation.MY_URI, factory, 9);
// ******* Add content to regular classes of the ontology ******* //
// Health Measurement
oci_HealthMeasurement.setResourceComment("");
oci_HealthMeasurement.setResourceLabel("HealthMeasurement");
oci_HealthMeasurement.addSuperClass(ManagedIndividual.MY_URI);
oci_HealthMeasurement.addObjectProperty(
HealthMeasurement.PROP_OBTAINED_BY).setFunctional();
oci_HealthMeasurement
.addRestriction(MergedRestriction
.getAllValuesRestrictionWithCardinality(
HealthMeasurement.PROP_OBTAINED_BY,
User.MY_URI, 1, 1));
oci_HealthMeasurement.addObjectProperty(
HealthMeasurement.PROP_MEASURED_FROM).setFunctional();
// oci_HealthMeasurement.addRestriction(MergedRestriction.getCardinalityRestriction(HealthMeasurement.PROP_MEASURED_BY,
// 1, 1));
oci_HealthMeasurement
.addRestriction(MergedRestriction
.getAllValuesRestrictionWithCardinality(
HealthMeasurement.PROP_MEASURED_FROM,
Device.MY_URI, 1, 1));
oci_HealthMeasurement
.addDatatypeProperty(HealthMeasurement.PROP_NAME);
oci_HealthMeasurement
.addRestriction(MergedRestriction.getAllValuesRestrictionWithCardinality(
HealthMeasurement.PROP_NAME, TypeMapper.getDatatypeURI(String.class), 1, 1));
oci_HealthMeasurement
.addDatatypeProperty(HealthMeasurement.PROP_DESCIPTION);
oci_HealthMeasurement
.addRestriction(MergedRestriction.getAllValuesRestrictionWithCardinality(
HealthMeasurement.PROP_DESCIPTION, TypeMapper.getDatatypeURI(String.class), 1, 1));
// Person Weight
oci_PersonWeight.setResourceComment("");
oci_PersonWeight.setResourceLabel("PersonWeight");
oci_PersonWeight.addSuperClass(HealthMeasurement.MY_URI);
oci_PersonWeight.addSuperClass(Measurement.MY_URI);
oci_PersonWeight.addRestriction(MergedRestriction.getAllValuesRestrictionWithCardinality(
Measurement.PROP_VALUE, TypeMapper.getDatatypeURI(Float.class), 1, 1));
oci_PersonWeight.addRestriction(MergedRestriction.getFixedValueRestriction(
Measurement.PROP_HAS_PREFIX, InternationalSystem.IND_PREFIX_SI_KILO));
oci_PersonWeight.addRestriction(MergedRestriction.getFixedValueRestriction(
Measurement.PROP_HAS_UNIT, InternationalSystem.IND_UNIT_SI_GRAM));
// Blood pressure
oci_BloodPressure.setResourceComment("");
oci_BloodPressure.setResourceLabel("BloodPressure");
oci_BloodPressure.addSuperClass(HealthMeasurement.MY_URI);
Unit mmHg = new Unit("mmHg", "mm Hg", "mm Hg",
MeasurableDimension.Derived);
MergedRestriction diasR = MergedRestriction
.getAllValuesRestrictionWithCardinality(
BloodPressure.PROP_DIASTOLIC, Measurement.MY_URI, 1, 1);
MergedRestriction sysR = MergedRestriction
.getAllValuesRestrictionWithCardinality(
BloodPressure.PROP_SYSTOLIC, Measurement.MY_URI, 1, 1);
MergedRestriction unitR = MergedRestriction.getFixedValueRestriction(
Measurement.PROP_HAS_UNIT, mmHg);
MergedRestriction typeR = MergedRestriction.getAllValuesRestriction(
Measurement.PROP_VALUE, TypeMapper.getDatatypeURI(Float.class));
unitR.appendTo(diasR, new String[] { BloodPressure.PROP_DIASTOLIC, Measurement.PROP_HAS_UNIT });
typeR.appendTo(diasR, new String[] { BloodPressure.PROP_DIASTOLIC, Measurement.PROP_VALUE });
unitR.appendTo(sysR, new String[] { BloodPressure.PROP_SYSTOLIC, Measurement.PROP_HAS_UNIT });
typeR.appendTo(sysR, new String[] { BloodPressure.PROP_SYSTOLIC, Measurement.PROP_VALUE });
oci_BloodPressure.addObjectProperty(BloodPressure.PROP_SYSTOLIC);
oci_BloodPressure.addRestriction(sysR);
oci_BloodPressure.addObjectProperty(BloodPressure.PROP_DIASTOLIC);
oci_BloodPressure.addRestriction(diasR);
// Heart rate
oci_HeartRate.setResourceComment("");
oci_HeartRate.setResourceLabel("HeartRate");
oci_HeartRate.addSuperClass(HealthMeasurement.MY_URI);
oci_HeartRate.addSuperClass(Measurement.MY_URI);
Unit beatsPerMinute = new DividedUnit("BPM", Util.IND_UNIT_UNITY,
TimeSystem.IND_UNIT_TS_MINUTE);
oci_HeartRate.addRestriction(MergedRestriction.getFixedValueRestriction(
Measurement.PROP_HAS_UNIT, beatsPerMinute));
oci_HeartRate.addRestriction(MergedRestriction.getAllValuesRestriction(
Measurement.PROP_VALUE, TypeMapper.getDatatypeURI(Integer.class)));
// Blood Oxygen Sat
oci_BloodOxygenSat.setResourceComment("Blood Oxygen Saturation SpO2");
oci_BloodOxygenSat.setResourceLabel("BloodOxygenSaturation");
oci_BloodOxygenSat.addSuperClass(HealthMeasurement.MY_URI);
oci_BloodOxygenSat.addSuperClass(Measurement.MY_URI);
Unit spo2 = new Unit("spo2", "SpO2", "%SpO2",
MeasurableDimension.Adiemnsional);
oci_BloodOxygenSat.addRestriction(MergedRestriction.getFixedValueRestriction(
Measurement.PROP_HAS_UNIT, spo2));
// Heart rate signal
oci_HeartRateSignal.setResourceComment("");
oci_HeartRateSignal.setResourceLabel("HeartRateSignal");
oci_HeartRateSignal.addSuperClass(Signal.MY_URI);
oci_HeartRateSignal.addDatatypeProperty(HeartRateSignal.PROP_INTERVAL)
.addSuperProperty(Signal.PROP_MEASUREMENT_INTERVAL);
// XXX: set restriction so that the interval unit is for time.
// XXX: set restriction so that the unit if the signal is the same as HeartRate.
}
}