/******************************************************************************* * 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.questionnaire; 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.QuestionnaireFactory; import org.universAAL.ontology.phThing.PhThingOntology; import org.universAAL.ontology.profile.ProfileOntology; import org.universAAL.ontology.profile.User; /** * This class describes the questionnaire ontology itself. * * @author mdelafuente * */ public final class QuestionnaireOntology extends Ontology { private static QuestionnaireFactory factory = new QuestionnaireFactory(); public static final String NAMESPACE = "http://ontology.universaal.org/Questionnaire.owl#"; public QuestionnaireOntology() { super(NAMESPACE); } public void create() { Resource r = getInfo(); r .setResourceComment("The ontology defining the most general concepts dealing with questionnaires."); r.setResourceLabel("Questionnaire"); addImport(DataRepOntology.NAMESPACE); addImport(PhThingOntology.NAMESPACE); addImport(ServiceBusOntology.NAMESPACE); addImport(ProfileOntology.NAMESPACE); OntClassInfoSetup oci; // ******* Regular classes of the ontology ******* // // load ChoiceLabel oci = createNewOntClassInfo(ChoiceLabel.MY_URI, factory, 6); oci .setResourceComment("A 'choice-label' is the composition of a label associated to a choice"); oci.setResourceLabel("ChoiceLabel"); oci.addSuperClass(ManagedIndividual.MY_URI); oci.addObjectProperty(ChoiceLabel.PROP_CHOICE).setFunctional(); oci.addRestriction(MergedRestriction.getCardinalityRestriction( ChoiceLabel.PROP_CHOICE, 1, 1)); oci.addDatatypeProperty(ChoiceLabel.PROP_LABEL).setFunctional(); oci.addRestriction(MergedRestriction .getAllValuesRestrictionWithCardinality(ChoiceLabel.PROP_LABEL, TypeMapper.getDatatypeURI(String.class), 1, 1)); // ------------------------------------------------------------------------------------------- // load Question oci = createNewAbstractOntClassInfo(Question.MY_URI); oci .setResourceComment("This concept describes a question which is the main unit of a questionnaire"); oci.setResourceLabel("Question"); oci.addSuperClass(ManagedIndividual.MY_URI); oci.addObjectProperty(Question.PROP_CORRECT_ANSWER); oci.addDatatypeProperty(Question.PROP_HAS_CORRECT_ANSWER) .setFunctional(); oci.addRestriction(MergedRestriction .getAllValuesRestrictionWithCardinality( Question.PROP_HAS_CORRECT_ANSWER, TypeMapper .getDatatypeURI(Boolean.class), 1, 1)); oci.addObjectProperty(Question.PROP_HAS_CHOICE_LABEL); oci.addRestriction(MergedRestriction.getAllValuesRestriction( Question.PROP_HAS_CHOICE_LABEL, ChoiceLabel.MY_URI)); oci.addDatatypeProperty(Question.PROP_ANSWER_TYPE_U_R_I) .setFunctional(); oci.addObjectProperty(Question.PROP_ANSWER_TYPE_U_R_I); oci.addRestriction(MergedRestriction.getAllValuesRestriction( Question.PROP_ANSWER_TYPE_U_R_I, TypeMapper .getDatatypeURI(String.class))); oci.addDatatypeProperty(Question.PROP_QUESTION_WORDING).setFunctional(); oci.addRestriction(MergedRestriction .getAllValuesRestrictionWithCardinality( Question.PROP_QUESTION_WORDING, TypeMapper .getDatatypeURI(String.class), 1, 1)); // ------------------------------------------------------------------------------------------- // load MultiChoiceQuestion oci = createNewOntClassInfo(MultiChoiceQuestion.MY_URI, factory, 2); oci .setResourceComment("A multi-choice question is a question that enables to select several choices as an answer."); oci.setResourceLabel("MultiChoiceQuestion"); oci.addSuperClass(Question.MY_URI); // load SingleChoiceQuestion oci = createNewOntClassInfo(SingleChoiceQuestion.MY_URI, factory, 3); oci .setResourceComment("A single-choice question is the kind of question that only has one choice as an answer."); oci.setResourceLabel("SingleChoiceQuestion"); oci.addSuperClass(Question.MY_URI); // load QuestionWithMedia oci = createNewOntClassInfo(QuestionWithMedia.MY_URI, factory, 1); oci .setResourceComment("A question with media is a question that has some media associated to it (video, images...)."); oci.setResourceLabel("QuestionWithMedia"); oci.addSuperClass(Question.MY_URI); oci.addObjectProperty(QuestionWithMedia.PROP_MEDIA); oci.addRestriction(MergedRestriction.getCardinalityRestriction( QuestionWithMedia.PROP_MEDIA, 1, 1)); // load ConditionalQuestion oci = createNewOntClassInfo(ConditionalQuestion.MY_URI, factory, 5); oci .setResourceComment("A conditional question is a question that only is shown to the user when he/she has given a specific answer (trigger answer) to a specific previous question."); oci.setResourceLabel("ConditionalQuestion"); oci.addSuperClass(Question.MY_URI); oci.addObjectProperty(ConditionalQuestion.PROP_TRIGGER_ANSWER) .setFunctional(); oci.addRestriction(MergedRestriction.getCardinalityRestriction( ConditionalQuestion.PROP_TRIGGER_ANSWER, 1, 1));// cambiado oci.addObjectProperty(ConditionalQuestion.PROP_DEPENDS_ON) .setFunctional(); oci.addRestriction(MergedRestriction .getAllValuesRestrictionWithCardinality( ConditionalQuestion.PROP_DEPENDS_ON, Question.MY_URI, 1, 1)); // ------------------------------------------------------------------------------------------- // load Questionnaire oci = createNewOntClassInfo(Questionnaire.MY_URI, factory, 4); oci .setResourceComment("A questionnaire is a composition of questions and answers, given by an examined user"); oci.setResourceLabel("Questionnaire"); oci.addSuperClass(ManagedIndividual.MY_URI); oci.addDatatypeProperty(Questionnaire.PROP_NAME); oci.addRestriction(MergedRestriction .getAllValuesRestrictionWithCardinality( Questionnaire.PROP_NAME, TypeMapper .getDatatypeURI(String.class), 1, 1)); oci.addDatatypeProperty(Questionnaire.PROP_DESCRIPTION); oci.addRestriction(MergedRestriction .getAllValuesRestrictionWithCardinality( Questionnaire.PROP_DESCRIPTION, TypeMapper .getDatatypeURI(String.class), 1, 1)); oci.addObjectProperty(Questionnaire.PROP_HAS_QUESTION).setFunctional(); oci .addRestriction(MergedRestriction .getAllValuesRestrictionWithCardinality( Questionnaire.PROP_HAS_QUESTION, Question.MY_URI, 1, -1)); oci.addDatatypeProperty(Questionnaire.PROP_ORDERED_QUESTIONS); oci.addRestriction(MergedRestriction .getAllValuesRestrictionWithCardinality( Questionnaire.PROP_ORDERED_QUESTIONS, TypeMapper .getDatatypeURI(Boolean.class), 1, 1)); // ------------------------------------------------------------------------------------------- // load Answer oci = createNewOntClassInfo(Answer.MY_URI, factory, 8); oci.setResourceComment("An answer is the response to a question."); oci.setResourceLabel("Answer"); oci.addSuperClass(ManagedIndividual.MY_URI); oci.addObjectProperty(Answer.PROP_ANSWER_CONTENT); oci.addObjectProperty(Answer.PROP_IS_ASSOCIATED_TO_A_QUESTION) .setFunctional(); oci.addRestriction(MergedRestriction .getAllValuesRestrictionWithCardinality( Answer.PROP_IS_ASSOCIATED_TO_A_QUESTION, Question.MY_URI, 1, 1)); // ------------------------------------------------------------------------------------------- // load AnsweredQuestionnaire oci = createNewOntClassInfo(AnsweredQuestionnaire.MY_URI, factory, 0); oci .setResourceComment("An answered questionnaire contains the answers given by the examined user."); oci.setResourceLabel("AnsweredQuestionnaire"); oci.addSuperClass(ManagedIndividual.MY_URI); oci.addObjectProperty(AnsweredQuestionnaire.PROP_IS_ASSOCIATED_TO) .setFunctional(); oci.addRestriction(MergedRestriction .getAllValuesRestrictionWithCardinality( AnsweredQuestionnaire.PROP_IS_ASSOCIATED_TO, Questionnaire.MY_URI, 1, 1)); oci.addObjectProperty(AnsweredQuestionnaire.PROP_IS_ANSWERED_BY) .setFunctional(); oci.addRestriction(MergedRestriction .getAllValuesRestrictionWithCardinality( AnsweredQuestionnaire.PROP_IS_ANSWERED_BY, User.MY_URI, 1, 1)); oci.addObjectProperty(AnsweredQuestionnaire.PROP_IS_COMPOSED_BY) .setFunctional(); oci.addRestriction(MergedRestriction .getAllValuesRestrictionWithCardinality( AnsweredQuestionnaire.PROP_IS_COMPOSED_BY, Answer.MY_URI, 1, -1)); oci.addDatatypeProperty(AnsweredQuestionnaire.PROP_COMPLETENESS); oci.addRestriction(MergedRestriction .getAllValuesRestrictionWithCardinality( AnsweredQuestionnaire.PROP_COMPLETENESS, TypeMapper .getDatatypeURI(Double.class), 1, 1)); // load QuestionnaireService /**/ oci = createNewOntClassInfo(QuestionnaireService.MY_URI, factory, 9); oci.setResourceComment("Description of the questionnaire service."); oci.setResourceLabel("QuestionnaireService"); oci.addSuperClass(Service.MY_URI); oci.addObjectProperty(QuestionnaireService.PROP_PROPOSED_QUESTIONNAIRE); oci.addRestriction(MergedRestriction.getAllValuesRestriction( QuestionnaireService.PROP_PROPOSED_QUESTIONNAIRE, Questionnaire.MY_URI)); oci.addObjectProperty(QuestionnaireService.PROP_TARGET_USER); oci.addRestriction(MergedRestriction.getAllValuesRestriction( QuestionnaireService.PROP_TARGET_USER, User.MY_URI)); oci .addObjectProperty(QuestionnaireService.PROP_GENERATES_ANSWERED_QUESTIONNAIRE); oci.addRestriction(MergedRestriction.getAllValuesRestriction( QuestionnaireService.PROP_GENERATES_ANSWERED_QUESTIONNAIRE, AnsweredQuestionnaire.MY_URI)); } }